Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Обработка прерываний в реальном и защищенном режимах






В реальном режиме для перехода к обслуживанию запроса прерывания или исключения процессор обращается к таблице векторов прерываний, которая располагается в начальной области памяти, начиная с адреса 0…0h. Элементами таблицы являются вектора прерываний – начальные адреса подпрограмм обслуживания различных типов прерываний. Вектор прерывания в реальном режиме содержит четыре байта (два байта база сегмента кода и два байта смещение). Размер всей таблицы может составлять 1024 байт, чтобы обслуживать до 256 возможных видов прерываний.

При возникновении прерываний процессор производит следующие действия:

- Заносит текущее значение регистров CS и IP в стек.

- Заносит текущее значение регистра FLAGS в стек/

- Запрещает прерывания, устанавливая признак IF в регистре EFLAGS.

- Устанавливает признаки TF=RF=AC=0 в регистре EFLAGS.

- Загружает в регистры CS, IP новое содержимое из таблицы прерываний.

Возврат из подпрограммы обслуживания прерываний выполняется командой IRET, которая восстанавливает сохраненное в стеке содержимое регистров FLAGS, CS, IP.

В защищенном режиме вызов подпрограмм обслуживания прерываний осуществляется через дескрипторную таблицу прерываний IDT (Interrupt Descriptor Table), которая может располагаться в любом месте адресного пространства памяти. Базовый линейный адрес этой таблицы хранится в регистре IDTR. Загрузка содержимого этого регистра осуществляется командой LIDT, а сохранение выполняется командой SIDT. Команда LIDT является привилегированной и может выпол­няться только программой, имеющей высший уровень привилегий CPL=0. Команда SIDT может быть выполнена при любом уровне привилегий про­граммы.

 

47 16 15 0

Базовый адрес IDT Границы IDT

Рис. 4.2. Формат содержимого регистра IDTR

 

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

Шлюзы содержат селектор вызываемого при об­служивании сегмента, который поступает в регистр CS, и относительный адрес первой команды подпрограммы обслуживания, который загружается в регистр EIP. В дескрипторе также содержится бит Р, указывающий на присутствие (при значении Р=1) в памяти сегмента, в котором находится соответствующая подпрограмма обслуживания, и двух битовое поле gDPL, определяющее уровень привилегий шлюза (см. раздел 3.1). Бит D в байте доступа определяет режим работы процессора при обслуживании преры­ваний: если значение D=0, то процессор функционирует как 16-разрядный процессор 80286, если D=1, то обеспечивается 32-разрядный режим функционирования, характерный для процессоров 386, 486, Pentium, P6.

Передача управления через шлюз прерывания или шлюз ловушки может сопровождаться изменением уровня привилегий. Процессор прове­ряет значение gDPL в дескрипторе шлюза при выполнении программных прерываний, вызываемых командами INT n, INT3, INTO. Переход к выпол­нению подпрограммы обслуживания в этих случаях производится, если уровень привилегий текущей программы меньше или равен значению gDPL шлюза: CPL< =gDPL. Таким образом, величина gDPL ограничивает уровень привилегий программ, которые могут вызывать данную процедуру обслуживания. При выполнении других видов прерываний и исключений процессор игнорирует gDPL шлюза.

Уровень привилегий сегмента команд, в котором размещается под­программа обслуживания, должен быть меньше или равен уровню приви­легий текущей программы: DPL< =CPL. Нарушение этого правила приво­дит к исключению типа #GP. Поэтому рекомендуется подпрограммы об­служивания прерываний и исключений располагать в сегментах с уровнем привилегий DPL=0, чтобы избежать ситуации, когда при поступлении за­проса прерывания или исключения уровень текущей программы CPL ока­жется меньше, чем DPL сегмента команд обработчика прерывания.

При возникновении прерывания процессор сохраняет в стеке сле­дующую информацию (рис 4.3):

•Содержимое регистра SS прерванной процедуры (если имеет место изменение уровня привилегий).

•Содержимое регистра ESP прерванной процедуры (если имеет место изменение уровня привилегий).

•Содержимое регистра EFLAGS.

•Содержимое регистра CS.

•Содержимое регистра EIP.

•Код ошибки (если он формируется для данного исключения).

Рис. 4.3. Использование стека при прерываниях в защищенном режиме

 

