Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции СПО

.pdf
Скачиваний:
30
Добавлен:
03.06.2015
Размер:
2.4 Mб
Скачать

прерыв ние/исключение

 

вызыв ется

диспетчер

прерыв ний,

который

з помин ет

информ цию

о

источнике

прерыв ния

и

н лизирует

е о

приоритет. Если приоритет з прос

ниже или р вен IRQL прерв нно о код , то

о служив ние это о з прос

откл дыв ется и д нные о з просе помещ ются в

соответствующую очередь з просов, после че о происходит

ыстрый возвр т к

прерв нному

о р

отчику

прерыв ний.

По

з вершении

о р

отки

высокоприоритетно о

прерыв ния

упр вление

возвр щ ется

диспетчеру

прерыв ний,

который

просм трив ет

очереди отложенных прерыв ний и

вы ир ет из них н и олее приоритетное. При этом уровень IRQL сниж ется до

уровня вы р нно о прерыв ния.

 

 

 

 

 

 

 

 

 

Если же з прос имеет

олее высокий приоритет, чем IRQL текуще о

код , то текущий о р

отчик прерыв ний вытесняется и ст вится в очередь,

соответствующую

е о

зн чению

IRQL,

упр вление

перед ется новому

о р

отчику в

соответствии с IRQL з прос . После это о уровень IRQL

процессор дел ется р вным уровню IRQL принято о н

выполнение з прос .

 

Т ким

о р зом,

з прос н

прерыв ние

приним ется

диспетчером

прерыв ний все д нез висимо от текуще о уровня IRQL выполняемо о код ,

но

диспетчер

прерыв ний не перед ет е о н

о р

отку соответствующей

процедуре о р отки

прерыв ний,

помещ ет

в

про р ммную очередь

з просов, если в д нный момент выполняется

олее приоритетн я процедур

о р

отки прерыв ний.

Опер ционн я систем

имеет полный контроль н д

ситу цией, не

позволяя контроллер м устройств ввод -вывод

приним ть

решения о ходе вычислительно о процесс .

 

 

 

 

ВWindows NT низший уровень IRQL соответствует о ычным поток м,

нзн ч емым н выполнение диспетчером потоков (рис. 4.13). Это является некоторым допущением, т к к к код потоков н чин ет выполняться

процессором не в результ те з прос н прерыв ние, но это допущение хорошо

р от ет, поскольку позволяет лю ому «н стоящему» з просу прерыв ть код о ычно о поток .

Рис. 4.13. Диспетчериз ция прерыв ний в Windows NT

Высший уровень в иер рхии IRQL отводится т ким в жным со ытиям,

к к исключение по оши ке шины и дру им тяжелым

пп р тным с оям, д лее

р спол ются з прос н прерыв ние по с ою

пит ния и з прос н

межпроцессорное прерыв ние.

 

Прерыв ния от внешних устройств з ним ют промежуточные уровни

IRQL. Конкретное соотношение между приоритет ми внешних устройств

определяется приоритет ми, з д в емыми

пп р тной пл тформой, н пример

уровнем IRQ шины PCI, н зн ченным устройству.

 

 

 

Осо ую роль в р

оте вычислительной системы

и р ет

системный

т ймер:

н основ нии

 

е о

прерыв ний

о новляются

системные

ч сы,

определяющие очередной

момент

вызов

пл нировщик

потоков,

момент

выд чи

упр вляюще о

воздействия

потоком ре льно о

времени

и

мно ое

дру ое. Ввиду в жности немедленной о р

отки прерыв ний от т ймер , ему в

Windows NT д н весьм

высокий уровень приоритет —

олее высокий, чем

уровень лю о о устройств

ввод -вывод .

 

 

 

 

В

системе очередей

диспетчер

прерыв ний несколько

очередей

отведено для о служив ния отложенных про р ммных прерыв ний.

 

 

Про р ммные прерыв ния, о служив ющие системные вызовы от

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

исходящих от модулей ядр ОС, отводится олее высокий уровень з просов,

имеющий двойное н зв ние «диспетчерский/DPO.

Этот уровень приоритет н зыв ется диспетчерским, потому что именно

в эту очередь помещ ются про р ммные з просы, вызыв ющие диспетчер

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

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

которую мо ут жд ть несколько потоков. Во всех т ких ситу циях в Windows NT пл нировщик/диспетчер вызыв ется высокоуровневыми процедур ми ядр

не прямо посредством

