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

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

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

Системных функций бывает много, они определяют те возможности, которые опера­ционная система предоставляет выполняющимся под ее управлением приложени­ям. Такого рода системные запросы (вызовы системных операций, или функций) либо явно прописываются в тексте программы программистами, либо подстав­ляются автоматически самой системой программирования на этапе трансляции исходного текста разрабатываемой программы. Каждая операционная система имеет свое множество системных функций; они вызываются соответствующим образом, по принятым в системе правилам. Совокупность системных вызовов и пра­вил, по которым их следует использовать, как раз и определяет уже упомянутый нами интерфейс прикладного программирования (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. Основные понятия

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

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

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

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

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

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

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


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

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

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

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

Рис.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.

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

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


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

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








Дата добавления: 2016-09-20; просмотров: 1518;


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

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.024 сек.