русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Микроядра

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

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

 

 

Архитектура микроядра

На структуру ранних операционных систем, разработанных в средине 50-х годов, обращалось мало внимания. Ни у кого не было опыта в разработке действительно больших программных систем, а проблемы взаимозависимости и взаимодействия сильно недооценивались. В подобных монолитных операционных системах (monolithic operating systems) почти все процедуры могли вызывать одна другую. Такое отсутствие структуры было несовместимо с расширением операционных систем. Первая версия операционной системы OS/360 была создана коллективом программистов из 5000 человек за пять лет и содержала более миллиона строк кода. Разработанная несколько позже операционная система Multics содержала уже 20 миллионов строк. Как отмечалось в разделе 2.3, для разработки программного обеспечения такого масштаба требуется использовать методы модульного программирования.

В частности, были разработаны слоистые операционные системы (layered operating systems) (рис. 4.10,а) с иерархической организацией функций, взаимодействие в которых возможно только между функциями, находящимися на соседних уровнях. При "многослойном" подходе все уровни или большинство из них выполняются в режиме ядра.

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

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


Рис. 4.10. Архитектура ядра

В архитектуре с микроядром традиционное вертикальное расположение уровней заменяется горизонтальным (рис. 4.10,6). Внешние по отношению к микроядру компоненты операционной системы реализуются как обслуживающие процессы. Между собой они взаимодействуют как равноправные партнеры; обычно взаимодействие реализуется с помощью обмена сообщениями, которые передаются через микроядро. Таким образом, ядро выступает в роли посредника: оно подтверждает правильность сообщений, передает их от одного компонента другому и предоставляет доступ к аппаратному обеспечению. Кроме того, микроядро выполняет защитные функции: оно не пропускает сообщение, если такой обмен не разрешен.

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

 

 

Достоинства архитектуры с микроядром

В литературе отмечаются некоторые общие достоинства использования микроядра (см. [FINK97, LIED96a, WAYN94a]). В их число входят следующее:

  • единообразные интерфейсы;
  • расширяемость;
  • гибкость;
  • переносимость;
  • надежность;
  • поддержка распределенных систем;
  • поддержка объектно-ориентированных операционных систем.

Использование микроядра предполагает единообразный интерфейс (uniform interface) запросов, генерируемых процессами. Процессам не нужно различать службы, выполняющиеся на уровне ядра и на пользовательском уровне, потому что доступ ко всем этим службам осуществляется только с помощью передачи сообщений.
С появлением новых аппаратных устройств или методов программирования любую операционную систему неизбежно нужно будет пополнять новыми свойствами. Архитектура с применением микроядра способствует расширяемости (extensibility) операционных систем, позволяя добавлять в них новые сервисы, а также обеспечивать множественные сервисы в одной и той же функциональной области. Например, можно реализовать несколько различных способов организации хранения файлов на дисках. Далее, вместо того чтобы помещать все эти файловые сервисы в ядро, каждый способ организации хранения можно реализовать в виде процесса на пользовательском уровне. Таким образом, из всего разнообразия сервисов пользователь может выбрать тот, который подходит ему больше других. При добавлении нового свойства в операционную систему с архитектурой микроядра достаточно добавить или модифицировать лишь некоторые из серверов. Влияние новых или измененных серверов распространяется на ограниченное подмножество системы; кроме того, после модификации не нужно будет строить новое ядро.

С расширяемостью архитектуры микроядра тесно связано такое ее свойство, как гибкость (flexibility). В операционную систему можно не только добавлять новые свойства, но и удалять из нее те, которыми она обладает. Иногда это нужно, чтобы получить более компактную и эффективную версию. Операционная система с микроядром не обязательно является маленькой. На самом деле ее структура приспособлена к добавлению разнообразных возможностей. Однако не для всех компонентов системы нужно, чтобы они обладали, например, высоким уровнем безопасности или способностью к распределенным вычислениям. Если свойства, предъявляющие значительные требования к объему памяти, будут необязательными, базовый продукт сможет привлечь более широкий круг пользователей.
Почти полная монополия компании Intel на многие комплектующие компьютеров вряд ли будет существовать бесконечно. Таким образом, привлекательным свойством операционной системы становится ее переносимость (portability). В архитектуре с микроядром специально предназначенный для конкретного процессора код, или по крайней мере большая его часть, находится в микроядре. Поэтому изменения, которые потребуются для переноса системы на новый процессор, сводятся к минимуму и имеют тенденцию к размещению в отдельных логических группах.
Чем большим объемом обладает программный продукт, тем труднее проверить надежность его работы. Хотя модульность и помогает повысить надежность (reliability) работы системы, архитектура с микроядром дает еще более ощутимые преимущества. Маленькое микроядро можно тщательно протестировать. Использование в нем небольшого количества интерфейсов прикладного программирования повышает шансы на то, что сервисы операционной системы, работающие вне ядра, будут реализованы с помощью качественного кода. Системный программист имеет в своем распоряжении ограниченное количество интерфейсов и ограниченные способы организации взаимодействия, поэтому он не сможет отрицательно повлиять на другие системные компоненты.
Микроядро способствует поддержке распределенных систем (distributed systems), к которым относятся кластеры, управляемые распределенными операционными системами. Сообщение, которое пересылается от обслуживаемого процесса обслуживающему, должно содержать в себе идентификатор запрашиваемого сервиса. Если распределенная система (т.е. кластер) сконфигурирована так, что все процессы и сервисы в ней обладают уникальными идентификаторами, то, в сущности, на уровне микроядра образуется единый образ системы. Процесс может отправлять сообщение, не зная, на какой именно машине находится сервис, к которому он обращается. К этому вопросу мы еще вернемся, обсуждая в шестой части книги распределенные системы.
Архитектура с микроядром хорошо работает в среде объектно-ориентированных операционных систем (object-oriented operating system). Объектно-ориентированный подход способствует более строгой разработке микроядра и модульных расширений операционной системы. Поэтому многие разработчики прилагают усилия для перехода к объектно-ориентированному конструированию [WAYN94b]. Одним из многообещающих подходов, в котором сочетаются архитектура с микроядром и принципы объектно-ориентированных операционных систем, является подход с использованием компонентов [MESS96]. Компоненты — это объекты с четко заданными интерфейсами, которые могут соединяться между собой, образуя программы по принципу строительных блоков. Во всех взаимодействиях между компонентами используются их интерфейсы. Разработчики других систем, таких, как Windows 2000, не полагаются целиком и полностью на объектно-ориентированные методы, однако при разработке микроядра они широко применяют объектно-ориентированные принципы.

 

 

