Есть ли способ кодировать данные непосредственно на жесткий диск (аналогично тому, как это можно сделать с оперативной памятью)? - PullRequest
4 голосов
/ 10 февраля 2020

Мой вопрос касается C / C ++. Можно манипулировать данными в ОЗУ с довольно большой гибкостью. Вы также можете давать прямые команды GPU, используя OpenGL, что позволяет также управлять VRAM.

Меня интересует, возможно ли сделать это с жестким диском (хотя это, вероятно, было бы ужасной идеей с множеством возможностей испортить существующие данные). Логика c моего вопроса исходит из предположения, что жесткий диск похож на RAM и VRAM (байты данных), но просто обращается к данным медленнее.

Я не спрашиваю о том, как выполнить файл IO, но вместо этого, как напрямую изменять байты памяти на жестком диске (возможно, с помощью какого-то «указателя жесткого диска»).

Если мое предположение полностью не соответствует, детальное исправление о том, как жесткий диск хранение данных отличается от оперативной памяти или VRAM будет очень полезно. Спасибо!

Ответы [ 2 ]

4 голосов
/ 10 февраля 2020

Современные операционные системы в сочетании с современными процессорами позволяют отображать кластеры памяти на страницы памяти.

Страницы памяти изначально помечаются как недействительные, и как только вы пытаетесь получить к ним доступ, возникает недопустимая «ловушка» или «прерывание» страницы, которая обрабатывается операционной системой, которая загружает соответствующий кластер в эта страница памяти.

Если вы пишете на эту страницу, существует либо аппаратный «грязный» бит, либо другой механизм прерывания: страница памяти первоначально помечается как доступная только для чтения, поэтому при первой попытке записи на нее есть другое прерывание, которое просто помечает страницу как грязную и превращает ее в чтение-запись. Затем вы знаете, что страница должна быть записана на диск в удобное время.

Обратите внимание, что чтение и запись обычно выполняются с помощью прямого доступа к памяти (DMA), поэтому центральный процессор может выполнять другие действия, пока страницы переносятся.

Итак, да, вы можете сделать это либо с помощью операционной системы, либо самостоятельно написав весь этот очень сложный код.

2 голосов
/ 10 февраля 2020

Не для тебя. Возможность записи напрямую на жесткий диск даст вам бесконечный потенциал, чтобы испортить вещи до неузнаваемости. (Технический термин - FUBAR, и F не означает беспорядок).

И если вы пишете драйверы жесткого диска, я искренне надеюсь, что вы не пытаетесь обратиться за помощью здесь .

...