Структурная организация ОС

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

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

Такая организация системы имеет много достоинств. Она существенно упрощает разработку системы, так как позволяет сначала определить «сверху вниз» функции слоев и межслойные интерфейсы, а затем при детальной реализации постепенно наращивать мощность функций слоев, двигаясь «снизу вверх». Кроме того, при модернизации системы можно изменять модули внутри слоя без необходимости производить какие-либо изменения в остальных слоях, если при этих внутренних изменениях межслойные интерфейсы остаются в силе.

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

Многослойная структура ядра ОС

Средства аппаратной поддержки ОС

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

Машинно-зависимые компоненты ОС

Этот слой образуют программные модули, отражающие специфику аппаратной платформы компьютера. В идеале этот слой полностью «закрывает» вышележащие слои ядра от особенностей аппаратуры. Это позволяет разрабатывать вышележащие слои на основе машинно-независимых модулей, существующих в единственном экземпляре для всех типов аппаратных платформ, поддерживаемых данной ОС. Примером такого слоя может служить слой HAL, появившийся в свое время в операционной системе Windows NT.

Базовые механизмы ядра

Этот слой выполняет наиболее примитивные операции ядра, такие как программное переключение контекстов процессов, диспетчеризацию прерываний, перемещение страниц из памяти на диск и обратно и т.п. Модули данного слоя не принимают решений о распределении ресурсов - они только отрабатывают принятые «наверху» решения, что и дает повод называть их исполнительными механизмами для модулей верхних слоев. Например, решение о том, что в данный момент нужно прервать выполнение текущего процесса А и начать выполнение процесса В, принимается менеджером процессов на вышележащем слое, а слою базовых механизмов передается только директива, что нужно выполнить переключение с контекста текущего процесса А на контекст процесса В.

Менеджеры ресурсов

Этот слой состоит из функциональных модулей, реализующих стратегические задачи по управлению основными ресурсами вычислительной системы. Обычно на данном слое работают менеджеры (называемые также диспетчерами) процессов, ввода-вывода, файловой системы и оперативной памяти. Разбиение на менеджеры может быть и несколько иным, например, менеджер файловой системы иногда объединяют с менеджером ввода-вывода, а функции управления доступом пользователей к системе в целом и к ее отдельным объектам отдают отдельному менеджеру безопасности. Каждый из менеджеров ведет учет свободных и используемых ресурсов определенного типа и планирует их распределение в соответствии с запросами от приложений. Например, менеджер виртуальной памяти управляет перемещением страниц из оперативной памяти на диск и обратно. Менеджер должен отслеживать интенсивность обращений к страницам, время их пребывания в памяти, состояния процессов, использующих данные, и многие другие параметры, на основании которых он принимает решения о том, какие страницы необходимо выгрузить, а какие загрузить. Для исполнения принятых решений менеджер обращается к нижележащему слою базовых механизмов с запросами о загрузке (выгрузке) конкретных страниц. Внутри слоя менеджеров существуют взаимные связи, отражающие тот факт, что для выполнения процессу нужен доступ одновременно к нескольким ресурсам: процессору, области памяти, возможно, к определенному файлу или устройству ввода-вывода. Например, при создании процесса менеджер процессов обращается к менеджеру памяти, который должен выделить процессу определенную область памяти для машинного кода его программы и данных.

Интерфейс системных вызовов

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

Приведенное разбиение ядра ОС на слои является примерным. В реальной системе количество слоев и распределение функций между ними может быть и иным. В системах, предназначенных для аппаратных платформ одного типа слой машинно-зависимых модулей обычно не выделяется. Не всегда оформляются в отдельный слой базовые механизмы: в этом случае менеджеры ресурсов не только планируют использование ресурсов, но и самостоятельно реализуют свои планы.

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

Способ взаимодействия слоев в реальной ОС также может отличаться от описанной выше схемы. Для ускорения работы ядра в некоторых случаях происходит непосредственное обращение с верхнего слоя к функциям нижних слоев, минуя промежуточные. Типичным примером такого «неправильного» взаимодействия является начальная стадия обработки системного вызова. На многих аппаратных платформах для реализации системного вызова используется оператор программного прерывания. Этим приложение фактически вызывает модуль первичной обработки прерываний, который находится в слое базовых механизмов, а уже этот модуль вызывает нужную функцию из слоя системных вызовов. Сами функции системных вызовов также иногда нарушают субординацию иерархических слоев, обращаясь напрямую к базовым механизмам ядра.

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

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

Функции, выполняемые модулями ядра представляют наиболее часто используемые функции операционной системы, поэтому скорость их исполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются резидентными.

Вспомогательные модули ОС обычно подразделяются на следующие группы:

· утилиты - программы, решающие отдельные задачи управления и сопровождения компьютерной системы, такие, например, как программы сжатия дисков, архивирования данных на носитель;

· системные обрабатывающие программы - текстовые или графические редакторы, компиляторы, компоновщики, отладчики;

· программыпредоставления пользователю дополнительных услуг, например, специальный вариант пользовательского интерфейса, калькулятор и даже игры;

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

Привилегии операционной системы и просто возможность ее существования обеспечиваются средствами аппаратной поддержки, которые должны поддерживать как минимум два режима работы - пользовательский режим (user mode) и привилегированный режим, который также называют режимом ядра (kernel mode), или режимом супервизора (supervisor mode).

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

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

Переключение режимов в ОС микроядерной архитектуры

Экзоядро – идея виртуальной машины с предоставлением каждому пользователю персонального подмножества ресурсов и запретом использования чужих ресурсов. При многозадачности экзоядру достаточно не допускать вмешательства одной виртуальной машины в работу другой.

Новые тенденции в оборудовании предполагают наличие более одной системной шины, каждая из которых обслуживает некоторое количество процессоров. Каждая группа ( кластер ) процессоров имеет свою собственную память и, возможно, свои собственные каналы ввода-вывода. В то же время каждый ЦП может иметь доступ к памяти, связанной с другими группами. Каждая группа называется узлом NUMA. Количество ЦП в узле NUMA определяется разработчиком оборудования. Доступ к локальной памяти происходит быстрее, чем к памяти, связанной с другими узлами NUMA. Поэтому такая структура памяти получила название архитектура неоднородного доступа к памяти.

Поскольку NUMA использует локальную и удаленную память, доступ к одним областям требует большего времени, чем к другим. Термины локальная память и удаленная память, употребляются относительно текущего выполняемого потока. Локальная память - это память, которая находится на одном узле с ЦП, выполняющим текущий поток. Любая память, не принадлежащая к узлу, на котором в настоящий момент выполняется поток, называется удаленной. Удаленная память также иногда называется внешней. Отношение времен доступа к внешней и локальной памяти называется коэффициентом NUMA. Если коэффициент NUMA равен 1, то это - симметричная многопроцессорная система. Чем выше коэффициент NUMA, тем больше издержки на доступ к памяти других узлов..

Главным преимуществом использования NUMA является масштабируемость. Архитектура NUMA разработана, чтобы устранить ограничения масштабирования, имеющиеся у архитектуры симметричной мультипроцессорной обработки (SMP). В архитектуре SMP доступ ко всей памяти производится через общую шину памяти. Для относительно небольшого числа процессоров это может быть достаточным, но при наличии десятков и сотен процессоров конкуренция за доступ к шине памяти значительно возрастает. NUMA устраняет эти узкие места, ограничивая количество ЦП на одной шине памяти и объединяя по высокоскоростному соединению множество узлов.


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



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