我正在创建一个自定义操作系统,有没有办法在程序集中存储数据(几乎像文件系统),这样如果计算机关闭并重新打开,数据仍然会存在?
答案 0 :(得分:3)
您可以为SATA硬盘驱动器,USB海量存储设备,软盘驱动器,NVMe闪存或其他任何其他设备编写设备驱动程序。您也可以使用BIOS功能来访问它们(特别是如果您使用的是x86)。但是你必须以512B或4096B的块来管理写入,因为这些类型的存储是基于块的。
对该问题的更直接的解释有一个有趣的答案:像mov [mem], eax
这样的存储指令是否可以将数据放入持久存储中,其中加载指令可以在以后(电源循环后)获取它?
是的,如果您的硬件有一些内存映射的非易失性RAM 。 (物理内存映射的NVRAM,如NVDIMM,与mmap()
不同,无法将文件逻辑映射到进程的虚拟内存地址空间。见answer on Superuser about Intel Optane DC Persistent Memory
clwb
回写一个缓存行(一直到内存)而不必驱逐它。 clwb
的早期实现可能会像clflushopt
一样运行,但是:@Ana reports that Skylake-X does evict。
此外,clflushopt
是一种更有效的方法来强制更多缓存行到内存。在像sfence
之类的弱顺序刷新之后使用像clflushopt
这样的内存屏障,以确保在进一步写入之前数据位于非易失性RAM中。
有一段时间,英特尔要求pcommit
作为确保数据达到非易失性存储的一部分,but decided against it。考虑到这一点,请参阅Why Intel added the CLWB and PCOMMIT instructions以获取有关使用持久性RAM的更多详细信息。
IDK除了x86之外的架构情况如何,但推测NV RAM也可用于ARM和其他CPU。