Зачем нам нужно записывать грязные страницы обратно на диск, чтобы удалить их?

#caching #memory-management #operating-system #dirty-data

Вопрос:

«…если страница была изменена и, следовательно, загрязнена, ее необходимо записать обратно на диск, чтобы удалить ее, а это дорого». (В главе 22 ОСТЕП)

Я не знаю, почему. Чтобы удалить его из памяти, грязная страница будет перемещена в пространство подкачки, а затем она будет перемещена обратно. Нужно ли снова записывать его на диск? Это означает, что нам нужны два дисковых ввода-вывода, когда мы удаляем грязную страницу.

Комментарии:

1. Что вы понимаете под «пространством подкачки»?

2. @MartinJames Для поддержки большего объема памяти, чем физически доступно, нам нужно немного места на диске для перемещения страниц вперед и назад. Обычно мы называем такое пространство «пространством подкачки», потому что система может подкачивать страницы из памяти в него и подкачивать страницы из него в память.

3. @dazhu, что пространство подкачки необходимо только для анонимных страниц, потому что для страниц с файловой поддержкой уже есть место на диске для их хранения, т. Е. исходный файл, из которого они были получены.

Ответ №1:

Я думаю, что вы объединяете две разные вещи. Пространство подкачки (которое представляет собой область памяти на диске) действует как хранилище резервных копий для анонимных страниц (страниц, на которых нет файла резервной копии). Заявление, которое вы процитировали, вероятно, относится к грязной странице с файловой поддержкой. Это означает, что страница взята из файла на диске; этой странице нет необходимости переходить в пространство подкачки, ее можно просто записать обратно в расположение файла на диске. Тем не менее, он должен быть записан обратно, чтобы сохранить новые данные.

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


Пространство подкачки упрощает аналогичное обращение с файлами и анонимными страницами, поскольку теперь оба типа страниц могут быть удалены на диск, только анонимные страницы будут удалены для подкачки, в то время как страницы с файлами вернутся на свое обычное место на диске.

Кроме того, чистые страницы никогда не нужно записывать обратно на диск, потому что они уже существуют на диске в их текущем состоянии. Это справедливо даже для чистых анонимных страниц. Это связано с тем, что чистые анонимные страницы-это просто фактически выделенные страницы, которые сопоставляются с одной и той же общей обнуленной страницей. Так что не было бы необходимости менять местами эту память. Но когда они записываются, это вызывает ошибку страницы COW, они получают собственную память, помечаются как грязные и теперь должны быть перемещены для замены, если их выселят.

Комментарии:

1. Я изучил только первую часть операционной системы-виртуализацию. Поэтому я мало что знаю о некоторых терминологиях в вашем ответе, таких как анонимная страница и страница с файловой поддержкой. Может быть, когда я закончу книгу, я лучше пойму ваш ответ!

2. @dazhu Я думаю, что ключом к ответу на ваш вопрос является то, что пространство подкачки находится на диске, поэтому независимо от типа страницы (анон. или с резервной копией файла) страница должна быть записана обратно на диск, если она загрязнена, потому что на грязных страницах есть новая информация, которая еще не сохранена.

3. @dazhu или, скорее, вся загрязненная память в оперативной памяти содержит новую память, которая не хранится на жестком диске, поэтому она может быть потеряна при отключении питания. Поэтому, если память удалена, она должна быть сначала записана на диск, чтобы к ней можно было получить доступ позже. Пространство подкачки-это особый тип дискового пространства для одного типа памяти, но пока просто подумайте о «перемещении в пространство подкачки» как эквиваленте «записи обратно на диск».

4. Когда памяти недостаточно, мы должны удалить грязную страницу или чистую страницу, чтобы поменять место. Если чистая страница удалена, нам просто нужен дисковый ввод-вывод, чтобы записать ее в пространство подкачки. Если грязная страница удалена, нам нужно два дисковых ввода-вывода. Один из них состоит в том, чтобы записать его куда-нибудь на диск, а другой-использовать его для подкачки пространства. Правильно ли я понимаю?

5. @dazhu Нет, это не правильно. Чистая страница-это страница, которая вообще не была изменена по сравнению с ее первоначальной версией на диске. Поэтому, когда чистая страница удаляется, нет необходимости выполнять какие-либо операции ввода-вывода, просто отметьте страницу как недействительную. С другой стороны, грязная страница содержит новую информацию, которая не хранится на резервном диске. Здесь я пытался объяснить две категории страниц: для страниц с файловой поддержкой требуется один дисковый ввод-вывод, который будет записан обратно в их расположение на диске. Анонимным страницам (например, памяти из кучи процессов, которые не поддерживаются файлом) требуется один дисковый ввод-вывод для перехода в пространство подкачки.

Ответ №2:

Если содержимое не понадобится в более позднее время, то нет необходимости записывать его содержимое на диск (или какой-либо другой тип носителя) при его удалении.

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

(Я должен добавить, что содержимое памяти относится к содержимому всей страницы памяти.)

Комментарии:

1. Если содержимое грязной страницы понадобится позже, мы можем заменить грязную страницу в память из пространства подкачки. Почему содержимое грязной страницы изменяется в пространстве подкачки?

2. @dazhu — Резервный носитель предназначен только для хранения и извлечения. Грязные страницы записываются на резервные носители. При хранении на резервных носителях они не меняются. Когда они необходимы, они загружаются с резервного носителя в память. Пространство подкачки — это всего лишь класс резервных носителей.

3. @dazhu — Может быть полезно подумать о вещах с точки зрения резервного носителя (например, жесткого диска). Доступ к данным осуществляется с помощью блока, а не байта. Хотя это и не обязательно, вы часто можете думать, что страница памяти и дисковый блок имеют одинаковый размер-скажем, 4 КБ. Чтобы обновить блок на диске, сначала необходимо загрузить весь блок в память. Затем обновите память. Затем запишите весь блок обратно на диск.

4. «Пока они хранятся на резервных носителях, они не меняются», Поэтому я думаю, что нам просто нужен дисковый ввод-вывод, чтобы использовать грязную страницу для подкачки пространства, когда памяти недостаточно. Но в цитате нам, похоже, нужны два дисковых ввода-вывода (другой-записать грязную страницу куда-нибудь на диск). Я не знаю, зачем нам нужны два дисковых ввода-вывода.

5. @dazhu — Один дисковый ввод-вывод предназначен для записи содержимого удаляемой грязной страницы на резервный носитель. Однако, если удаленная страница не загрязнена, то запись не требуется. Другой способ ввода-вывода диска заключается в чтении новой страницы с резервного носителя в память.