После сохранения в стеке содержимого регистра EFLAGS процес­сор устанавливает в этом регистре значения признаков TF=VM=NT=0. Единственное различие между использованием шлюза ловушки и шлюза прерывания состоит в том, как процессор поступает с признаком IF. Если вызов подпрограммы обслуживания производится через шлюз прерыва­ния, то процессор после сохранения в стеке содержимого регистра EFLAGS устанавливает значение признака IF=0, запрещая маскируемые прерывания. Если переход к подпрограмме обслуживания осуществляется через шлюз ловушки, то значение признака IF не изменяется.

Возврат из подпрограммы обслуживания прерывания осуществля­ется с помощью команды IRET. При восстановлении из стека содержимого регистра EFLAGS действуют следующие правила:

•поле IOPL восстанавливается только, если CPL=0,

•флаг IF изменяется только, если CPL < IOPL.

Формат дескриптора шлюза задачи при реализации прерываний и исключений имеет вид, представленный на рис.3.16. Когда прерывание обрабатывается через шлюз задачи, то процессор выполняет обычную процедуру переключения задач, как это описано в разд. 3.4.

При реализации некоторых исключений (табл. 4.1) процессор зано­сит в стек код ошибки, формат которого приведен на рис. 4.4.

 

31 16 15 3 2 1 0

Резервировано Индекс селектора TI IDX XT

Рис. 4.4. Формат кода ошибки

 

Индекс селектора (биты 15-3) - указывает на дескриптор, использо­вание которого вызвало исключение. Биты IDT, TI указывает на таблицу, в которой находится неверный дескриптор. Бит IDT=1, если дескриптор на­ходится в таблице IDT. При значении бита IDT=0 размещение дескрипто­ра определяется битом TI: если Tl=0, то дескриптор находится в таблице GDT, если Т1=1 - в таблице LDT. Бит ЕХТ=1, если исключение вызвано не выполняемой программой, а внешним сигналом прерывания.

 

16. Микропроцессоры платформы х86, Pentium: управление виртуальной памятью, средства защиты памяти.

 

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

При использовании виртуальной памяти упрощается программирование, так как программисту больше не нужно учитывать ограниченность памяти или согласовывать использование памяти с другими приложениями. Для программы выглядит доступным и непрерывным все допустимое адресное пространство, вне зависимости от наличия в ЭВМ соответствующего объёма ОЗУ.

Применение механизма виртуальной памяти позволяет:

· упростить адресацию памяти клиентским программным обеспечением;

· рационально управлять оперативной памятью компьютера (хранить в ней только активно используемые области памяти);

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

Страничная память — способ организации виртуальной памяти, при котором единицей отображения виртуальных адресов на физические является регион постоянного размера (т. н. страница). Типичный размер 4096 байт, для некоторых архитектур до 128 КБ.

Страничная организация памяти обеспечивается только в защищенном режиме. Для ее реализации необходимо с помощью команды LMSW или MOV CR0 установить в регистре CR0 значение бита страничной адресации PG=1. При этом сегменты делятся на отдельные страницы емкостью 4 Кбайт или 4 Мбайт, размещаемые в различных позициях адресного пространства ОЗУ. Страницы могут группироваться в разделы. Размещение разделов и страниц в ОЗУ производится диспетчером памяти, входящим в состав операционной системы. Диспетчер задает базовые адреса разделов и страниц, которые хранятся в памяти в виде адресных таблиц. При использовании страничной организации блоки трансляции адреса, входящие в состав процессора, преобразуют адрес, сформиро­ванный MIU (при выборке операнда) или блоком выборки-декодирования (при выборке команды), в реальный физический адрес байта или слова. В процессе этого преобразования, который называется страничной транс­ляцией адреса, блок трансляции обращается к хранящимся в ОЗУ ад­ресным таблицам. Чтобы уменьшить число таких обращений и повысить производительность процессора, базовые адреса 32 страниц памяти ко­манд и данных, к которым выполнялись последние обращения, записыва­ются во внутренние буферы трансляции адреса (TLB). При обращении к этим страницам их базовые адреса считываются из буфера, поэтому фор­мирование физического адреса происходит существенно быстрее.

Страничная трансляция позволяет расширить объем адресуемой памяти до 64 Гбайт, используя 36-разрядную шину адреса. Такая возмож­ность реализуется, если установить в регистре управления CR4 значение бита РАЕ=1. При этом в адресных таблицах задаются 36-разрядные базовые адреса разделов и страниц, а размер страниц может составлять 4 Кбайт или 2 Мбайт.

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.