вызов

процедуры,

косвенно,

с помощью

про р ммно о

прерыв ния. Это д ет возможность отделить

короткую, но

тре ующую

ыстрой

ре кции

системы

процедуру

о служив ния

высокоприоритетно о прерыв ния (н пример, н р щив ние системных ч сов)

от менее критичной опер ции перепл ниров ния пользов тельских потоков.

Прямой вызов пл нировщик /диспетчер потоков т кой возможности ы не

д л, и критичные з просы прерыв ния от контроллеров устройств ввод -вывод

вынуждены ыли ы жд ть,

пок отр от ет пл нировщик.

При этом

пл нировщик, возможно, вы р л

ы для выполнения дру ой поток, если ы

р от л после процедур о служив ния пп р тных прерыв ний,

т к к к он

получил ы свежие сведения о з вершении некоторых опер ций ввод -вывод .

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

Н личие отдельно о уровня для пл нировщик /диспетчер потоков не озн ч ет то о, что он все д вызыв ется с помощью про р ммных прерыв ний.

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

н прерыв ние (если он выполняется, зн чит, высокоприоритетные з просы н

прерыв ние отсутствуют), пл нировщик может

ыть вызв н ыстрее путем

непосредственно о внутрисе ментно о вызов

процедуры. Н пример,

системному вызову, переводящему поток по со ственному жел нию в

состояние ожид ния, нет смысл вызыв ть пл нировщик

потоков по

про р ммному прерыв нию.

 

Второе н зв ние диспетчерско о уровня, DPC, являясь

реви турой от

Deffered Procedure Call (вызов отложенной процедуры), оворит о том, что н

этом уровне ожид ют своей очереди отложенные вызовы и дру их процедур ОС, не только пл нировщик /диспетчер . Процедуры ОС мо ут вызыв ть

дру дру

и

непосредственно, но при мно ослойном построении ядр

существуют

олее и менее приоритетные процедуры, и вызов менее

приоритетных

процедур из

олее приоритетных с помощью мех низм

про р ммных

прерыв ний позволяет,

к к

и в случ е с пл нировщиком,

упорядочить во времени их выполнение,

что оптимизирует р оту ОС в целом.

Примером

процедур ОС, р

от ющих

н

высоком приоритетном уровне,

являются те ч сти др йверов устройств ввод -вывод , которые выполняют короткие, но критичные ко времени ре кции действия. В то же время существуют и дру ие ч сти др йверов, которые выполняют менее срочную, но

олее о ъемную р оту. В Windows NT т кие ч сти др йверов оформляют к к

процедуры, вызыв емые с помощью

про р ммных

прерыв ний уровня

«диспетчерский/DPC» (ВРОпроцедуры),

с мо про

р ммное прерыв ние

выполняет критичн я ч сть др йвер . Естественно, существуют и дру ие модули ОС, оформляемые подо ным о р зом.

Опис нн я про р ммн я ре лиз ция приоритетно о о служив ния прерыв ний приводит к однотипной р оте ОС Windows NT н р зличных

пп р тных пл тформ х, что упрощ ет ло ику р оты ОС и ее перенос н

новые

пл тформы.

Отриц тельным

следствием

т ко о центр лизов нно о

подход

является некоторое з медление о р

отки прерыв ний, т к к к вместо

непосредственной перед чи упр вления др йверу устройств

или о р

отчику

исключений

выполняется

вызов

некое о

посредник

 

диспетчер

прерыв ний.

В

ОС семейств

UNIX

принят

похожий,

 

но

менее

центр лизов нный подход к ведению и

о р

отке

очередей

прерыв ний.

Вместо едино о диспетчер

прерыв ний е о функции выполняют процедуры,

о служив ющие

к ждый приоритетный кл сс

прерыв ний.

Тем

не

менее,

о щий

подход

к

упорядочив нию

о р

отки

прерыв ний

з

счет их

мно оуровневой приоритез ции и ведения системы очередей

присутствует

пр ктически во всех современных опер ционных систем х.

 

 

 

 

6.5 Системные вызовы

Системный вызов позволяет приложению о р титься к опер ционной системе с прось ой выполнить то или иное действие, оформленное к к

процедур (или

н ор процедур) кодово о се мент

ОС. Для

прикл дно о

про р ммист

опер ционн я систем вы лядит

к к нек я

и лиотек ,

предост вляющ я некоторый н ор полезных функций, с помощью которых

можно