Производительность микроядра

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

Многое зависит от размеров и функциональных возможностей микроядра. В [LIED96a] подытожены результаты некоторых исследований, свидетельствующие о значительной потере производительности в так называемых микроядрах первого поколения. От этих потерь не удается избавиться, несмотря на усилия, направленные на оптимизацию кода микроядра. В попытке решить проблему разработчики увеличивали микроядро, снова включая в операционную систему критические серверы и драйверы. Основными примерами такого подхода являются операционные системы Mach и Chorus. Избирательное увеличение функциональности микроядра приводит к снижению количества переключений между пользовательским режимом и режимом ядра, а также переключений адресных пространств процессов. Хотя такой подход и снижает потери производительности, это происходит за счет сильных сторон архитектуры операционной системы с микроядром: минимальных интерфейсов-, гибкости и т.п.

Другой подход состоит в том, чтобы сделать микроядро не больше, а еще меньше. В [LIED96b] приводятся данные о том, что в микроядре, обладающем надлежащей архитектурой, удается избежать потерь производительности и наряду с этим повысить его гибкость и надежность. Чтобы вы имели представление о размерах микроядер, заметим, что типичное микроядро первого поколения состоит из 300 Кбайт кода и содержит в себе до 140 интерфейсов системных вызовов. Примером маленького микроядра второго поколения является ядро операционной системы L4 [HART97, LIED95], которое состоит из 12 Кбайт кода и содержит в себе 7 интерфейсов системных вызовов. Опыт работы с такими системами показывает, что они являются не менее, а иногда даже более, эффективными, чем такие мощные системы, как UNIX.

 

 

Архитектура микроядер

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

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

 

 

Низкоуровневое управление памятью

Чтобы в микроядре можно было реализовать защиту на уровне процессов, в нем должен обеспечиваться контроль над аппаратной концепцией адресного пространства. Если микроядро будет отвечать за отображение каждой виртуальной страницы в физический страничный блок, то блок управления памятью, включая систему защиты адресного пространства одного процесса от другого, а также алгоритм замены страниц и другие логические схемы страничной организации памяти, можно реализовать вне ядра. Например, вынесенный за пределы ядра модуль виртуальной памяти принимает решение, когда загружать страницу в память и какую из тех страниц, которые уже содержатся в памяти, следует заменить. Микроядро отображает ссылки на эти страницы в физические адреса основной памяти.
Впервые идея о том, что системы страничной организации памяти и управления виртуальной памятью можно вынести за пределы ядра, появилась вместе с внешней системой страничной организации операционной системы Mach [YOUN87]. Принцип работы этой системы поясняется на рис. 4.11. Когда поток приложения обращается к странице, которая отсутствует в основной памяти, возникает прерывание из-за отсутствия страницы, и управление перехватывается ядром. После этого ядро отправляет системе страничной организации сообщение, в котором указывается запрашиваемая страница. Система страничной организации может принять решение загрузить данную страницу и выделить для этого страничный блок. Система страничной организации и ядро должны взаимодействовать между собой, чтобы логические операции, которые происходят в этой системе, отображались в физическую память. Как только нужная страница станет доступна, система страничной организации отправляет приложению сообщение о том, что оно может продолжить работу.


Рис. 4.11. Обработка прерывания из-за отсутствия страницы

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

Предоставление (grant). Владелец адресного пространства (процесс) может предоставлять некоторые свои страницы другому процессу. Ядро удаляет эти страницы из адресного пространства первого процесса и передает их второму процессу.

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

Восстановление (flush). Процесс может восстановить любые страницы, предоставленные другим процессам или отображенные в их адресное пространство.

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

 

 

Взаимодействие между процессами

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

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

 

 

Управление вводом-выводом и прерываниями

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

В [LIED96a] предлагается рассматривать аппаратное обеспечение как набор потоков, которые обладают уникальными идентификаторами и отправляют сообщения (содержащие только идентификатор данного потока) соответствующим программным потокам в пользовательском пространстве. Поток-получатель выясняет, является ли данное сообщение прерыванием, а также определяет вид этого прерывания. Общая структура такого кода, выполняющегося на пользовательском уровне, имеет следующий вид:

driver thread; do
waitFor (msg,sender) ;
if (sender == обрабатываемое_прерывание )
{
чтение/запись в порты ввода-вывода; сброс аппаратного прерывания }
else . . . while (true);

Просмотров:

Вернуться в оглавление:Операционные системы




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

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


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.