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