упростить

прикл дную

про р мму

или выполнить

действия,

з прещенные в пользов тельском

режиме, н пример о мен

д нными с

устройством ввод -вывод .

 

 

 

Ре лиз ция

системных вызовов должн

удовлетворять

следующим

тре ов ниям:

 

 

 

 

 

о еспечив ть переключение в привиле иров нный режим;

о л д ть высокой скоростью вызов процедур ОС;

о еспечив ть по возможности единоо р зное о р щение к

системным вызов м для всех пп р тных пл тформ, н которых

р

от ет ОС;

 

допуск ть ле кое р сширение н ор системных вызовов;

о еспечив ть контроль со

стороны ОС з

корректным

использов нием системных вызовов.

 

 

Первое тре ов ние для ольшинств

пп р тных пл тформ может ыть

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

ре лиз ции системных вызовов. К к это о ычно ыв ет, некоторые из этих тре ов ний вз имно противоречивы.

Для о еспечения высокой скорости ыло ы полезно использов ть

векторные свойств системы про р ммных прерыв ний, имеющиеся во мно их

процессор х, то есть з крепить з

к ждым системным вызовом определенное

зн чение вектор . Приложение при

т ком спосо е вызов

непосредственно

ук зыв ет в р ументе з прос

зн

чение вектор , после

че о упр вление

немедленно перед ется тре уемой процедуре опер ционной системы (рис. 4.14,

). Одн ко этот децентр лизов нный спосо перед чи упр вления привяз н к

осо енностям пп р тной пл тформы, т кже не позволяет опер ционной

системе ле ко модифициров ть н ор системных вызовов и контролиров ть их

использов ние. Н пример, в процессоре Pentium количество системных вызовов определяется количеством векторов прерыв ний, выделенных для этой

цели из о ще о пул в

256

элементов (ч сть которых используется

под

пп р тные

прерыв ния

и о р отку

исключений).

До вление

ново о

системно о вызов

тре ует от системно о про р ммист

тщ тельно о поиск

сво одно о элемент

в т

лице прерыв ний, которо о к тому же н

к ком-то

эт пе р звития ОС может и не ок з ться.

 

 

 

 

В

ольшинстве

ОС

системные вызовы

о служив ются

по

центр лизов нной схеме,

основ нной н

существов нии диспетчер системных

вызовов (рис. 4.14,

). При лю ом системном вызове приложение выполняет

про р ммное прерыв ние с определенным и единственным номером вектор .

Н пример, ОС Linux использует для системных вызовов ком нду INT 80h, ОС

Windows NT (при р оте н пл тформе Pentium) — INT 2Eh. Перед выполнением про р ммно о прерыв ния приложение тем или иным спосо ом

перед ет опер ционной системе номер системно о вызов , который является

индексом в т лице дресов процедур ОС, ре лизующих системные вызовы

(т лиц sysent н рис. 4.14). Спосо перед чи з висит от ре лиз ции, н пример

номер можно поместить в определенный ре истр

о ще о н зн чения

процессор

или перед ть через

стек (в

этом

случ е

после

прерыв ния

и

переход

в привиле иров нный

режим

их

нужно

удет

скопиров ть

в

системный стек из пользов тельско о, это действие в некоторых процессор х

втом тизиров но). Т кже некоторым спосо ом перед ются р ументы

системно о вызов , они мо ут к к помещ ться в ре истры о ще о н зн чения,

т к и перед в ться через стек или м ссив, н ходящийся в опер тивной п мяти.

М ссив удо ен при ольшом о ъеме д нных, перед в емых

в к честве

р ументов, при этом в ре истре о ще о н зн чения ук зыв ется

дрес это о

м ссив .

 

Диспетчер системных вызовов о ычно предст вляет со ой простую

про р мму, котор я сохр няет содержимое ре истров процессор

в системном

стеке (поскольку в результ те про р ммно о прерыв ния процессор переходит в привиле иров нный режим), проверяет, поп д ет ли з прошенный номер вызов в поддержив вмый ОС ди п зон (то есть не выходит ли номер з

р ницы т лицы) и перед ет упр вление процедуре ОС, дрес которой з д н в т лице дресов системных вызовов.

Рис. 4.14. Децентр лизов нн я и центр лизов нн я схемы о р отки системных вызовов

Процедур ре лиз ции системно о вызов извлек ет из системно о стек р ументы и выполняет з д нное действие. Это действие может ыть весьм

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

