- Почему существует часть виртуальной памяти, зарезервированной для ОС? Почему он ограничен определенным размером? Это, кажется, общеизвестный факт, потому что, когда я googled, я не нашел никого, задающего подобные вопросы.
- Если доступ к сегменту ОС (часть в VM зарезервирована для ОС), что происходит?
- Как сегмент ОС влияет на перевод между виртуальной и физической памятью?
- Например, если ваша виртуальная память составляет 128 КБ, первые 32 КБ выделяются для сегмента 0 и последние 32 КБ для сегмента 1. Затем вы резервируете первый 16 КБ для OS seg. Что происходит с сегом 0? Уменьшается ли размер до 16 КБ, потому что 16 КБ был изменен на OS seg? Или он остается прежним?
ответ
Почему существует часть виртуальной памяти, зарезервированной для ОС? Почему он ограничен определенным размером? Это, кажется, общеизвестный факт, потому что, когда я googled, я не нашел никого, задающего подобные вопросы.
Причина, по которой определенная область логического адресного пространства зарезервирована для ОС, заключается в том, что одна и та же физическая память используется всеми процессами и должна находиться в одном месте.
Когда происходит прерывание, любой процесс может быть запущен. Поэтому обработчик режима ядра должен находиться в одном месте.
Обычно зарезервированная область ОС настолько велика, что фактическая ОС никогда не приблизится к ее использованию. Таким образом, он не ограничен по размеру.
Если к сегменту ОС обращаются, что происходит?
Это зависит от того, как это делается. Если процесс обращается к нему в режиме ядра (системный вызов, прерывание, исключение), это нормально. Если он обращается к зарезервированной области в пользовательском режиме, это обычно вызывает какое-либо нарушение доступа. Некоторые системы могут сделать некоторые области системной памяти доступными для чтения из пользовательского режима, но обычно они защищены от записи.
Как сегмент ОС влияет на перевод между виртуальной и физической памятью?
Это зависит от системы. Некоторые системы делают страницы пользовательской страницы доступными для страницы. Таблицы пользовательских страниц могут быть в областях, доступных для страниц в системном адресном пространстве. Другими словами, таблицы страниц находятся в виртуальной/логической памяти, предоставляя дополнительный перевод для адресов пользователей, которые не встречаются для системных адресов.
Выполнение этого же для системного адресного пространства вызовет проблему с курицей и яйцом. В такой системе таблицы системных страниц будут находиться в физических местах (по другой причине каждый использует тот же диапазон адресов для системного пространства).
Другие системы используют физические адреса для всех таблиц страниц. В случае, если они перевод тот же.
Например, если ваша виртуальная память составляет 128 КБ, первые 32 КБ выделяются для сегмента 0 и последние 32 КБ для сегмента 1. Затем вы резервируете первый 16 КБ для OS seg. Что происходит с сегом 0? Уменьшается ли размер до 16 КБ, потому что 16 КБ был изменен на OS seg? Или он остается прежним?
Это не очень хороший пример. Виртуальная память никогда не бывает такой маленькой. Представьте себе 32-битную систему. Виртуальное адресное пространство составляет 4 ГБ. Система назначает первым 3 ГБ пользователю пространство пользователя и последние 1 ГБ для системного пространства.
Все процессы имеют одно и то же системное пространство 1 ГБ. У них есть собственное, уникальное 3 ГБ пространства пользователя.
Спасибо! Это очень подробное объяснение. – HoneyWine
Что делать, если не было, и у вас кончилось VM. Ядро настолько велико. – Jasen
Что означает 'OS-сегмент'? – Jasen
@Jasen Извините, я имел в виду часть в VM, зарезервированную для ОС – HoneyWine