Почему ОС необходимо скопировать всю RAM на HDD для спящего режима?

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

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

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

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

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

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

Я что-то пропустил о ядрах?

7 голосов | спросил usr-local-ΕΨΗΕΛΩΝ 4 SatEurope/Moscow2010-12-04T20:05:15+03:00Europe/Moscow12bEurope/MoscowSat, 04 Dec 2010 20:05:15 +0300 2010, 20:05:15

3 ответа


2

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

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

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

ответил Jander 5 SunEurope/Moscow2010-12-05T12:25:07+03:00Europe/Moscow12bEurope/MoscowSun, 05 Dec 2010 12:25:07 +0300 2010, 12:25:07
4

Непонимание здесь заключается в том, что не все содержимое ОЗУ можно заменить на диск.

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

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

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

ответил harrymc 4 SatEurope/Moscow2010-12-04T21:12:13+03:00Europe/Moscow12bEurope/MoscowSat, 04 Dec 2010 21:12:13 +0300 2010, 21:12:13
2

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

EDIT:

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

ответил 4 SatEurope/Moscow2010-12-04T20:12:10+03:00Europe/Moscow12bEurope/MoscowSat, 04 Dec 2010 20:12:10 +0300 2010, 20:12:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132