Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Обзор инструментов SEO-оптимизатора и методов продвижения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2004 → | ||||||
1
|
2
|
3
|
4
|
|||
---|---|---|---|---|---|---|
6
|
7
|
8
|
9
|
11
|
12
|
|
13
|
14
|
16
|
17
|
18
|
19
|
|
21
|
22
|
23
|
24
|
25
|
||
27
|
28
|
29
|
30
|
31
|
Статистика
0 за неделю
Создай свою операционную систему! #4
Информационный Канал Subscribe.Ru |
Сетевые операционные системы |
Глава 4. Процессы и потоки |
2004-12-10 |
Продолжение Мультипрограммирование на основе прерыванийНазначение и типы прерыванийПрерывания являются основной движущей силой любой операцион-ной системы. Отключите систему прерываний - и "жизнь" в операционной системе немедленно остановится. Периодические прерывания от таймера вы-зывают смену процессов в мультипрограммной ОС, а прерывания от уст-ройств ввода-вывода управляют потоками данных, которыми вычислитель-ная система обменивается с внешним миром. Как верно было замечено: "Прерывания названы так весьма удачно, поскольку они прерывают нормальную работу системы" . Другими словами, система прерываний переводит процессор на выполнение потока команд, от-личного от того, который выполнялся до сих пор, с последующим возвратом к исходному коду. Из сказанного можно сделать вывод о том, что механизм прерываний очень похож на механизм выполнения процедур. Это на самом деле так, хотя между этими механизмами имеется важное отличие. Переклю-чение по прерыванию отличается от переключения, которое происходит по команде безусловного или условного перехода, предусмотренной програм-мистом в потоке команд приложения. Переход по команде происходит в за-ранее определенных программистом точках программы в зависимости от ис-ходных данных, обрабатываемых программой. Прерывание же происходит в произвольной точке потока команд программы, которую программист не может прогнозировать. Прерывание возникает либо в зависимости от внеш-них по отношению к процессу выполнения программы событий, либо при появлении непредвиденных аварийных ситуаций в процессе выполнения дан-ной программы. Сходство же прерываний с процедурами состоит в том, что в обоих случаях выполняется некоторая подпрограмма, обрабатывающая спе-циальную ситуацию, а затем продолжается выполнение основной ветви про-граммы. В зависимости от источника прерывания делятся на три больших класса:
Внешние прерывания могут возникать в результате действий пользо-вателя или оператора за терминалом, или же в результате поступления сигна-лов от аппаратных устройств - сигналов завершения операций ввода-вывода, вырабатываемых контроллерами внешних устройств компьютера, такими как принтер или накопитель на жестких дисках, или же сигналов от датчиков управляемых компьютером технических объектов. Внешние прерывания на-зывают также аппаратными, отражая тот факт, что прерывание возникает вследствие подачи некоторой аппаратурой (например, контроллером принте-ра) электрического сигнала, который передается (возможно, проходя через другие блоки компьютера, например контроллер прерываний) на специаль-ный вход прерывания процессора. Данный класс прерываний является асин-хронным по отношению к потоку инструкций прерываемой программы. Ап-паратура процессора работает так, что асинхронные прерывания возникают между выполнением двух соседних инструкций, при этом система после об-работки прерывания продолжает выполнение процесса, уже начиная со сле-дующей инструкции. Внутренние прерывания, называемые также исключениями (exception), происходят синхронно выполнению программы при появлении аварийной си-туации в ходе исполнения некоторой инструкции программы. Примерами ис-ключений являются деление на нуль, ошибки защиты памяти, обращения по несуществующему адресу, попытка выполнить привилегированную инструк-цию в пользовательском режиме и т.п. Исключения возникают непосредст-венно в ходе выполнения тактов команды ("внутри" выполнения). Программные прерывания отличаются от предыдущих двух классов тем, что они по своей сути не являются "истинными" прерываниями. Про-граммное прерывание возникает при выполнении особой команды процессо-ра, выполнение которой имитирует прерывание, то есть переход на новую последовательность инструкций. Причины использования программных пре-рываний вместо обычных инструкций вызова процедур будут изложены ни-же, после рассмотрения механизма прерываний. Прерываниям приписывается приоритет, с помощью которого они ранжируются по степени важности и срочности. О прерываниях, имеющих одинаковое значение приоритета, говорят, что они относятся к одному уров-ню приоритета прерываний. Прерывания обычно обрабатываются модулями операционной систе-мы, так как действия, выполняемые по прерыванию, относятся к управлению разделяемыми ресурсами вычислительной системы - принтером, диском, таймером, процессором и т. п. Процедуры, вызываемые по прерываниям, обычно называют обработчиками прерываний, или процедурами обслужива-ния прерываний (Interrupt Service Routine, ISR). Аппаратные прерывания об-рабатываются драйверами соответствующих внешних устройств, исключе-ния - специальными модулями ядра, а программные прерывания - процеду-рами ОС, обслуживающими системные вызовы. Кроме этих модулей в опе-рационной системе может находиться так называемый диспетчер прерыва-ний, который координирует работу отдельных обработчиков прерываний. Механизм прерыванийМеханизм прерываний поддерживается аппаратными средствами компьютера и программными средствами операционной системы. Аппарат-ная поддержка прерываний имеет свои особенности, зависящие от типа про-цессора и других аппаратных компонентов, передающих сигнал запроса пре-рывания от внешнего устройства к процессору (таких, как контроллер внеш-него устройства, шины подключения внешних устройств, контроллер преры-ваний, являющийся посредником между сигналами шины и сигналами про-цессора). Особенности аппаратной реализации прерываний оказывают влия-ние на средства программной поддержки прерываний, работающие в составе ОС. Существуют два основных способа, с помощью которых шины вы-полняют прерывания: векторный (vectored) и опрашиваемый (polled). В обо-их способах процессору предоставляется информация об уровне приоритета прерывания на шине подключения внешних устройств. В случае векторных прерываний в процессор передается также информация о начальном адресе программы обработки возникшего прерывания - обработчика прерываний. Устройствам, которые используют векторные прерывания, назначает-ся вектор прерываний. Он представляет собой электрический сигнал, вы-ставляемый на соответствующие шины процессора и несущий в себе инфор-мацию об определенном, закрепленном за данным устройством номере, ко-торый идентифицирует соответствующий обработчик прерываний. Этот век-тор может быть фиксированным, конфигурируемым (например, с использо-ванием переключателей) или программируемым. Операционная система мо-жет предусматривать процедуру регистрации вектора обработки прерываний для определенного устройства, которая связывает некоторую подпрограмму обработки прерываний с определенным вектором. При получении сигнала запроса прерывания процессор выполняет специальный цикл подтверждения прерывания, в котором устройство должно идентифицировать себя. В тече-ние этого цикла устройство отвечает, выставляя на шину вектор прерываний. Затем процессор использует этот вектор для нахождения обработчика данно-го прерывания. Примером шины подключения внешних устройств, которая поддерживает векторные прерывания, является шина VMEbus. При использовании опрашиваемых прерываний процессор получает от запросившего прерывание устройства только информацию об уровне при-оритета прерывания (например, номере IRQ на шине ISA или номере IPL на шине SBus компьютеров SPARC). С каждым уровнем прерываний может быть связано несколько устройств и соответственно несколько программ - обработчиков прерываний. При возникновении прерывания процессор дол-жен определить, какое устройство из тех, которые связаны с данным уровнем прерываний, действительно запросило прерывание. Это достигается вызовом всех обработчиков прерываний для данного уровня приоритета, пока один из обработчиков не подтвердит, что прерывание пришло от обслуживаемого им устройства. Если же с каждым уровнем прерываний связано только одно уст-ройство, то определение нужной программы обработки прерывания происхо-дит немедленно, как и при векторном прерывании. Опрашиваемые прерыва-ния поддерживают шины ISA, EISA, MCA, PCI и Sbus. Механизм прерываний некоторой аппаратной платформы может соче-тать векторный и опрашиваемый типы прерываний. Типичным примером та-кой реализации является платформа персональных компьютеров на основе процессоров Intel Pentium. Шины PCI, ISA, EISA или MCA, используемые в этой платформе в качестве шин подключения внешних устройств, поддержи-вают механизм опрашиваемых прерываний. Контроллеры периферийных устройств выставляют на шину не вектор, а сигнал запроса прерывания опре-деленного уровня IRQ. Однако в процессоре Pentium система прерываний яв-ляется векторной. Вектор прерываний в процессор Pentium поставляет кон-троллер прерываний, который отображает поступающий от шины сигнал IRQ на определенный номер вектора. Вектор прерываний, передаваемый в процессор, представляет собой целое число в диапазоне от 0 до 255, указывающее на одну из 256 программ обработки прерываний, адреса которых хранятся в таблице обработчиков прерываний. В том случае, когда к каждой линии IRQ подключается только одно устройство, процедура обработки прерываний работает так, как если бы система прерываний была чисто векторной, то есть процедура не выполняет никаких дополнительных опросов для выяснения того, какое именно устрой-ство запросило прерывание. Однако при совместном использовании одного уровня IRQ несколькими устройствами программа обработки прерываний должна работать в соответствии со схемой опрашиваемых прерываний, то есть дополнительно выполнить опрос всех устройств, подключенных к дан-ному уровню IRQ. Механизм прерываний чаще всего поддерживает приоритезацию и маскирование прерываний. Приоритезация означает, что все источники пре-рываний делятся на классы и каждому классу назначается свой уровень при-оритета запроса на прерывание. Приоритеты могут обслуживаться как отно-сительные и абсолютные. Обслуживание запросов прерываний по схеме с относительными приоритетами заключается в том, что при одновременном поступлении запросов прерываний из разных классов выбирается запрос, имеющий высший приоритет. Однако в дальнейшем при обслуживании этого запроса процедура обработки прерывания уже не откладывается даже в том случае, когда появляются более приоритетные запросы - решение о выборе нового запроса принимается только в момент завершения обслуживания оче-редного прерывания. Если же более приоритетным прерываниям разрешается приостанавливать работу процедур обслуживания менее приоритетных пре-рываний, то это означает, что работает схема приоритезации с абсолютными приоритетами. Если процессор (или компьютер, когда поддержка приоритезации прерываний вынесена во внешний по отношению к процессору блок) работа-ет по схеме с абсолютными приоритетами, то он поддерживает в одном из своих внутренних регистров переменную, фиксирующую уровень приорите-та обслуживаемого в данный момент прерывания. При поступлении запроса из определенного класса его приоритет сравнивается с текущим приоритетом процессора, и если приоритет запроса выше, то текущая процедура обработ-ки прерываний вытесняется, а по завершении обслуживания нового прерыва-ния происходит возврат к прерванной процедуре. Упорядоченное обслуживание запросов прерываний наряду со схема-ми приоритетной обработки запросов может выполняться механизмом мас-кирования запросов. Собственно говоря, в описанной схеме абсолютных приоритетов выполняется маскирование - при обслуживании некоторого за-проса все запросы с равным или более низким приоритетом маскируются, то есть не обслуживаются. Схема маскирования предполагает возможность временного маскирования прерываний любого класса независимо от уровня приоритета. Обобщенно последовательность действий аппаратных и программных средств по обработке прерывания можно описать следующим образом. 1. При возникновении сигнала (для аппаратных прерываний) или условия (для внутренних прерываний) прерывания происходит первичное аппа-ратное распознавание типа прерывания. Если прерывания данного типа в настоящий момент запрещены (приоритетной схемой или механизмом маскирования), то процессор продолжает поддерживать естественный ход выполнения команд. В противном случае в зависимости от поступившей в процессор информации (уровень прерывания, вектор прерывания или тип условия внутреннего прерывания) происходит автоматический вызов процедуры обработки прерывания, адрес которой находится в специаль-ной таблице операционной системы, размещаемой либо в регистрах про-цессора, либо в определенном месте оперативной памяти. 2. Автоматически сохраняется некоторая часть контекста прерванного по-тока, которая позволит ядру возобновить исполнение потока процесса по-сле обработки прерывания. В это подмножество обычно включаются зна-чения счетчика команд, слова состояния машины, хранящего признаки основных режимов работы процессора (пример такого слова - регистр EFLAGS в Intel Pentium), а также нескольких регистров общего назначе-ния, которые требуются программе обработки прерывания. Может быть сохранен и полный контекст процесса, если ОС обслуживает данное пре-рывание со сменой процесса. Однако в общем случае это не обязательно, часто обработка прерываний выполняется без вытеснения текущего про-цесса . 3. Одновременно с загрузкой адреса процедуры обработки прерываний в счетчик команд может автоматически выполняться загрузка нового зна-чения слова состояния машины (или другой системной структуры, на-пример селектора кодового сегмента в процессоре Pentium), которое оп-ределяет режимы работы процессора при обработке прерывания, в том числе работу в привилегированном режиме. В некоторых моделях про-цессоров переход в привилегированный режим за счет смены состояния машины при обработке прерывания является единственным способом смены режима. Прерывания практически во всех мультипрограммных ОС обрабатываются в привилегированном режиме модулями ядра, так как при этом обычно нужно выполнить ряд критических операций, от кото-рых зависит жизнеспособность системы, - управлять внешними устройствами, перепланировать потоки и т.п. 4. Временно запрещаются прерывания данного типа, чтобы не образовалась очередь вложенных друг в друга потоков одной и той же процедуры. Де-тали выполнения этой операции зависят от особенностей аппаратной платформы, например может использоваться механизм маскирования прерываний. Многие процессоры автоматически устанавливают признак запрета прерываний в начале цикла обработки прерывания, в противном случае это делает программа обработки прерываний. 5. После того как прерывание обработано ядром операционной системы, прерванный контекст восстанавливается и работа потока возобновляется с прерванного места. Часть контекста восстанавливается аппаратно по команде возврата из прерываний (например, адрес следующей команды и слово состояния машины), а часть - программным способом, с помощью явных команд извлечения данных из стека. При возврате из прерывания блокировка повторных прерываний данного типа снимается. Программные прерыванияПрограммное прерывание реализует один из способов перехода на подпрограмму с помощью специальной инструкции процессора, такой как INT в процессорах Intel Pentium, trap в процессорах Motorola, syscall в про-цессорах MIPS или Тiсс в процессорах SPARC. При выполнении команды программного прерывания процессор отрабатывает ту же последователь-ность действий, что и при возникновении внешнего или внутреннего преры-вания, но только происходит это в предсказуемой точке программы - там, где программист поместил данную команду. Практически все современные процессоры имеют в системе команд инструкции программных прерываний. Одной из причин появления инструк-ций программных прерываний в системе команд процессоров является то, что их использование часто приводит к более компактному коду программ по сравнению с использованием стандартных команд выполнения процедур. Это объясняется тем, что разработчики процессора обычно резервируют для об-работки прерываний небольшое число возможных подпрограмм, так что длина операнда в команде программного прерывания, который указывает на нужную подпрограмму, меньше, чем в команде перехода на подпрограмму. Например, в процессоре х86 предусмотрена возможность применения 256 программ обработки прерываний, поэтому в инструкции INT операнд имеет длину в один байт (а инструкция INT 3, которая предназначена для вызова отладчика, вся имеет длину один байт). Значение операнда команды INT просто является индексом в таблице из 256 адресов подпрограмм обработки прерываний, один из которых и используется для перехода по команде INT. При использовании команды CALL потребовался бы уже не однобайтовый, а двух- или четырехбайтовый операнд. Другой причиной применения про-граммных прерываний вместо обычных инструкций вызова подпрограмм яв-ляется возможность смены пользовательского режима на привилегированный одновременно с вызовом процедуры - это свойство программных прерыва-ний поддерживается большинством процессоров. В результате программные прерывания часто используются для вы-полнения ограниченного количества вызовов функций ядра операционной системы, то есть системных вызовов. Продолжение следует...
|
Copyright (C) 2004 UzhOS-Team |
Ведущий рассылки Igene Smith (winexp[@]yandex.ru) |
Designed by Vladimir Tsarkov (bvbn[@]lipetsk.ru) |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.othos.osmaker |
Отписаться |
В избранное | ||