к к чтение из ф йл или выделение процессу дополнительно о

се мент

п мяти, тре уют о р щения .основной

функции

системно о

вызов к

нескольким внутренним процедур м ядр

ОС, прин

длеж щим к р зличным

подсистем м, т ким к к подсистем ввод -вывод или упр вления п мятью.

После з вершения р оты системно о вызов упр вление возвр щ ется

диспетчеру, при этом он получ ет т кже код з вершения это о вызов .

Диспетчер восст н влив ет ре истры процессор , помещ ет в определенный ре истр код возвр т и выполняет инструкцию возвр т из прерыв ния, котор я восст н влив ет непривиле иров нный режим р оты процессор .

Для приложения системный вызов внешне ничем не отлич ется от вызов о ычной и лиотечной функции язык С, связ нной (дин мически или

ст тически) с о ъектным

кодом приложения и выполняющейся в

пользов тельском режиме.

т к я ситу ция действительно имеет место — для

всех системных вызовов в и лиотек х, предост вляемых компилятором С,

имеются т к н зыв емые «з

лушки» (в

н лоязычном в ри нте используется

термин «stub» — ост ток, о рызок). К жд я

з

лушк

оформлен

к к

С-

функция, при этом он

содержит несколько

ссем лерных строк, нужных для

выполнения

 

инструкции

про р ммно о

прерыв ния.

Т ким о р зом,

пользов тельск я про р мм

вызыв ет з

лушку,

т , в свою очередь, вызыв ет

процедуру ОС.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для ускорения выполнения некоторых дост точно простых системных

вызовов, которым к тому же не тре уется р

от

в привиле иров нном режиме,

тре уем я р

от

полностью выполняется

и лиотечной функцией, которую

неспр ведливо

н зыв ть

в

д нном

случ е

з

лушкой. Более точно, т к я

функция не является системным вызовом,

предст вляет со ой «чистую»

и лиотечную функцию,

выполняющую всю свою р

оту в пользов тельском

режиме

в вирту льном

дресном

простр нстве

процесс , но

прикл дной

про р ммист может о

этом и не зн ть — для не о системные вызовы и

и лиотечные

функции

вы лядят

единоо р зно.

Прикл дной

про р ммист

имеет дело с н

ором функций прикл дно о про р ммно о интерфейс

— API

(н пример, Win32 или POSIX), — состояще о и из

и лиотечных функций,

ч сть из которых пользуется для з вершения р

оты системными вызов ми,

ч сть — нет.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Опис нный т

личный спосо

ор

низ ции системных вызовов принят

пр ктически

 

во

всех

опер ционных

систем х.,

Он

позволяет

ле ко

модифициров ть сост в системных вызовов, просто до вив в т

лицу новый

дрес и р сширив ди п зон допустимых номеров вызовов.

 

 

 

 

Опер ционн я

систем

может

выполнять

системные

вызовы

в

синхронном

или

синхронном

режим х.

Синхронный

системный

вызов

озн ч ет,

что

процесс,

сдел вший

т кой

вызов,

приост н влив ется

(переводится пл нировщиком ОС в состояние ожид ния) до тех пор, пок

системный вызов не выполнит всю тре ующуюся от не о р

оту (рис. 4.15, ).

После это о пл нировщик переводит процесс в состояние

отовности и при

очередном выполнении процесс

р нтиров нно может

воспользов ться

результ т ми з вершивше ося

к этому времени системно о вызов .

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

Асинхронный системный вызов не приводит к переводу процесс в

режим ожид ния после выполнения некоторых н ч льных системных действий,

н пример з пуск опер ции вывод -вывод , упр вление возвр щ ется

прикл дному процессу (рис. 4.15, 6).

Большинство системных вызовов в опер ционных систем х являются

синхронными, т к к к этот режим

из

вляет

приложение от

р оты

по

выяснению момент

появления результ т

вызов . Вместе с тем в новых

версиях опер ционных систем количество

синхронных системных вызовов

постепенно увеличив ется, что д ет

ольше сво оды р зр отчик м сложных

приложений. Осо енно

нужны

синхронные системные

вызовы

в

опер ционных систем х н

основе микроядерно о подход , т к к к при этом в

пользов тельском режиме

р от ет

ч сть ОС, которым нео ходимо иметь

полную сво оду в ор

низ ции своей р оты,

т кую сво оду д ет только

синхронный режим о служив ния вызовов микроядром.