我正在创建一个自定义操作系统,有什么方法可以在程序集中存储数据(几乎像文件系统),这样如果计算机关闭并重新打开数据仍然存在?
1 回答
您可以为 SATA 硬盘驱动器、USB 大容量存储、软盘、NVMe 闪存或 asm 中的任何其他内容编写设备驱动程序。您也许还可以使用 BIOS 功能来访问它们(尤其是在 x86 上时)。但是您必须管理 512B 或 4096B 的块中的写入,因为这些类型的存储是基于块的。
这个问题的更字面解释有一个有趣的答案:存储指令是否可以mov [mem], eax
将数据放入持久存储中,加载指令可以稍后(在电源循环之后)获取它?
是的,如果您的硬件有一些内存映射的非易失性 RAM。(物理内存映射的 NVRAM 就像NVDIMM一样,不喜欢mmap()
将文件逻辑映射到进程的虚拟内存地址空间)。在超级用户上查看有关 Intel Optane DC Persistent Memory 的答案
例如,x86 最近获得了更多支持 NVRAM 的指令,例如clwb
写回高速缓存行(一直到内存)而不必将其逐出。的早期实现clwb
可能只是像 一样运行它clflushopt
:@Ana 报告说 Skylake-X 确实 evict。
此外,clflushopt
这是一种将更多高速缓存行强制到内存的更有效方法。sfence
在弱排序刷新之后使用内存屏障clflushopt
,以确保数据在进一步写入出现之前位于非易失性 RAM 中。
有一段时间,英特尔将要求pcommit
作为确保数据进入非易失性存储的一部分,但决定不这样做。考虑到这一点,请参阅为什么英特尔添加了 CLWB 和 PCOMMIT 指令以了解有关使用持久 RAM 的更多详细信息。
IDK 在 x86 以外的架构上情况如何,但大概 NV RAM 是/将可与 ARM 和其他 CPU 一起使用。