X. Сегментация памяти
Очистка страниц в Windows-системах
В Windows-системах каждому процессу выделяется виртуальное адресное пространство в 4 Гбайт (ограничение – 32 разрядов): нижние 2 Гбайт доступны для процесса, а верхние 2 Гбайт отображаются на память ядра, что позволяет при переключении потока в режим ядра не менять карту памяти. Области в 64 Кбайт, в начале и в конце выделенного адресного пространства, используются для защиты виртуального адресного пространства процесса; при попытке чтения или записи в эти области будет вызвано прерывание. Страницы имеют фиксированный размер и подгружаются по требованию. В Windows существуют три состояния страниц:
· свободное состояние – когда страница не используется;
· фиксированное состояние – когда данные отображены в странице;
· зарезервированное состояние – когда страница зарезервирована, но не занята данными (при создании потока).
Изменяемые страницы хранятся в файлах свопинга, которых может быть до 16; опережающая подкачка страниц в Windows не используется.
Страничный демон в Windows состоит из менеджера балансового множества, который проверяет, достаточно ли свободных страниц, и менеджера рабочих наборов, который исследует рабочие наборы и освобождает страницы. Также в Windows есть другие демоны: свопер-демон, демон записи отображенных страниц – запись в отображенные файлы, демон записи модифицированных страниц.
Средства организации памяти работают с единицами памяти, называемыми сегментами, каждый из которых представляет собой независимое, защищенное адресное пространство и является логическим объектом.
При разбиении виртуальной памяти на сегменты каждому модулю программных кодов и данных может быть присвоен свой собственный логический сегмент памяти, что способствует достаточно простой реализации механизмов, обеспечивающих защиту отдельных модулей, разделение информации между сегментами, совместную или раздельную их обработку.
Доступ к сегментам управляется данными, в которых описаны их размер, уровень привилегированности, необходимый для доступа к ним, типы ссылок к памяти, применимые к этому сегменту (выборка команды, помещение или извлечение из стека, операции чтения и записи), а также его присутствие в памяти.
Сегментация обеспечивает каждую программу несколькими независимыми, защищенными адресными пространствами, т. е. позволяет иметь либо полностью неструктурированную, простую память, подобную модели памяти 8-битового процессора, либо высоко структурированную память, с использованием трансляции адресов и защиты.
Таким образом, сегментация служит для управления доступом к памяти, что обеспечивает удобство нахождения ошибок при разработке программы и повышение надежности конечного программного продукта и используется также для упрощения компоновки объектных модулей кода.
Механизм сегментации делает ненужным создание кодов, независимых от позиции в памяти, поскольку все ссылки к памяти могут выполняться относительно базового адреса кодового сегмента и сегмента данных модуля.
Аппаратное обеспечение сегментации транслирует сегментированный (логический) адрес в адрес непрерывного, несегментированного адресного пространства, который называется линейным адресом.
Если разрешена подкачка страниц, то аппаратное обеспечение подкачки транслирует линейный адрес в физический адрес.
Если подкачка страниц не разрешена, то в качестве физического адреса используется линейный адрес.
Физический адрес подается на выходящую из процессора адресную шину.