Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



· Высокая переносимость;

· Расширяемость;

· Высокая надежность;

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

Недостатки микроядерной архитектуры

Более низкая производительность. Это сказывается на скорости работы прикладных сред, а значит и на скорости выполнения приложений.

Вывод:

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

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

Микроядерные ОС удовлетворяют большинству требований, предъявляемых к совершенным ОС, обладая переносимостью, расширяемостью, надежностью и создают хорошие возможности для поддержки равпределенных приложений.

За эти достоинства приходится расплачиваться снижением производительности и это основной недостаток микропроцессорной архитектуры.

Микроядерную концепцию используют такие ОС, как Windows NT и некоторые версии ОС UNIX.

 

Дополнительная литература:

Андрей Рабаневский “Операционная система UNIX” Спб.: БХВ – Санкт-Петербург, 1999.


Процессы.

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

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

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

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

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

Понятие процесса – формализация идеи “независимой работы”.

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

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

Эти параллельно выполняемые задания вообще не должны учитывать существование друг друга. Когда какое либо задание отдает приказ “печатать”, его не касается то, что другое в это время осуществляет запись на диск и т.д.

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

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

Итак, процессы – независимые работы, которые выполняются параллельно и различными скоростями.

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

Кроме того, делается допущение, что операции внутри процесса выполняются в строго определенной последовательности.

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

Пространство состояний для данного набора переменных состояния – множество состояний, которые может принимать этот набор переменных.

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

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

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

На содержательном уровне набор переменных – память, состояние – содержимое памяти, функция действия – программа.

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

Пример:

Пусть задан процесс P имеющий две переменные x и y. Работу процесса Р можно описать последовательностью состояний: .

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

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

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

В ряде ОС кроме понятия процесс выделяется еще более мелкая единица, которая называется поток.

В чем же разница?

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

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

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

Реализация процессов.

Каждый программный процесс однозначно определяется информационной структурой, называемой дескриптором процесса. В типичной системе дескриптор процесса состоит из:

1. Переменной состояния, которая определяет положение процесса (готов к работе, работающий, заблокирован).

2. Защищенной области памяти, в которой находятся текущие значения регистров, когда процесс прерывается, не закончив работы.

3. Информации о ресурсах, которыми процесс владеет или имеет право пользоваться.


Кроме этого, в дескрипторе процесса может быть отведено место для организации общения с другими процессам.

Очень важно различать абстрактный и программный процессы.

Программный процесс – это и абстрактный процесс, а обратное не всегда верно.

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

Есть два подхода к образованию программных процессов.

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

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

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

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

Этот механизм, который сам программным процессом не является, дает системе возможность манипулировать программными процессам. Он называется стержнем.

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

Аналогично команда “остановить” отбирает у процесса процессор, а команда “уничтожить” отбирает дескриптор и ресурсы.

В системе с единственным процессором может существовать несколько процессов. При этом стержень дает каждому процессу возможность пользоваться процессором в определенные моменты времени.

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

В более сложных системах процессы могут быть неравными. Например, они могут составлять древовидную структуру.

В системе с древовидной структурой процесс называют отцом всех процессов, которые он образует, и процесс называют сыном того процесса, который его образовал. Здесь имеет место определение предков и потомков. Генеалогическое дерево процессов в системе есть ориентированный граф, где каждый процесс представляется вершиной, а дуга выходит из вершины A и заходит в вершину B тогда и только тогда, когда A – отец B. Генеалогическое дерево описывает упорядоченность процессов внутри системы в любой момент времени.

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

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

 

 


У такой структурированной системы есть преимущества:

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

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

· Благодаря наличию структуры всегда ясно, какому процессу принадлежит управление: отец управляет сыновьями.

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

Общение между процессами.

Если мы хотим использовать эффективно аппаратные и программные ресурсы. Они подлежат разделению.

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

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

Для снижения потерь из-за неэффективного использования программного оборудования можно также и здесь воспользоваться разделением.

Возьмем, например, такую программу как компилятор. Если процессу требуется оттранслировать программу, он может скопировать программу компилятора в свою память и выполнить компиляцию. Если этим компилятором пользуются несколько процессов, то такое размножение, с точки зрения ресурсов памяти, неоптимально. Целесообразно разделить по времени один экземпляр компилятора.

Заметим, что у аппаратных и программных ресурсов есть общие свойства.

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

Если эта система – программный ресурс, ее разделение организуется точно так, как и разделение аппаратных ресурсов.

Физические устройства называются физическими или естественными ресурсами.

Часть программного обеспечения, которая ведет себя подобно физическому ресурсу, называется логическим ресурсом.

Каждому из процессов, функционирующих в системе неважно, какие ресурсы он использует – физические или логические.

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

Синхронизация процессов.

Не смотря на то, что ресурсы можно разделять, они обычно доступны в каждый момент только одному процессу. Ресурс, который допускает обслуживание только одного пользователя за один раз, называется критическим ресурсом.

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

Если ресурс занят, то остальные процессы, которым он нужен, временно получают отказ и должны ждать, пока он не освободиться.

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

Рассмотрим два независимых процесса:

Parbegin

Процесс_1: do while (true)

Begin

Критический участок 1;

end;

Оставшаяся часть процесса 1;

end;

Процесс_2: do while (true)

Begin

Критический участок 2;

end;

Оставшаяся часть процесса 2;

end;

 

Конструкция вида:

Parbegin

Оператор 1;

Оператор 1;

...

Оператор 1;

parend.

 

Означает, что операторы 1¸ N выполняются параллельно.

Кстати, записи, приведенные выше, называются записями на псевдокоде.

Критические участки процессов соответствуют тем группам операция, которые обращаются к разделяемому критическому ресурсу.

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

1. Если один или несколько процессов хотят обратиться к своим критическим участкам, то один из них должен получить разрешение войти в свой критический участок.

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

У процессов возникает не только проблема синхронизации, но и необходимость в обмене информацией.

Назовем словом “поставщик” процесс, который отправляет порции информации другому процессу, который назовем “потребитель”.

Эти порции информации можно рассматривать как сообщения.

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

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

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

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

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

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

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

Если в системе имеется несколько пар “Поставщик – Потребитель”, то можно организовать разделение свободных буферов, объединив их общий пул.

Остановимся на решении проблем синхронизации и отношений типа “Поставщик – Потребитель”.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-13; Просмотров: 598; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.045 с.)
Главная | Случайная страница | Обратная связь