The design of the unix operating system by Maurice J
Вид материала | Реферат |
6.2 Формат памяти системы |
- Лекция 10. Файловые системы Unix, 116.79kb.
- Уровни рассмотрения, 314.07kb.
- Курс по операционным системам (на примере ос windows) Основан на учебном курсе Windows, 29.21kb.
- Выполнил ученик 11 «А» класса, 443.51kb.
- Ос лекция 1 (2-й семестр – временно), 101.4kb.
- Operating System, 7686.97kb.
- Unix-подобные операционные системы, характеристики, особенности, разновидности, 40.63kb.
- 1. ms sql server. Общие сведения, 66.03kb.
- Shanti ananda maurice, 89.84kb.
- Методические материалы, 3002.45kb.
разделах состояния процесса и переходы между ними рассматриваются
на физическом уровне, особое внимание при этом уделяется состоя-
ниям "выполнения в режиме задачи", "выполнения в режиме ядра",
"резервирования" и "приостанова (в памяти)". В следующей главе
затрагиваются состояния "создания" и "прекращения существования",
а в главе 8 - состояние "готовности к запуску в памяти". В главе
9 обсуждаются два состояния выгруженного процесса и организация
подкачки по обращению.
6.2 ФОРМАТ ПАМЯТИ СИСТЕМЫ
Предположим, что физическая память машины имеет адреса, начи-
ная с 0 и кончая адресом, равным объему памяти в байтах. Как уже
отмечалось в главе 2, процесс в системе UNIX состоит из трех ло-
гических секций: команд, данных и стека. (Общую память, которая
рассматривается в главе 11, можно считать в данном контексте
частью секции данных). В секции команд хранится набор машинных
инструкций, исполняемых под управлением процесса; адресами в сек-
ции команд выступают адреса команд (для команд перехода и обраще-
ний к подпрограммам), адреса данных (для обращения к глобальным
переменным) и адреса стека (для обращения к структурам данных,
которые локализованы в подпрограммах). Если адреса в сгенериро-
ванном коде трактовать как адреса в физической памяти, два про-
цесса не смогут параллельно выполняться, если их адреса перекры-
ваются. Компилятор мог бы генерировать адреса, непересекающиеся у
разных программ, но на универсальных ЭВМ такой порядок не практи-
куется, поскольку объем памяти машины ограничен, а количество
транслируемых программы неограничено. Даже если для того, чтобы
избежать излишнего пересечения адресов в процессе их генерации,
машина будет использовать некоторый набор эвристических процедур,
подобная реализация не будет достаточно гибкой и не сможет удов-
летворять предъявляемым к ней требованиям.
Поэтому компилятор генерирует адреса для виртуального адрес-
ного пространства заданного диапазона, а устройство управления
памятью, называемое диспетчером памяти, транслирует виртуальные
адреса, сгенерированные компилятором, в адреса ячеек, расположен-
ных в физической памяти. Компилятору нет необходимости знать, в
какое место в памяти ядро потом загрузит выполняемую программу.
На самом деле, в памяти одновременно могут существовать несколько
копий программы: все они могут выполняться, используя одни и те
же виртуальные адреса, фактически же ссылаясь на разные физичес-
кие ячейки. Те подсистемы ядра и аппаратные средства, которые
сотрудничают в трансляции виртуальных адресов в физические, обра-
зуют подсистему управления памятью.
6.2.1 Области
Ядро в версии V делит виртуальное адресное пространство про-
цесса на совокупность логических областей. Область - это непре-
рывная зона виртуального адресного пространства процесса,
рассматриваемая в качестве отдельного объекта для совместного ис-
пользования и защиты. Таким образом, команды, данные и стек обыч-
но образуют автономные области, принадлежащие процессу. Несколько
процессов могут использовать одну и ту же область. Например, если
несколько процессов выполняют одну и ту же программу, вполне ес-
тественно, что они используют одну и ту же область команд. Точно
так же, несколько процессов могут объединиться и использовать об-
щую область разделяемой памяти.
Ядро поддерживает таблицу областей и выделяет запись в табли-
це для каждой активной области в системе. В разделе 6.5 описыва-
ются поля таблицы областей и операции над областями более подроб-
но, но на данный момент предположим, что таблица областей
содержит информацию, позволяющую определить местоположение облас-
ти в физической памяти. Каждый процесс имеет частную таблицу об-
ластей процесса. Записи этой таблицы могут располагаться, в зави-
симости от конкретной реализации, в таблице процессов, в адресном
пространстве процесса или в отдельной области памяти; для просто-
ты предположим, что они являются частью таблицы процессов. Каждая
запись частной таблицы областей содержит указатель на соответс-
твующую запись общей таблицы областей и первый виртуальный адрес
процесса в данной области. Разделяемые области могут иметь разные
виртуальные адреса в каждом процессе. Запись частной таблицы об-
ластей также содержит поле прав доступа, в котором указывается
тип доступа, разрешенный процессу: только чтение, только запись
или только исполнение. Частная таблица областей и структура об-
ласти аналогичны таблице файлов и структуре индекса в файловой
системе: несколько процессов могут совместно использовать адрес-
ное пространство через область, подобно тому, как они разделяют
доступ к файлу с помощью индекса; каждый процесс имеет доступ к
области благодаря использованию записи в частной таблице облас-
тей, точно так же он обращается к индексу, используя соответству-
ющие записи в таблице пользовательских дескрипторов файла и в
таблице файлов, принадлежащей ядру.
На Рисунке 6.2 изображены два процесса, A и B, показаны их
области, частные таблицы областей и виртуальные адреса, в которых
эти области соединяются. Процессы разделяют область команд 'a' с
виртуальными адресами 8К и 4К соответственно. Если процесс A чи-
тает ячейку памяти с адресом 8К, а процесс B читает ячейку с ад-
ресом 4К, то они читают одну и ту же ячейку в области 'a'.
Область данных и область стека у каждого процесса свои.
Область является понятием, не зависящим от способа реализации
управления памятью в операционной системе. Управление памятью
представляет собой совокупность действий, выполняемых ядром с
целью повышения эффективности совместного использования оператив-
ной памяти процессами. Примерами способов управления памятью мо-
гут служить рассматриваемые в главе 9 замещение страниц памяти и
подкачка по обращению. Понятие области также не зависит и от соб-
ственно распределения памяти: например, от того, делится ли па-
мять на страницы или на сегменты. С тем, чтобы заложить фундамент
для перехода к описанию алгоритмов подкачки по обращению (глава
9), все приводимые здесь рассуждения относятся, в первую очередь,
к организации памяти, базирующейся на страницах, однако это не
предполагает, что система управления памятью основывается на ука-
занных алгоритмах.
Частные таблицы областей Области
процесса
(Виртуальные адреса) ---------┐
Коман----------------┐ │ │
ды │ 8К +-----┐ --->│ b │
Процесс Дан-+--------------+ │ │ │ │
A ные │ 16К +-----│---- L--------- ---------┐
+--------------+ │ │ │
Стек │ 32К +-----│-------------------->│ c │
L--------------- │ ---------┐ │ │
L------>│ │ L---------
│ a │
Коман----------------┐ ------->│ │
ды │ 4К +------ L--------- ---------┐
Процесс Дан-+--------------+ │ │
B ные │ 8К +-------------------------->│ e │
+--------------+ ---------┐ │ │
Стек │ 32К +-----┐ │ │ L---------
L--------------- L------>│ d │
│ │
L---------
Рисунок 6.2. Процессы и области
6.2.2 Страницы и таблицы страниц
В этом разделе описывается модель организации памяти, которой
мы будем пользоваться на протяжении всей книги, но которая не яв-
ляется особенностью системы UNIX. В организации памяти, базирую-
щейся на страницах, физическая память разделяется на блоки одина-
кового размера, называемые страницами. Обычный размер страниц
составляет от 512 байт до 4 Кбайт и определяется конфигурацией
технических средств. Каждая адресуемая ячейка памяти содержится в
некоторой странице и, следовательно, каждая ячейка памяти может
адресоваться парой (номер страницы, смещение внутри страницы в
байтах). Например, если объем машинной памяти составляет 2 в
32-й степени байт, а размер страницы 1 Кбайт, общее число страниц
- 2 в 22-й степени; можно считать, что каждый 32-разрядный адрес
состоит из 22-разрядного номера страницы и 10-разрядного смещения
внутри страницы (Рисунок 6.3).
Когда ядро назначает области физические страницы памяти, не-
обходимости в назначении смежных страниц и вообще в соблюдении
какой-либо очередности при назначении не возникает. Целью стра-
ничной организации памяти является повышение гибкости назначения
физической памяти, которое строится по аналогии с назначением
дисковых блоков файлам в файловой системе. Как и при назначении
блоков файлу, так и при назначении области страниц памяти, прес-
ледуется задача повышения гибкости и сокращения неиспользуемого
(вследствие фрагментации) пространства памяти.
-------------------------------------------------------------┐
│ Шестнадцатиричный адрес 58432 │
│ │
│ Двоичный 0101 1000 0100 0011 0010 │
│ │
│ Номер страницы, смещение │
│ внутри страницы 01 0110 0001 00 0011 0010 │
│ │
│ В шестнадцатиричной системе 161 32 │
L-------------------------------------------------------------
Рисунок 6.3. Адресация физической памяти по страницам
-------------------------------------------------------┐
│ Логический номер страницы Физический номер страницы │
│ │
│ 0 177 │
│ 1 54 │
│ 2 209 │
│ 3 17 │
L-------------------------------------------------------
Рисунок 6.4. Отображение логических номеров страниц на физи-
ческие
Ядро устанавливает соотношение между виртуальными адресами
области и машинными физическими адресами посредством отображения
логических номеров страниц в области на физические номера страниц
в машине, как это показано на Рисунке 6.4. Поскольку область это
непрерывное пространство виртуальных адресов программы, логичес-
кий номер страницы служит указателем на элемент массива физичес-
ких номеров страниц. Запись таблицы областей содержит указатель
на таблицу физических номеров страниц, именуемую таблицей стра-
ниц. Записи таблицы страниц содержат машинно-зависимую информа-
цию, такую как права доступа на чтение или запись страницы. Ядро
поддерживает таблицы страниц в памяти и обращается к ним так же,
как и ко всем остальным структурам данных ядра.
На Рисунке 6.5 приведен пример отображения процесса в физи-
ческие адреса памяти. Пусть размер страницы составляет 1 Кбайт и
пусть процессу нужно обратиться к объекту в памяти, имеющему вир-
туальный адрес 68432. Из таблицы областей видно, что виртуальный
адрес начала области стека - 65536 (64К), если предположить, что
стек растет в направлении увеличения адресов. После вычитания
этого адреса из адреса 68432 получаем смещение в байтах внутри
области, равное 2896. Так как каждая страница имеет размер 1
Кбайт, адрес указывает со смещением 848 на 2-ю (начиная с 0)
страницу области, расположенной по физическому адресу 986К. В
разделе 6.5.5 (где идет речь о загрузке области) рассматривается
случай, когда запись таблицы страниц помечается "пустой".
В современных машинах используются разнообразные аппаратные
регистры и кеши, которые повышают скорость выполнения вышеописан-
ной процедуры трансляции адресов и без которых пересылки в памяти
и адресные вычисления чересчур бы замедлились. Возобновляя выпол-
нение процесса, ядро посредством загрузки соответствующих регист-
ров сообщает техническим средствам управления памятью о том, в
Частная таблица областей Таблицы страниц
процесса (Физические адреса)
---------------┐
Команды │ 8К +--------------┐
+--------------+ L-------->---------------┐
Данные │ 32К +-------┐ │ пусто │
+--------------+ │ +--------------+
Стек │ 64К +---┐ │ │ 137К │
L--------------- │ v +--------------+
Виртуальные адреса │ ---------------┐ │ 852К │
│ │ 87К │ +--------------+
-------------- +--------------+ │ 764К │
v │ 552К │ +--------------+
---------------┐ +--------------+ │ 433К │
│ 541К │ │ 727К │ +--------------+
+--------------+ +--------------+ │ 333К │
│ 783К │ │ 941К │ +--------------+
+--------------+ +--------------+ │ │
│ 986К │ │ 1096К │ │ │
+--------------+ +--------------+ │ │
│ 897К │ │ 2001К │ │ │
+--------------+ +--------------+ L---------------
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
L--------------- L---------------
Рисунок 6.5. Преобразование виртуальных адресов в физические
каких физических адресах выполняется процесс и где располагаются
таблицы страниц. Поскольку такие операции являются машинно-зави-
симыми и в разных версиях реализуются по-разному, здесь мы их
рассматривать не будем. Часть вопросов, связанных с архитектурой
вычислительных систем, затрагивается в упражнениях.
Организацию управления памятью попробуем пояснить на следую-
щем простом примере. Пусть память разбита на страницы размером 1
Кбайт каждая, обращение к которым осуществляется через описанные
ранее таблицы страниц. Регистры управления памятью в системе
группируются по три; первый регистр в тройке содержит адрес таб-
лицы страниц в физической памяти, второй регистр содержит первый
виртуальный адрес, отображаемый с помощью тройки регистров, тре-
тий регистр содержит управляющую информацию, такую как номера
страниц в таблице страниц и права доступа к страницам (только
чтение, чтение и запись). Такая модель соответствует вышеописан-
ной модели области. Когда ядро готовит процесс к выполнению, оно
загружает тройки регистров соответствующей информацией из записей
частной таблицы областей процесса.
Если процесс обращается к ячейкам памяти, расположенным за
пределами принадлежащего ему виртуального пространства, создается
исключительная ситуация. Например, если область команд имеет раз-
мер 16 Кбайт (Рисунок 6.5), а процесс обращается к виртуальному
адресу 26К, создается исключительная ситуация, обрабатываемая
операционной системой. То же самое происходит, если процесс пыта-
ется обратиться к памяти, не имея соответствующих прав доступа,
например, пытается записать адрес в защищенную от записи область
команд. И в том, и в другом примере процесс обычно завершается
(более подробно об этом в следующей главе).
6.2.3 Размещение ядра
Несмотря на то, что ядро работает в контексте процесса,
отображение виртуальных адресов, связанных с ядром, осуществляет-
ся независимо от всех процессов. Программы и структуры данных яд-
ра резидентны в системе и совместно используются всеми процесса-
ми. При запуске системы происходит загрузка программ ядра в
память с установкой соответствующих таблиц и регистров для отоб-
ражения виртуальных адресов ядра в физические. Таблицы страниц
для ядра имеют структуру, аналогичную структуре таблицы страниц,
связанной с процессом, а механизмы отображения виртуальных адре-
сов ядра похожи на механизмы, используемые для отображения поль-
зовательских адресов. На многих машинах виртуальное адресное
пространство процесса разбивается на несколько классов, в том
числе системный и пользовательский, и каждый класс имеет свои
собственные таблицы страниц. При работе в режиме ядра система
разрешает доступ к адресам ядра, при работе же в режиме задачи
такого рода доступ запрещен. Поэтому, когда в результате прерыва-
ния или выполнения системной функции происходит переход из режима
задачи в режим ядра, операционная система по договоренности с
техническими средствами разрешает ссылки на адреса ядра, а при
возврате в режим ядра эти ссылки уже запрещены. В других машинах
можно менять преобразование виртуальных адресов, загружая специ-
альные регистры во время работы в режиме ядра.
На Рисунке 6.6 приведен пример, в котором виртуальные адреса
от 0 до 4М-1 принадлежат ядру, а начиная с 4М - процессу. Имеются
две группы регистров управления памятью, одна для адресов ядра и
одна для адресов процесса, причем каждой группе соответствует
таблица страниц, хранящая номера физических страниц со ссылкой на
адреса виртуальных страниц. Адресные ссылки с использованием
группы регистров ядра допускаются системой только в режиме ядра;
следовательно, для перехода между режимом ядра и режимом задачи
требуется только, чтобы система разрешила или запретила адресные
ссылки с использованием группы регистров ядра.
В некоторых системах ядро загружается в память таким образом,
что большая часть виртуальных адресов ядра совпадает с физически-
ми адресами и функция преобразования виртуальных адресов в физи-
ческие превращается в функцию тождественности. Работа с прост-
ранством процесса, тем не менее, требует, чтобы преобразование
виртуальных адресов в физические производилось ядром.
Адрес таблицы Вирту- Номера стра-
страниц альный ниц в табли-
адрес це
------------T------------T-----------┐
Регистр ядра 1 │ --------┐ 0 │ │
+-----------+-│----------+-----------+
Регистр ядра 2 │ ---┐ │ │ 1М │ │
+--------│--+-│----------+-----------+
Регистр ядра 3 │ --┐│ │ │ 2М │ │
+-------││--+-│----------+-----------+
Регистр процесса 1 │ ---- ││ │ │ 4М │ │
+-│-----││--+-│----------+-----------+
Регистр процесса 2 │ │--- ││ │ │ │ │
+-││----││--+-│----------+-----------+
Регистр процесса 3 │ ││-- ││ │ │ │ │
L-│││---││--+-│----------+------------
--------------------------││ ││ │
│ ----------------│ │L----│-------┐
│ │ ------ L-----│-------│----------┐
│ │ │ ---- │ │
v v v v v v
-------┐ -------┐ -------┐ -------┐ -------┐ -------┐
│ 856K │ │ 747K │ │ 556K │ │ 0K │ │ 128K │ │ 256K │
+------+ +------+ +------+ +------+ +------+ +------+
│ 917K │ │ 950K │ │ 997K │ │ 4K │ │ 97K │ │ 292K │
+------+ +------+ +------+ +------+ +------+ +------+
│ 564K │ │ 333K │ │ 458K │ │ 3K │ │ 135K │ │ 304K │
+------+ +------+ +------+ +------+ +------+ +------+
│ 444K │ │ │ │ 632K │ │ 17K │ │ 139K │ │ 279K │
+------+ │ │ +------+ +------+ +------+ +------+
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
L------- L------- L------- L------- L------- L-------
Таблицы страниц процесса Таблицы страниц ядра
(области)
Рисунок 6.6. Переключение режима работы с непривилегированно-
го (режима задачи) на привилегированный (режим
ядра)
6.2.4 Пространство процесса
Каждый процесс имеет свое собственное пространство, однако
ядро обращается к пространству выполняющегося процесса так, как
если бы в системе оно было единственным. Ядро подбирает для теку-
щего процесса карту трансляции виртуальных адресов, необходимую
для работы с пространством процесса. При компиляции загрузчик
назначает переменной 'u' (имени пространства процесса) фиксиро-
ванный виртуальный адрес. Этот адрес известен остальным компонен-
там ядра, в частности модулю, выполняющему переключение контекста
(раздел 6.4.3). Ядру также известно, какие таблицы управления па-
мятью используются при трансляции виртуальных адресов, принадле-
жащих пространству процесса, и благодаря этому ядро может быстро
перетранслировать виртуальный адрес пространства процесса в дру-
гой физический адрес. По одному и тому же виртуальному адресу яд-