以类似于文件系统的程序集存储读/写数据

时间:2017-11-14 01:20:37

标签: file assembly operating-system persistence non-volatile

我正在创建一个自定义操作系统,有没有办法在程序集中存储数据(几乎像文件系统),这样如果计算机关闭并重新打开,数据仍然会存在?

1 个答案:

答案 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

例如,x86最近得到了更多支持NVRAM的指令,比如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。