4

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

4

1 回答 1

5

您可以为 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 一起使用。

于 2017-11-14T01:32:25.337 回答