7

мой вопрос теоретический в компьютерных ОС, в частности, о гибернации.

Насколько я знаю, гибернация (состояние ACPI S5, верно?) включает в себя запись на жесткий диск всех данных, необходимых для восстановления оперативной памяти при повторной загрузке ОС. ОК, это звучит хорошо для меня.

Но я помню старые времена в классе операционных систем, когда учитель объяснял различия в управлении памятью между операционными системами. Ядро Windows и Linux используют виртуальную память: все страницы инициализируются в swap, а затем загружаются в RAM, когда это необходимо, чтобы их можно было перемещать в любое время.

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

Мой вопрос: почему Windows нужно хранить отдельный файл hiberfil.sys со всей оперативной памятью, сбрасываемой внутри, поскольку все страницы должны уже присутствовать в файле подкачки (а гибернация будет означать просто очистку кешей и остановку компьютера) и почти все чистые после длительное бездействие?

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

Я что-то упускаю из-за ядер?

3 ответа3

4

Недоразумение в том, что не все содержимое оперативной памяти можно перенести на диск.

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

Файл гибернации записывается со всеми данными, которые необходимы для дублирования состояния системы . Это далеко не равно по размеру оперативной памяти, поскольку записывается только занятая память.

Сохранение и восстановление занимают примерно одно и то же время, поскольку необходимо прочитать те же данные, что были записаны. На дисках, где чтение намного быстрее записи, таких как SSD, восстановление будет намного быстрее.

2

Ваш файл подкачки может быть меньше, больше или иметь тот же размер, что и ваша оперативная память. Некоторые люди даже (по ошибке) выключают его. Поэтому Microsoft решила создать отдельный файл, размер которого гарантированно совпадает с размером ОЗУ, и который можно читать и записывать при запуске и в спящем режиме соответственно. Что касается Linux, я бы принял ту же логику.

РЕДАКТИРОВАТЬ:

И как Harrymc указывает в своем ответе, это для поддержания состояния системы.

2

Часть того, что вы описываете, звучит не столько как виртуальная память, сколько как дисковый кеш, где операционная система сохраняет в памяти копии данных, которые она считывает с диска, на случай, если приложение захочет прочитать ее снова. В этом случае он также может задержать запись "грязных" страниц обратно на диск, чтобы повысить эффективность, записав сразу несколько страниц.

Виртуальная память - наоборот: данные сначала записываются в ОЗУ, и только в файл подкачки, если ядру необходимо освободить эту ОЗУ для каких-либо других целей. (Не каждый бит памяти обязательно имеет соответствующее пространство в файле подкачки; в противном случае вы не могли бы иметь файл подкачки, меньший, чем ваш объем ОЗУ.) Обычное мышление состоит в том, что так оно и должно быть; Было бы слишком дорого копировать ОЗУ на диск все время, когда вам это не нужно. Подумайте о том, насколько медленно работает ваш компьютер, когда вы запускаете много программ, требующих памяти, и он начинает перебрасывать пространство подкачки.

Тем не менее, есть некоторые экспериментальные исследовательские операционные системы, которые работают больше, как вы описали, с некоторыми сложными правилами для копирования памяти обратно на диск через регулярные промежутки времени, и в результате нет необходимости в спящем режиме - вы можете отключить компьютер и потерять возможно 30 секунд работы. Проверьте CoyotOS, CapROS или EROS, если вам интересно теоретически. Я не знаю, какова их производительность, или какие у этой стратегии могут быть и другие недостатки, но когда вы учитываете такие сумасшедшие вещи, как память, используемая вашей видеокартой или другими устройствами, я думаю, что ее трудно получить работает правильно для всех случаев. Насколько я знаю, ни одна производственная операционная система не делает такого рода вещи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .