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


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

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

Объем машинно-зависимых компонентов ОС зависит от того, насколько велики отличия в аппаратных платформах, для которых разрабатывается ОС. Например, ОС, построенная на 32-битовых адресах, для переноса на машину с 16-битовыми адресами должна быть практически переписана заново. Одно из наиболее очевидных отличий – несовпадение системы команд процессов – преодолевается достаточно просто. ОС программируется на языке высокого уровня, а затем соответствующим компилятором вырабатывается код для конкретного типа процессора. Однако во многих случаях различия в организации аппаратуры компьютера лежат гораздо глубже и преодолеть их таким образом не удается. Например, однопроцессорный и двухпроцессорный компьютеры требуют применения в ОС совершенно разных алгоритмов распределения процессорного времени. Аналогично отсутствие аппаратной поддержки виртуальной памяти приводит к принципиальному различию в реализации подсистемы управления памятью. В таких случаях не обойтись без внесения в код ОС специфики аппаратной платформы, для которой эта ОС предназначена. Для уменьшения количества машинно-зависимых модулей производителей ОС обычно ограничивают универсальность машинно-зависимых модулей. Это означает, что их независимость носит условный характер и распространяется только на несколько типов процессов и созданных на основе этих процессов аппаратных платформ. По этому пути пошли, например, разработчики ОС Windows NT.ограничив количество типов процессоров для своей системы четырьмя и поставляя различные варианты кодов ядра для однопроцессорных систем и многопроцессорных компьютеров.

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

Для компьютеров на основе процессоров Intel x86/Pentium разработка экранирующего машинно-зависимого слоя ОС несколько упрощается за счет встроенной в постоянную память компьютера базовой системы ввода-вывода – BIOS. BIOS содержит драйверы для всех устройств, входящих в базовую конфигурацию компьютера: жестких и гибких дисков, клавиатуры, дисплея и т. д. Эти драйверы выполняют весьма примитивные операции с управляемыми устройствами, например чтение группы секторов данных определенной дорожки диска, но за счет этих операций экранируются различия аппаратных платформ ПК и серверов на процессорах Intel разных производителей. Разработчики ОС могут пользоваться слоем драйверов BIOS как частью машинно-зависимого слоя ОС, а могут заменить все или часть драйверов BIOS компонентами ОС.

 

Переносимость ОС

Если код ОС может быть сравнительно легко перенесен с процессора одного типа на процессор другого типа и аппаратной платформы одного типа на аппаратную платформу другого типа, то такую ОС называют переносимой (portable), или мобильной.

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

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

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

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

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

 
 
Машинно-независимые части на алгоритмическом языке.


 

 

Машинно-зависимая часть ОС (на языке компьютера С)  
Машинно-зависимая часть ОС (на языке компьютера А)
Машинно-зависимая часть ОС (на языке компьютера В)  
С

 

 

Машинно-зависимая часть компьютера В    

           
 
Машинно-зависимая часть компьютера А  
 
Машинно-зависимая часть компьютера С    
 
   

 

 


 

           
   
     
 
 

 

 


Компьютер типа А.

Компьютер типа В. Компьютер типа С.

Рис. 9. Перенос ОС на разные аппаратные платформы.

 

5.. Микроядерная архитектура

 

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

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

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

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

Утилиты ОС.

Приложения Приложения

пользователей. Утилиты ОС. пользователей.

                                                                       
                           
 
   
         

 


Пользовательский режим Пользовательский режим

       
   
 
 


Привилегированный режим Привилегированный режим

       
   
 
 

 


Рис. 10. Перенос основного объема функций ядра в пользовательском режиме.

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

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

 
 


Приложения

Пользователей.

       
 
   
 

 

 


 

 

       
 
   


Пользовательский

режим.

Привилегированный

режим.

 

Сообщение-ответ

 

Сообщение-запрос

Рис. 11. Реализация системного вызова в микроядерной архитектуре.



Дата добавления: 2016-06-05; просмотров: 4733;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.017 сек.