Назначение и функции операционных систем

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

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

12_____________________________________________ Глава 1. Основные понятия

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

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

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

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

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

Назначение и функции операционных систем_________________________________ 13

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

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

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

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

Для автоматизации труда программиста (кодера) стали разрабатывать специаль-ные алгоритмические языки высокого уровня, а для автоматизации труда опера­тора вычислительного комплекса была разработана специальная управляющая программа, загрузив которую в память один раз оператор мог ее далее использо­вать неоднократно и более не обращаться к процедуре программирования ЭВМ через пульт оператора. Именно эту управляющую программу и стали называть операционной системой. Со временем на нее стали возлагать все больше и больше задач, она стала расти в объеме. Прежде всего разработчики стремились к тому, чтобы операционная система как можно более эффективно распределяла вычис­лительные ресурсы компьютера, ведь в 60-е годы операционные системы уже по­зволяли организовать параллельное выполнение нескольких программ. Помимо задач распределения ресурсов появились задачи обеспечения надежности вычис­лений. К началу 70-х годов диалоговый режим работы с компьютером стал преоб­ладающим, и у операционных систем стремительно начали развиваться интерфейс­ные возможности. Напомним, что термином интерфейс (interface) обозначают целый комплекс спецификаций, определяющих конкретный способ взаимодей­ствия пользователя с компьютером.

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

Назначение и функции операционных систем - student2.ru 1 Системными принято называть такие программы, которые используются всеми остальными про­граммами.

14_____________________________________________ Глава 1. Основные понятия

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

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

- Загрузка в оперативную память подлежащих исполнению программ.

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

- Запуск программы (передача ей управления, в результате чего процессор ис­
полняет программу).

- Идентификация всех программ и данных.

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

- Обслуживание всех операций ввода-вывода.

- Обеспечение работы систем управлений файлами (СУФ) и/или систем управ­
ления базами данных (СУБД), что позволяет резко увеличить эффективность
всего программного обеспечения.

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

- Планирование и диспетчеризация задач в соответствии с заданными стратеги­ей и дисциплинами обслуживания.

□ Организация механизмов обмена сообщениями и данными между выполняю­
щимися программами.

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

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

□ Аутентификация и авторизация пользователей (для большинства диалоговых
операционных систем). Под аутентификацией понимается процедура проверки

Назначение и функции операционных систем_________________________________ 15

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

- Удовлетворение жестким ограничениям на время ответа в режиме реального времени (характерно для операционных систем реального времени).

□ Обеспечение работы систем программирования, с помощью которых пользова­
тели готовят свои программы.

□ Предоставление услуг на случай частичного сбоя системы.

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

Назначение и функции операционных систем - student2.ru

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

Назначение и функции операционных систем - student2.ru ' Если операционная система не поддерживает механизм учетных записей, как это имеет место, на­пример, в семействе операционных систем Windows 9x компании Microsoft, то пароль сверяется по специальному файлу, где он хранится в зашифрованном виде.

2 В 70-е годы пользователи за терминалом писали log in, и это означало процедуру регистрации. Были системы, в которых требовалось набрать команду log on, что означало то же самое.

16_____________________________________________ Глава 1, Основные понятия

Понятие операционной среды

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

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

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

Понятие операционной среды____________________________________________ 17

Можно сказать, что программы создаются для работы в некоторой заданной опе­рационной среде. Например, можно создать программу для работы в среде DOS. Если такая программа все функции, связанные с операциями ввода-вывода и с за­просами памяти, выполняет не сама, а за счет обращения к системным функциям DOS, то она будет (в абсолютном большинстве случаев) успешно выполняться и в MS DOS, и в PC DOS, и в Windows 9x, и в Windows 2000, и в OS/2, и даже в Linux.

Итак, параллельное существование терминов «операционная система» и «опера­ционная среда» вызвано тем, что операционная система (в общем случае) может поддерживать несколько операционных сред. Почти все современные 32-разряд­ные операционные системы, созданные для персональных компьютеров, поддер­живают по нескольку операционных сред. Так, операционная система OS/2 Warp, которая в свое время была одной из лучших в этом отношении, может выполнять следующие программы:

- основные программы, созданные с учетом соответствующего «родного» 32-раз-ряднго программного интерфейса этой операционной системы;

- 16-разрядные программы, созданные для систем OS/2 первого поколения;

- 16-разрядные приложения, разработанные для выполнения в операционной среде MS DOS или PC DOS;

- 16-разрядные приложения, созданные для операционной среды Windows 3.x;

