Обработка прерываний в контексте текущей задачи

Обработку прерывания в контексте текущей задачи поясняет рис. 4.12.

Обработка прерываний в контексте текущей задачи - student2.ru

Рис. 4.12. Схема передачи управления при прерывании в контексте текущей задачи

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

1. В стек на уровне привилегий текущего сегмента кода помещаются:

- значения SS и SP, если уровень привилегий в коммутаторе выше уровня привилегий ранее исполнявшегося кода;

- регистр флагов EFLAGS; - регистры CS и IP.

2. Если рассматриваемому прерыванию соответствовал коммутатор прерывания,
то запрещаются прерывания (устанавливается флаг IF = 0 в регистре EFLAGS).
В случае коммутатора перехвата флаг прерываний не сбрасывается, и обработ­
ка новых прерываний на период обработки текущего прерывания тем самым не
запрещается.

Система прерываний 32-разрядных микропроцессоров j80x86______________ 127

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

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

Обработка прерываний с переключением на новую задачу

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

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

1. Сохраняются все рабочие регистры процессора в текущем сегменте TSS, базовый
адрес этого сегмента берется в регистре TR (см. раздел «Адресация в 32-раз­
рядных микропроцессорах i80x86 при работе в защищенном режиме»).

2. Текущая задача отмечается как занятая.

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

4. Устанавливается бит NT (Next Task).

5. В поле обратной связи TSS помещается селектор прерванной задачи..

6. С помощью значений CS:IP, взятых из нового сегмента TSS, обнаруживается
и выполняется первая команда обработчика прерывания.

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

128 Глава 4. Особенности архитектуры микропроцессоров i80x86

Обработка прерываний в контексте текущей задачи - student2.ru рипторов (LDT), поэтому при переключении задачи процессор загружает в регистр LDTR новое значение. Это позволяет обратиться к сегментам кода, которые абсо­лютно не пересекаются с сегментами кода любых других задач, поскольку именно локальные таблицы дескрипторов обеспечивают эффективную изоляцию вирту­альных адресных пространств. Новая задача начинает свое выполнение на уровне привилегий, определяемом полем RPL нового содержимого регистра CS, которое загружается из сегмента TSS. Достоинством этого коммутатора является то, что он позволяет сохранить все регистры процессора с помощью механизма переклю­чения задач, тогда как коммутаторы перехвата и прерываний сохраняют только содержимое регистров IFLAGS, CS и IP, а сохранение других регистров возлагает­ся на программиста, разрабатывающего соответствующую программу обработки прерывания.

Обработка прерываний в контексте текущей задачи - student2.ru

Рис. 4.13. Схема передачи управления при прерывании с переключением на новую задачу

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

Контрольные вопросы и задачи

1. Как в реальном режиме работы микропроцессоров i80x86 осуществляется пре­образование виртуального адреса в физический?

Контрольные вопросы и задачи_________________________________________ 129

2. Какие механизмы виртуальной памяти используются в защищенном режиме
работы микропроцессоров i80x86?

3. Для чего в микропроцессоры i80x86 введен регистр-указатель задачи TR? Ка­
кой он разрядности?

4. Как в микропроцессорах i80x86 реализована поддержка сегментного способа
организации виртуальной памяти?

5. Что понимается под термином «линейный адрес»? Как осуществляется пре­
образование линейного адреса в физический? Может ли линейный адрес быть
равным физическому?

6. Что дало введение двухэтапной страничной трансляции в механизме странич­
ного способа реализации виртуальной памяти? Как разработчики микропро­
цессора i80386 решили проблему замедления доступа к памяти, которое при
двухэтапном преобразовании адресов очень существенно?

7. Что означает термин «плоская модель памяти»? В чем заключаются достоин­
ства (и недостатки, если они есть) этой модели?

8. Что дало введение виртуального режима? Как в этом режиме осуществляется
вычисление физического адреса?

9. Что имеется в микропроцессорах i80x86 для обеспечения защиты адресного
пространства задач?

10. Что такое «уровень привилегий»? Сколько уровней привилегий в микропро­
цессорах i80x86? Для каких целей введено такое количество уровней привиле­
гий?

11. Что такое текущий уровень привилегий? Как узнать, чему он равен? Что та­
кое эффективный уровень привилегий?

12. Объясните правила работы с уровнями привилегий для различных типов сег­
ментов.

13. Поясните работу механизма шлюзов. Для чего он предназначен, как осуществ­
ляется передача управления на сегменты кода с другими уровнями привиле­
гий?

14. Опишите работу системы прерываний микропроцессоров i80x86 в реальном
режиме.

15. В чем заключаются принципиальные отличия работы системы прерываний
микропроцессоров i80x86 в защищенном режиме по сравнению с реальным
режимом?

16. Как осуществляется переход на программу обработки прерываний, если де­
скриптор прерываний является коммутатором прерываний?

17. Как осуществляется переход на программу обработки прерываний, если де­
скриптор прерываний является коммутатором перехвата?

18. Как осуществляется переход на программу обработки прерываний, если дес­
криптор прерываний является коммутаторам задачи?

Глава 5. Управление

Вводом-выводом

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

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

С одной стороны, организация ввода-вывода в различных операционных системах имеет много общего. С другой стороны, реализация ввода-вывода в ОС так сильно отличается от системы к системе, что очень нелегко выделить и описать именно основные принципы реализации этих функций. Проблема усугубляется еще и тем, что в большинстве ныне используемых систем эти моменты вообще, как правило, подробно не описаны (исключением являются только системы Linux и FreeBSD, для которых имеются комментированные исходные тексты), а детально описыва­ются только функции API, реализующие ввод-вывод. Другими словами, для тех же систем Windows от компании Microsoft мы воспринимаем подсистему ввода-вывода как «черный ящик». Известно, как можно и нужно использовать эту под­систему, но детали ее внутреннего устройства остаются неизвестными. Поэтому в данной главе мы рассмотрим только основные идеи и концепции. Наконец, по­скольку такой важный ресурс, как внешняя память, в основном реализуется на устройствах ввода-вывода с прямым доступом, а к ним, прежде всего, относятся накопители на магнитных дисках, мы также рассмотрим логическую структуру дис-

Основные концепции организации ввода-вывода в операционных системах 131

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

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