【问题标题】:Store read/write data in assembly similar to filesystem将读/写数据存储在类似于文件系统的程序集中
【发布时间】:2017-11-14 01:20:37
【问题描述】:

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

【问题讨论】:

  • 您当然也可以将它们写入任何存储设备(如文件系统),但如果它是您的实际硬件,请确保写入您不关心内容的设备,或者您实际上确实使用了它的文件系统并编写了有效的文件(对于现代文件系统可能非常复杂,对于类似 FAT 的旧 FS 来说足够简单)。最好不要一开始就使用实际的硬件,而是在一些虚拟机/模拟器中运行。但是 NVRAM 几乎是“即时”的(而闪存驱动器的存储设备可能需要几毫秒,而机械驱动器可能需要几毫秒)并且您可以按照您想要的任何方式构建数据(只要您适合大小)。跨度>

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


【解决方案1】:

您可以为 SATA 硬盘驱动器、USB 大容量存储、软盘、NVMe 闪存或 asm 中的任何其他东西编写设备驱动程序。您也许还可以使用 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 是一种将更多高速缓存行强制到内存的更有效方法。在像clflushopt 这样的弱排序刷新之后使用像sfence 这样的内存屏障,以确保在进一步写入出现之前数据在非易失性RAM 中。

有一段时间,英特尔将要求pcommit 作为确保数据到达非易失性存储的一部分,but decided against it。考虑到这一点,请参阅 Why Intel added the CLWB and PCOMMIT instructions 了解有关使用持久 RAM 的更多详细信息。

知道 x86 以外的架构上的情况如何,但大概 NV RAM 也可以用于 ARM 和其他 CPU。

【讨论】:

  • 谢谢!这真的很有帮助
猜你喜欢
  • 2011-10-19
  • 2021-05-31
  • 2012-06-26
  • 2012-08-29
  • 2012-04-01
  • 2014-05-04
  • 2021-09-19
  • 1970-01-01
  • 2011-01-04
相关资源
最近更新 更多