- саму операционную оболочку Windows 3.x и уже в ней — созданные для нее программы.

А операционная система Windows XP позволяет выполнять помимо основных приложений, созданных с использованием Win32 API, 16-разрядные приложения для Windows 3.x, 16-разрядные DOS-приложения, 16-разрядные приложения для первой версии OS/2.

Операционная среда может включать несколько интерфейсов: пользовательские и программные. Если говорить о пользовательских, то, например, система Linux имеет для пользователя как интерфейсы командной строки (можно использовать различные «оболочки» — shell), наподобие Norton Commander, например Midnight Commander, так и графические интерфейсы, например X-Window с различными менеджерами окон — KDE, Gnome и др. Если же говорить о программных интер­фейсах, то в тех же операционных системах с общим названием Linux программы могут обращаться как к операционной системе за соответствующими сервисами и функциями, так и к графической подсистеме (если она используется). С точки зре­ния архитектуры процессора (и персонального компьютера в целом) двоичная программа, созданная для работы в среде Linux, использует те же команды и фор­маты данных, что и программа, созданная для работы в среде Windows NT. Однако в первом случае мы имеем обращение к одной операционной среде, а во втором — к другой. И программа, созданная непосредственно для Windows, не будет выпол­няться в Linux; однако если в операционной системе Linux организовать полно­ценную операционную среду Windows, то наша Windows-программа может быть выполнена. Завершая этот раздел, можно еще раз сказать, что операционная сре­да — это то системное программное окружение, в котором могут выполняться про­граммы, созданные по правилам работы этой среды.

18_____________________________________________ Глава 1. Основные понятия

Прерывания

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

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

Механизм прерываний реализуется аппаратно-программными средствами. Струк­туры систем прерывания (в зависимости от аппаратной архитектуры) могут быть самыми разными, но все они имеют одну общую особенность — прерывание непре­менно влечет за собой изменение порядка выполнения команд процессором.

Механизм обработки прерываний независимо от архитектуры вычислительной системы подразумевает выполнение некоторой последовательности шагов.

1. Установление факта прерывания (прием сигнала запроса на прерывание) и
идентификация прерывания (в операционных системах идентификация пре­
рывания иногда осуществляется повторно, на шаге 4).

2. Запоминание состояния прерванного процесса вычислений. Состояние процесса
выполнения программы определяется, прежде всего, значением счетчика ко­
манд (адресом следующей команды, который, например, в i80x86 определяется
регистрами CS и IP — указателем команды [1,8, 48]), содержимым регистров
процессора, и может включать также спецификацию режима (например, режим
пользовательский или привилегированный) и другую информацию.

3. Управление аппаратно передается на подпрограмму обработки прерывания.
В простейшем случае в счетчик команд заносится начальный адрес подпро­
граммы обработки прерываний, а в соответствующие регистры — информация
из слова состояния. В более развитых процессорах, например в 32-разрядных
микропроцессорах фирмы Intel (начиная с i80386 и включая последние про­
цессоры Pentium IV) и им подобных, осуществляются достаточно сложная про­
цедура определения начального адреса соответствующей подпрограммы обра­
ботки прерывания и не менее сложная процедура инициализации рабочих
регистров процессора (подробно эти вопросы рассматриваются в разделе «Си­
стема прерываний 32-разрядных микропроцессоров i80x86» главы 4).

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

5. Собственно выполнение программы, связанной с обработкой прерывания. Эта
работа может быть выполнена той же подпрограммой, на которую было переда-

Прерывания_________________________________________________________ 19

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

6. Восстановление информации, относящейся к прерванному процессу (этап, об­
ратный шагу 4).

7. Возврат на прерванную программу.

Шаги 1-3 реализуются аппаратно, шаги 4-7 — программно.

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

Итак, главные функции механизма прерываний — это:

- распознавание или классификация прерываний;

- передача управления соответствующему обработчику прерываний;

- корректное возвращение к прерванной программе.

Переход от прерываемой программы к обработчику и обратно должен выполнять­ся как можно быстрей. Одним из самых простых и быстрых методов является ис­пользование таблицы, содержащей перечень всех допустимых для компьютера прерываний и адреса соответствующих обработчиков. Для корректного возвраще­ния к прерванной программе перед передачей управления обработчику прерыва­ний содержимое регистров процессора запоминается либо в памяти с прямым до­ступом, либо в системном стеке (system stack).

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

Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса, например:

- прерывания от таймера;

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

20_____________________________________________ Глава 1. Основные понятия

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

