Для работы с устройствами хранения нам нужна файловая система, а как насчет пространства подкачки?
Если у него нет файловой системы, как с ним работает операционная система? Как данные (из ОЗУ) записываются на диск и как к ним снова обращаться?
Для работы с устройствами хранения нам нужна файловая система, а как насчет пространства подкачки?
Если у него нет файловой системы, как с ним работает операционная система? Как данные (из ОЗУ) записываются на диск и как к ним снова обращаться?
Ответы:
У свопа технически нет конкретной файловой системы. Вся цель файловой системы - структурировать данные определенным образом. В частности, раздел подкачки не имеет структуры, но у него есть определенный заголовок, который создается mkswap
программой. В частности, это (взято с kernel.org ):
25 union swap_header {
26 struct
27 {
28 char reserved[PAGE_SIZE - 10];
29 char magic[10];
30 } magic;
31 struct
32 {
33 char bootbits[1024];
34 unsigned int version;
35 unsigned int last_page;
36 unsigned int nr_badpages;
37 unsigned int padding[125];
38 unsigned int badpages[1];
39 } info;
40 };
Каждый раздел имеет определенный код, связанный с ним, и в соответствии с TLDP :
код для ext2 - 0x83, а для Linux - 0x82.
Когда речь идет о файле подкачки , это немного другая история. Ядро должно учитывать тот факт, что файловая система может иметь свой собственный способ структурирования данных. С той же ссылки на kernel.org:
Помните, что файловые системы могут иметь свой собственный метод хранения файлов и диска, и это не так просто, как раздел подкачки, где информация может быть записана непосредственно на диск. Если резервное хранилище является разделом, то для ввода-вывода требуется только один блок размером с страницу, а поскольку файловая система не задействована, bmap () не требуется.
В заключение, технически вы можете назвать swap space файловой системой своего типа, но она не совсем сопоставима с файловыми системами, такими как NTFS или ext4.
Вы также спросили
Я хочу знать, как можно записать в памяти без файловой системы
Строго говоря, нет необходимости структурировать оперативную память. Однако части ОЗУ могут быть структурированы как tmpfs в Unix-подобных ОС. Также есть ramfs и initramfs, которые загружаются в процессе загрузки. Но технически данные ОЗУ должны быть просто необработанными единицами и нулями, поэтому в любом случае их не нужно структурировать.
Пространство подкачки используется ядром для временного хранения страниц системной памяти (ОЗУ) по мере ее заполнения. Ядро использует свои собственные внутренние таблицы, чтобы «запомнить», где именно на диске подкачки он поместил страницу. В результате подкачки дисков не содержат надлежащей файловой системы и, как правило, являются просто пустыми разделами на диске.
Что вас может заинтересовать, так это RAM-диск, представляющий собой небольшую файловую систему, хранящуюся в системной памяти. Если потребуется больше памяти, ядро вытолкнет ее (и другое содержимое) в область подкачки. Смотрите здесь для получения инструкций по настройке.
Пространство подкачки разделено на блоки того же размера, что и страницы памяти (обычно 4 КБ), и запись сопоставления этих страниц с памятью приложения образует расширение подсистемы виртуальной памяти в ЦП и ОС.
То есть уже существует система отображения между областями памяти приложения и реальным адресом физической памяти. Приложению дается большое адресное пространство памяти, которое они могут использовать как можно меньше или меньше. Поскольку больше этого адресного пространства памяти фактически используется, физическая память сопоставляется с этим приложением, чтобы служить носителем данных.
Когда память перемещается на диск, связанная система поддерживает это сопоставление пространства памяти приложения с блоком на диске.
Сама таблица сопоставления не сохраняется на диске, а данные, остающиеся на диске, после перезагрузки становятся бесполезными.