Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 13
Текст из файла (страница 13)
Централизуя все управление устройствэми, система также предоставляет дополнительные возможности, такие как синхронизация доступа (в тех случаях„когда два пользователя в один момент времени попытаются воспользоваться одним и тем же устройством) и устранение ошибок. Семантика любого взаимодействия между приложениями и операционной системой определяется прикладным интерфейсом программирования (АРГ~. Мы уже стали относиться к операционной системе как к некой сущности, которая делает нечто. Что же в точности представляет собой эта сущность? С одной стороны, операционная система — это программа (часто называемая ядром), которая управляет аппаратурой, создает, уничтожает все процессы и управляет ими (рис.
2.1). Если рассматривать шире, операционная система не только включает в себя ядро, но является также основой функционирования остальных программ и утилит (командных интерпретаторов, редакторов, компиляторов, программ типа да!е, !з, ьт!зо и т. д.), составляющих вместе пригодную для работы среду. Ядро само по себе мало пригодно для использования. Пользователи, приобретающие систему 1ЛЧ1Х, ожидают получить вместе с ней большой набор дополнительных программ. Однако ядро, тем не менее, является весьма специфичной программой по многим причинам. Оно определяет программный интерфейс системы. Ядро — это единственная программа, являющаяся необходимой, без которой ничего не будет работать.
Эта книга посвящена изучению ядра системы, и когда будет упоминаться операционная сисгпвма или 1Ль11Х, это будет означать ядро, если не оговорено иное. Немного изменим наш предыдущий вопрос; так что же такое ядро? Есть лн это процесс или нечто отличающееся от всех других процессов? Ядро— это специальная программа, работающая непосредственно с аппаратурой. ' Однако в некоторых местах разработчики ~1Х1Х слегка перестарались.
К примеру, интерпретания устройств работы с магнитной лентой как потоков символов весьма усложнила приложениям правильную обработку ошибок и исключений. Интерфейс работы с магнитной лентой не совсем удачно вписывается в интерфейс работы с устройствами в системе В!Ч1Х 1А!!ш 871. 60 Глава 2. Ядро и процессы Ядро находится на диске в файле, обычно имеющем название /упшп1х или /цп1х (в зависимости от производителя ОС). Когда система стартует, с диска загружается ядро при помощи специальной процедуры начальной загрузгпг (ЪооГзГгарр(пя).
Ядро инициализирует систему и устанавливает среду для выполнения процессов. Затем создаются несколько начальных процессов, которые в дальнейшем порождают остальные процессы. После загрузки ядро находится в памяти постоянно до тех пор, пока работа системы не будет завершена. Ядро управляет процессами и предоставляет им различные службы. Прикладные процессы Системные процессы Интерфейс системных вызовов Интерфейс устройств Рмс.
2.1. Ядро взаимодействует с процессами и устройствами Операционная система 1)М1Х обеспечивает свою функциональность четырьмя различными способами: + Прикладные процессы запрашивают от ядра необходимые службы при помощи интерфейса системных вызовов (см. рис. 2.1), являющегося центральным компонентом АР1 системы 1ЛЧ1Х. Ядро выполняет эти запросы от имени вызывающих процессов. + Некоторые некорректные действия процесса, такие как попытки деления на ноль или переполнение стека процесса, являются причиной аппаратных исключений. Возникающие ошибки требуют вмешательства ядра, после чего происходит их обработка от имени процесса. + Ядро обрабатывает аппаратные прерывания от периферийных устройств.
Устройства используют механизм прерываний для оповещения ядра об окончании процесса ввода-вывода или изменении состояния. Ядро трактует прерывания как глобальные события, не относящиеся к какому-то одному определенному процессу. + Набор специальных системных процессов, таких как згваррег или раяег1аетоп, занимается выполнением обширных системных задач, таких как управление рядом активных процессов или поддержка пула свободной памяти. В следующих разделах этой главы будут описаны вышеперечисленные механизмы и будет определено понятие контекста выполнения процесса. 2.2.
Режим, пространство и контекст 61 2.2. Режим, пространство и контекст Для возможности функционирования системы 1)Х1Х аппаратная часть компьютера должна поддерживать по крайней мере два режима выполнения: более привилегированный режим ядра и менее привилегированный режим задачи. Как и следовало ожидать, прикладные программы работают в режиме задачи, а функции ядра выполняются в режиме ядра. Ядро защищает часть адресного пространства от доступа в режиме задачи.
Более того, наиболее привилегированные машинные инструкции могут выполняться только в режиме ядра. Во многих аппаратных архитектурах поддерживается более двух режимов выполнения. Например, архитектура 1пге1 80х86' поддерживает четыре уровня выполнения', самым привилегированным из которых является нулевой. УА11Х использует только два из них. Главной причиной появления различных режимов выполнения является безопасность. Если пользовательские процессы выполняются в менее привилегированном режиме, то они не могут случайно или специально повредить другой процесс или ядро системы.
Последствия, вызванные ошибками в программе, носят локальный характер и обычно не влияют на выполнение других действий или процессов. Большинство реализаций 1))ч1!Х используют виртуальную память. В системе виртуальной памяти адреса, выделенные программе, не ссылаются непосредственно на физическое размещение в памяти. Каждому процессу предоставляется собственное виртуальное адресное пространство, а ссылки на виртуальные адреса памяти транслируются в их фактическое нахождение в физической памяти при помощи набора карт трансляции адресов. Многие системы реализуют такие карты как таблицы страниц, с одной записью для каждой страницы адресного пространства процесса (страница — это выделенный и защищенный блок памяти фиксированного размера). Аппаратно реализованный блок управления памятью (шешогу шапайешепг цшС, ММ11) обычно обладает определенным набором регистров для определения карт трансляции адресов процесса, выполняющегося в данный момент времени (также называемого твкугцим).
Когда текущий процесс уступает процессорное время другому процессу (переключение контекста), ядро размещает в этих регистрах указатели на карты трансляции адресов нового процесса. Регистры ММ11 являются привилегированными и могут быть доступны только в режиме ядра. Это дает гарантию того, что процесс будет ссылаться на адреса памяти только своего адресного пространства и не имеет доступа или возможности изменения адресного пространства другого процесса. Определенная часть виртуального адресного пространства каждого процесса отображается на код и структуры данных ядра. Эта часть называется ' За исключением 8086 и 80186. — Прим.ред. а Еще их называют уровнями привилегий или защищенности. — Прим, ред.
62 Глава 2. Ядро и процессы системным пространппвом или проспчзансгпвом ядра и может быть доступна только в режиме ядра. В системе может одновременно выполняться только одйа копия ядра, следовательно, все процессы отображаются в единое адресное пространство ядра. В ядре содержатся глобальные структуры и информация, дающая возможность ему иметь доступ к адресному пространству любого процесса.
Ядро может обращаться к адресному пространству текущего процесса напрямую, так как регистры ММ11 хранят всю необходимую для этого информацию. Иногда ядру требуется обратиться к адресному пространству, не являющемуся в данный момент текущим. В этом случае обращение происходит не непосредственно, а при помощи специального временного отображения. В то время как ядро совместно используется всеми процессами, системное пространство защищается от доступа в режиме задачи. Процессы не могут напрямую обращаться к ядру и должны использовать для этого интерфейс системных вызовов.
После того как процесс производит системный вызов, запускается специальная последовательность команд (называемая переключателем режимов), переводящая систему в режим ядра, а управление передается ядру, которое и обрабатывает операцию от имени процесса. После заверщения обработки системного вызова ядро вызывает другую последовательность команд, возвращающую систему обратно в режим задачи (производится еще одно переключение режима), и снова передает управление текущему процессу.
Интерфейс системных вызовов описан подробнее в разделе 2А.1. Существуют два важных для любого п11оцесса объекта, которые управляются ядром. Они обычно реализуются как часть адресного пространства процесса. Это область и (ц-агеа, или цзег-агеа) и стек ядра (1сегпе1 зсас1с). Область ц является структурой данных, содержащей нужную ядру информацию о процессе, такую как таблицу файлов, открытых процессом, данные для идентификации, а также сохраненные значения регистров процесса, пока процесс не является текущим. Процесс не может произвольно изменять эту информацию — и, следовательно, область и является защищенной от доступа в режиме задачи (некоторые реализации ОС позволяют процессу считывать эту информацию, но не изменять ее). Ядро системы 1Лч11Х является реентерабельным, то есть к ядру могут обращаться одновременно несколько процессов.
Фактически они могут выполнять одни и те же последовательности инструкций параллельно. (Разумеется, в один момент времени выполняется только один процесс, остальные при этом заблокированы или находятся в режиме ожидания'.) Таким образом, каждому процессу необходим собственный стек ядра для хранения данных, ' Реентерабельностью называется возможность единовременного обращения различных пронессов к одному и тому же машинному коду, загруженному в память компьютера в единственном экземпляре. — Прим, ред. 2.2. Режим, пространство и контекст 63 Контекст процесса Режим ядра режим задачи Системный контекст Рис. 2.2.