Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций 2009.doc
Скачиваний:
40
Добавлен:
13.11.2019
Размер:
2.3 Mб
Скачать

2.3Пример организации страничной памяти на примере linux

В данной главе мы рассмотрим пример организации страничной адресации на примере Linux для процессора 80x86. Для данного процессора различают три вида адресов. Логический адрес— используется в инструкциях машинного языка для обозначения адреса операнда или инструкции. Этот тип адресов относится к широко известной сегментной архитектуре 80x86, которая заставляет программистов, работающих в MS-DOS и Windows, разбивать программы на сегменты. Каждый логический адрес состоит из сегмента и смещения, которое определяет расстояние от начала сегмента до адресуемой ячейки. Линейный адрес (также известный как виртуальный адрес) — 32-разрядное целое без знака, которое можно использовать для адресации до 4 Гбайт (4 294 967 296 ячеек памяти). Линейные адреса обычно представляются в шестнадцатеричной нотации, и их значения лежат в диапазоне от 0x00000000 до Oxffffffff. Физический адрес — используется для адресации ячеек в микросхемах памяти. Представляется электрическими сигналами, посылаемыми с адресных контактов микропроцессора на шину памяти. Физические адреса обозначаются 32- или 36-разрядными целыми без знака.

Блок управления памятью, или MMU (Memory Management Unit), преобразует логический адрес в линейный с помощью электронной схемы, которая называется блоком сегментации. Затем другая электронная схема, называемая блоком управления страницами, преобразует линейные адреса в физические (рис. 2.15)

Рис. 2.15. Преобразование логического адреса

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

Поскольку операции чтения и записи на этих микросхемах должны выполняться последовательно, устройство, называемое арбитром памяти, помещается между шиной и каждой микросхемой оперативной памяти. Роль арбитра в том, чтобы предоставлять доступ процессору, если микросхема свободна, и откладывать запрос, если микросхема обслуживает другой процессор. Арбитры памяти существуют даже в однопроцессорных системах, потому что в таких системах имеются специализированные процессоры, называемые контроллерами DMA (Direct Memory Access, прямой доступ к памяти), которые работают параллельно с центральным процессором. В многопроцессорных системах структура арбитра сложнее, потому что у него больше входных портов. Например, в системах с двумя процессорами Pentium поддерживается арбитр с двумя портами на входе каждой микросхемы памяти, причем требуется, чтобы эти два процессора обменивались синхронизирующими сообщениями перед обращением к общей шине. От программиста арбитр скрыт, поскольку управляется аппаратными схемами.

2.3.1Страничная организация памяти в Linux

Начиная с процессоров 80386, блок управления страницами в процессорах Intel обрабатывает 4 Кбайт страниц.

Тридцать два бита линейного адреса разделяются на три поля: каталог Directory — старшие 10 битов; таблица Table — средние 10 битов; смещение offset — младшие 12 битов. Преобразование линейных адресов происходит посредством двух таблиц.

Первая таблица преобразования называется каталогом страниц, а вторая — Таблицей Страниц1. Целью создания такой двухуровневой схемы является сокращение объема памяти, необходимого для Таблиц Страниц процессов. При наличии простой одноуровневой Таблицы Страниц потребовалось бы до 22 записей (или, если запись занимает 4 байта, 4 Мбайт оперативной памяти), чтобы представить Таблицу Страниц для каждого процесса (при условии, что процесс использует все 4 Гбайт пространства линейных адресов), даже если процесс не обращается к каждому адресу в этом диапазоне. Двухуровневая схема сокращает объем используемой памяти, поскольку требует Таблицы Страниц только для тех виртуальных областей, к которым фактически обращается процесс.

Каждый активный процесс должен иметь каталог страниц. В то же время отсутствует необходимость выделять память сразу под все Таблицы Страниц процесса. Будет гораздо эффективнее выделять оперативную память для Таблицы Страниц, только когда процесс действительно нуждается в ней.

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

Поле offset определяет относительную позицию внутри страничного кадра (рис. 2.16). Поскольку оно занимает 12 бит, каждая страница содержит 4096 байтов данных.

Рис. 2.16. Страничная организация в архитектуре 80x86

Поля Directory и Table имеют длину 10 битов, поэтому каталоги страниц и Таблицы Страниц могут содержать до 1024 записей. Отсюда следует, что каталог страниц может адресовать до 1024 х 1024 х 4096 = 232 ячеек памяти, как и следовало ожидать при 32-разрядной адресации.

Записи в каталогах страниц и в Таблицах Страниц имеют одинаковую структуру и была приведена ранее.