- при наличии в поле кода операции незадействованной двоичной комбинации;

- при делении на ноль;

- вследствие переполнения или исчезновения порядка;

- от средств контроля (например, вследствие обнаружения ошибки четности, ошибок в работе различных устройств).

Назначение и функции операционных систем - student2.ru

Рис. 1.2. Обработка прерывания

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

Прерывания_________________________________________________________ 21

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

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

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

Назначение и функции операционных систем - student2.ru

Рис.1.3. Распределение прерываний по уровням приоритета

Наличие сигнала прерывания не обязательно должно вызывать прерывание ис­полняющейся программы. Процессор может обладать средствами защиты от пре­рываний: отключение системы прерываний, маскирование (запрет) отдельных сиг-

22_____________________________________________ Глава 1. Основные понятия

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

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

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

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

□ По принципу стека, или, как иногда говорят, по дисциплине LCFS (Last Come
First Served — последним пришел, первым обслужен), то есть запросы с более
низким приоритетом могут прерывать обработку прерывания с более высоким
приоритетом. Дли этого необходимо не накладывать маску ни на один из сиг­
налов прерывания и не выключать систему прерываний.

Следует особо отметить, что для правильной реализации последних двух дисцип­лин нужно обеспечить полное маскирование системы прерываний при выполне­нии шагов 1-4 и 6-7. Это необходимо для того, чтобы не потерять запрос и пра­вильно его обслужить. Многоуровневое прерывание должно происходить на этапе собственно обработки прерывания, а не на этапе перехода с одного процесса вы­числений на другой.

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

Прерывания_________________________________________________________ 23

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

Как мы уже знаем, при появлении запроса на прерывание система прерываний идентифицирует сигнал и, если прерывания разрешены, то управление передает­ся на соответствующую подпрограмму обработки. Из рис. 1.2 видно, что в под­программе обработки прерывания имеется две служебные секции. Это — первая секция, в которой осуществляется сохранение контекста прерываемых вычисле­ний, который не смог быть сохранен на шаге 2, и последняя, заключительная сек­ция, в которой, наоборот, осуществляется восстановление контекста. Для того что­бы система прерываний не среагировала повторно на сигнал запроса на прерывание, она обычно автоматически «закрывает» (отключает) прерывания, поэтому необ­ходимо потом в подпрограмме обработки прерываний вновь включать систему пре­рываний. В соответствии с рассмотренными режимами обработки прерываний (с относительными и абсолютными приоритетами и по правилу LCFS) установка этих режимов осуществляется в конце первой секции подпрограммы обработки. Таким образом, на время выполнения центральной секции (в случае работы в ре­жимах с абсолютными приоритетами и по дисциплине LCFS) прерывания разре­шены. На время работы заключительной секции подпрограммы обработки систе­ма прерываний вновь должна быть отключена и после восстановления контекста опять включена. Поскольку эти действия необходимо выполнять практически в каждой подпрограмме обработки прерываний, во многих операционных систе­мах первые секции подпрограмм обработки прерываний выделяются в уже упо­минавшийся специальный системный программный модуль, называемый супер­визором прерываний.

Супервизор прерываний прежде всего сохраняет в дескрипторе текущей задачи ра­бочие регистры процессора, определяющие контекст прерываемого вычислитель­ного процесса. Далее он определяет ту подпрограмму, которая должна выполнить действия, связанные с обслуживанием настоящего (текущего) запроса на преры­вание. Наконец, перед тем, как передать управление на эту подпрограмму, супер­визор прерываний устанавливает необходимый режим обработки прерывания. После выполнения подпрограммы обработки прерывания управление вновь пере­дается ядру операционной системы. На этот раз уже на тот модуль, который зани­мается диспетчеризацией задач (см. раздел «Планирование и диспетчеризация процессов и задач» в главе 2). И уже диспетчер задач, в свою очередь, в соответ­ствии с принятой дисциплиной распределения процессорного времени (между выполняющимися вычислительными процессами) восстановит контекст той за­дачи, которой будет решено выделить процессор. Рассмотренную нами схему ил­люстрирует рис. 1.4.

Как мы видим из рисунка, здесь отсутствует возврат в прерванную ранее програм­му непосредственно из самой подпрограммы обработки прерывания. Для прямого

24_____________________________________________ Глава 1. Основные понятия

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

Назначение и функции операционных систем - student2.ru

Рис. 1.4. Обработка прерывания при участии супервизоров ОС

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

Понятия вычислительного процесса и ресурса_______________________________ 25

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

Наши рекомендации