Сегменты, доступ к сегментам, сегментация

X. Сегментация памяти

Очистка страниц в Windows-системах

В Windows-системах каждому процессу выделяется виртуальное адресное пространство в 4 Гбайт (ограничение – 32 разрядов): нижние 2 Гбайт доступны для процесса, а верхние 2 Гбайт отображаются на память ядра, что позволяет при переключении потока в режим ядра не менять карту памяти. Области в 64 Кбайт, в начале и в конце выделенного адресного пространства, используются для защиты виртуального адресного пространства процесса; при попытке чтения или записи в эти области будет вызвано прерывание. Страницы имеют фиксированный размер и подгружаются по требованию. В Windows существуют три состояния страниц:

· свободное состояние – когда страница не используется;

· фиксированное состояние – когда данные отображены в странице;

· зарезервированное состояние – когда страница зарезервирована, но не занята данными (при создании потока).

Изменяемые страницы хранятся в файлах свопинга, которых может быть до 16; опережающая подкачка страниц в Windows не используется.

Страничный демон в Windows состоит из менеджера балансового множества, который проверяет, достаточно ли свободных страниц, и менеджера рабочих наборов, который исследует рабочие наборы и освобождает страницы. Также в Windows есть другие демоны: свопер-демон, демон записи отображенных страниц – запись в отображенные файлы, демон записи модифицированных страниц.

Средства организации памяти работают с единицами памяти, называемыми сегментами, каждый из которых представляет собой независимое, защищенное адресное пространство и является логическим объектом.

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

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

Сегментация обеспечивает каждую программу несколькими независимыми, защищенными адресными пространствами, т. е. позволяет иметь либо полностью неструктурированную, простую память, подобную модели памяти 8-битового процессора, либо высоко структурированную память, с использованием трансляции адресов и защиты.

Таким образом, сегментация служит для управления доступом к памяти, что обеспечивает удобство нахождения ошибок при разработке программы и повышение надежности конечного программного продукта и используется также для упрощения компоновки объектных модулей кода.

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

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

Если разрешена подкачка страниц, то аппаратное обеспечение подкачки транслирует линейный адрес в физический адрес.

Если подкачка страниц не разрешена, то в качестве физического адреса используется линейный адрес.

Физический адрес подается на выходящую из процессора адресную шину.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: