Хранить данные чтения / записи в сборке, аналогичной файловой системе
Я создаю собственную операционную систему и есть ли способ хранить данные (почти как файловая система) в сборке, чтобы, если компьютер выключится и снова включит данные, все еще был там?
1 ответ
Вы можете написать драйверы устройств для жестких дисков SATA, запоминающих устройств USB, дискет, флэш-памяти NVMe или чего-либо еще в asm. Вы также можете использовать функции BIOS для доступа к ним (особенно если вы используете x86). Но тогда вы должны управлять записями по частям 512B или 4096B, потому что эти типы хранилищ основаны на блоках.
Более буквальная интерпретация вопроса имеет интересный ответ: может ли магазинная инструкция, такая как mov [mem], eax
поместить данные в постоянное хранилище, где инструкция загрузки может получить их позже (после цикла питания)?
Да, если ваше оборудование имеет некоторое энергонезависимое ОЗУ с отображением в памяти. (Физически отображаемая память NVRAM, как NVDIMM, а не как mmap()
логически отобразить файл в адресное пространство виртуальной памяти процесса)
Например, x86 недавно получил больше инструкций для поддержки NVRAM, например clwb
записать обратно строку кэша (всю дорогу в память), не удаляя ее.
Также, clflushopt
это более эффективный способ заставить больше строк кэша в памяти. Используйте барьер памяти как sfence
после слабо упорядоченного флеша clflushopt
чтобы убедиться, что данные находятся в энергонезависимой памяти, прежде чем появятся дальнейшие записи.
Некоторое время Intel собиралась потребовать pcommit
как часть проверки того, что данные попали в энергонезависимое хранилище, но решили отказаться от этого. Имея это в виду, см. Почему Intel добавила инструкции CLWB и PCOMMIT для более подробной информации об использовании постоянной оперативной памяти.
IDK, как обстоят дела на архитектурах, отличных от x86, но, по-видимому, NV RAM будет / будет использоваться с ARM и другими процессорами тоже.