39771

Прерывания и особые случаи

Реферат

Информатика, кибернетика и программирование

Содержимое IDTR не сохраняется в TSS и не изменяется при переключении задачи. Обработчик может обращаться к любым сегментам памяти через таблицу GDT и LDT текущей задачи на своем уровне привелегий передавать управление с помощью команд FR JMP и FR CLL изменять уровень привелегий с помощью шлюза вызова и производить вводвывод. В IDT разрещается применять 3 вида дескрипторов: шлюз ловушки шлюз прерывания и шлюз задачи. Шлюз задачи Шлюз прерывания Шлюз ловушки Формат шлюза задачи аналогичен формату этого в GDT и LDT.

Русский

2013-10-08

922 KB

7 чел.

Прерывания и особые случаи.

Общая реакция МП на прерывание или особые случаи заключается в сохранении минимального контекста программы, идентификации источника и переключение на обработчик.

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

Нарушение – это особый случай, который МП может обнаружить до возникновения фактической ошибки (нарушение правил привилегий или превышение предела сегмента). После обработки нарушения можно продолжить программу, осуществив повторное выполнение команды.

Ловушка – это особый случай, который обнаруживается после окончания виноватой команды. После его обработки МП возобновляет действие с той команды, которая находится после “захваченной” команды (команды прерывания при переполнении).

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

  1.  Прерывания в защищенном режиме.

В P и V режимах, механизм прерываний и особые случаи значительно усовершенствован и усовершенствования коснулись:

  •  трансформации таблицы векторов прерываний в дескрипторную таблицу прерываний IDT;
  •  более сложного процесса перехода к обработчику прерываний и особых случаев;
  •  передачи обработчику дополнительной информации о причине возникновения особых случаев

Также каждому аппаратному прерыванию и особому случаю назначен уникальный номер n, по которому МП обращается к IDT.

Дескриптор шлюза 255

Дескриптор шлюза n

Дескриптор шлюза 2

Дескриптор шлюза 1

Дескриптор шлюза 0

Базовый адрес

Предел

IDT адресуется IDTR и представляет массив шлюзов, посредством которых происходит передача управления обработчику. IDTR задает предел таблице IDT. Содержимое IDTR не сохраняется в TSS  и не изменяется при переключении задачи. Программы никогда не могут обратиться к IDT.

МП до передаче управления включает в стек обработчика минимум 12 байт, представляющих собой адрес возврата из регистра CS:EIP и содержимое регистра EFLAGS. Точное значение адреса возврата прерванный код зависит от типа особого случая (прерывание, нарушение, ловушка, авария).

При переходе к обработчику может произойти смена уровня привелегий, поэтому МП включает в стек полный указатель из регистров SS:ESP. Иногда МП включает в стек код ошибки.

Обработсик действует как обычный код. Уровень привилегий его определяется содержимым поля DPL в дескрипторе его сегмента кода. Обработчик может обращаться к любым сегментам памяти через таблицу GDT и LDT текущей задачи на своем уровне привелегий, передавать управление с помощью команд FAR JMP и FAR CALL, изменять уровень привелегий с помощью шлюза вызова и производить ввод-вывод. После завершения обработчика управление возвращается по команде IRET.

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

Уничтоженные особые случаи формируются вновь, когда обработчик прерывания возвращает управление в точку прерывания.

2 IDT

IDT – это массив из 256 8-байтных дескрипторов. Максимальный размер ее 8*256-1=2047 байт. При возникновении особого случая и выборе дескриптора за пределом IDT генерируются нарушение обшей защиты, поэтому определять таблицу меньших размеров не рекомендуется.

В отличии от GDT, первый элемент IDT содержит действительный дескриптор (0). Для образования индекса таблицы IDT МП умножает номер прерывания на 8. IDT может находиться в любой области памяти. Команды LIDT загрузки SIDT сохранения позволяют сохранять содержимое IDTR. Операндом команд является адрес шести байт в памяти.

В IDT разрещается применять 3 вида дескрипторов: шлюз ловушки, шлюз прерывания и шлюз задачи. Шлюзы ловушки и прерывания содержат селекторы сегмента кода и смещение внутри него и совместно они однозначно определяют точку входа обработчика особого случая.

Шлюз задачи

Шлюз прерывания

Шлюз ловушки

Формат шлюза задачи аналогичен формату этого в GDT и LDT.

В большинстве случаев поле DPL устанавливается равным 3, чтобы дескрипторы IDT были доступны всем задачам.

2.1 Шлюз ловушки (ШЛ).

При возникновени особого случая и выбора из IDT ШЛ, МП сохраняет наиболее важную часть своего состояния. Затем осуществляет меж сегментный переход, используя селектор и смещение, содержащееся в ШЛ. Селектор должен выбирать сегмент кода и не может адресовать другой шлюз или декриптор. Если выбираемый сегмент кода в LDT, то дескриптор должен находится в таблице LDT текущей задачи. Рекомендуется дескрипторы всех сегментов кода для обработчиков О.С. хранить в GDT. Целевой сегмент кода необязательно должен быть присутствующим. При выполнении обработки особого случая и достиджения команды IRET, МП извлекает из стека адрес возврата и EFLAGS и если происходила смена уровня превилегий 48-байтовый указатель внешнего стека.

Выполнение прерванной задачи возобновляется.

2.2 Шлюз прерывания (ШП)

Шлюз прерывания действует также как и ШЛ только МП сбрасывает в 0 IF после включения в стек адреса возврата и содержимого EFLAGS, но до выолнения первой команды обработчика. Прерывание через ШП или ШЛ сбрасывает TF при возврате он востанавливается.

2.3 Шлюз задачи (ШЗ).

При выборе шлюза задачи, МП переключается на новую задачу, определяемую селектором  TSS в дескрипторе шлюза задачи. ШЗ может содержать селектор TSS из LDT и селектор Ш еще одной задачи.

При переключении задачи селектор TSS  текущей задачи помещается в поле обратной связи TSS новой задачи в  её регистре EFLAGS NT устанвливается в 1.

Обработка О.С. через шлюз задачи имеет ряд преимуществ:

  •  автоматически сохраняется весь контекст прерваной задачи;
  •  обработчик особого случая не может исказить прерванную задачу;
  •  обработчик прерывания может работать на любом уровне привилегий и в заведомо правильной среде; он может иметь свое локальное адресное пространство благодаря наличию отдельной LDT (при необходимости).

Состояние флага IF не изменияется, хотя можно организовать автоматический сброс флага IF, определив в сегменте TSS входящей задачи IF=0.

  1.  Особенности обработки О.С.

Значение DPL шлюзов рекомендуется задавать = 3. Для ШЛ и ШП МП перед началом выполнения обработчика производит контроль привилегий. Эти шлюзы должны передавать управление сегменту кода с более высоким или равным уровнем привилегий. Обработчику не разрешается работать на уровне привилегий который ниже уровня привилегий прерываемой задачи. Для обеспечения гарантированного соблюдения правил защиты используют два способа:

  •  определение всех обработанных О.С. не вызывающих переключение задачи, в сегментах кода с уровнем привилегий 0, такие обработчики будут действовать всегда, независимо от CPL программы;
  •  определить все обработчики  ОС, не вызывающих переключение задачи, в подчиненных сегментах кода.

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

Мультизадачность

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

Для управления мультизадачностью в МП нет специальных команд. Вместо этого он иначе интерпретирует обычные команды межсегментной передачи управления – переходы и вызовы. Задача может активизироваться прерыванием и особым случаем. При реализации одной из этих форм передачи управления с назначением, определенным элементом в одной из дескрипторных таблиц, тип дескриптора может быть таким, который инициирует выполнение новой задачи после сохранения состояния текущей задачи. Имеются два типа относящихся к задачам дескрипторов, которые могут находиться в дескрипторной таблице: дескрипторы сегментов состояния задачи (TSS) и шлюзы задачи. Когда управление передается любому типу таких дескрипторов, происходит переключение задачи. При каждом переключении задачи МП может перейти к другой локальной дескрипторной таблице, что позволяет назначить каждой задаче свое отображение логических адресов на физические. Это дополнительное средство защиты, так как задачи можно изолировать друг от друга. Также производится перегрузка базового регистра каталога страниц PDBR, что позволяет применить для изолирования задач механизм страничного преобразования. При переключении задачи с помощью прерывания или особого случая происходит автоматический возвратк прерванной задаче.

При переключении задачи сохраняются значения всех регистров в структурах данных (в памяти), называемой сегментом состояния задачи. Для поддержки мультизадачности в МП имеются следующие регистры и структуры данных: сегмент состояния задачи, регистр задачи, дескриптор состояния задачи, регистр задачи и дескриптор шлюза задачи.

  1.  Контекст задачи

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

В компьютере выделяется память, доступная ОС, в которой хранится вся информация, необходимая для рестарта задачи. Эта область называется контекстной памятью или кадром состояния.

Всем задачам в системе выделяется область основной памяти (раздел). При переключении контекста компьютер переходит от одного раздела к другому.

  1.  Сегмент состояния задачи

В МП задача определяется как совокупность кода и данных, которым назначен сегмент состояния задачи (TSS). Имеется однозначное соответствие между сегментами TSS и задачами. TSS является эквивалентным контекстной памяти, в которой хранится информация о задаче, когда она не выполняется. TSS – небольшой сегмент данных с разрешением операций считывания и записи, доступ к которому не разрешается никаким программам, даже на уровне привилегий 0. К сегментам TSS может обращаться только сам МП.

  1.  Дескриптор сегмента TSS

TSS определяется дескриптором сегмента, который может находится только в GDT. Он похож на дескриптор кода и содержит обычные поля.

Поле DPL показывает, какие программы могут обращаться к задаче, которая определяется данным дескриптором TSS. Бит S=0, определяет системный объект. Бит Busy в поле типа показывает задача выполняется сейчас или ожидает выполнения. Значение 9 показывает неактивную задачу, 11 – занятую. Поле предела должно быть больше или равно 67h. Обращение к дескриптору TSS не предоставляет процедуре возможность считать или модифицировать дескриптор. Эти операции можно осуществлять только применяя дескриптор данных, отображенный на ту же область памяти. Загрузка дескриптора TSS в сегментный регистр приводит к особому случаю.

  1.  Сегмент состояния задачи

Значительная часть TSS отведена для хранения внутренних регистров МП. Восемь РОНов, CS и EIP, определяющие с какой команды осуществляется рестарт, регистр флагов гарантирует правильное действие команд условных переходов при рестарте задачи. В TSS находится также три указателя стека SS:ESP для трех уровней привилегий 0,1,2. Сохранение в TSS содержимого регистров CR3 и LDTR означает, что для каждой задачи допускается образование своих каталогов страниц и локальной дескрипторной таблицы LDT. Этим обеспечивается изолированность адресных пространств отдельных задач. Поле обратной связи содержит селектор TSS той задачи, которая выполнялась перед данной. Бит ловушки T применяется при отладке при T=1 и переключении на данную задачу генерируется особый случай отладки.

  1.  Инициализация сегмента TSS

До перехода в мультизадачный режим необходимо определить дескрипторы TSS, разместить TSS в адресном пространстве и правильно инициализировать их. Селекторы сегментов TSS невозможно загрузить в сегментный регистр без генерирования особого случая нарушения защиты. Следовательно, для работы с сегментами TSS необходимо пользоваться альтернативным именованием (псевдонимами) этих сегментов. При определении всех сегментов TSS в соседних областях памяти достаточно псевдонима одного сегмента данных, включающего в себя все сегменты TSS. Однако удобнее задать по одному псевдониму для каждого сегмента TSS. Управление псевдонимами упрощается, если чередовать их с дескрипторами TSS в GDT. После создания дескрипторов псевдонимов необходимо загрузить в сегменты TSS начальные значения.

При первом запуске задачи начальное содержимое сегмента TSS может повлиять на ее поведение. Регистры CPU EIP должны адресовать первую команду, а сегментные регистры данных должны содержать селекторы сегментов данных задач. В регистр SS следует загрузить селектор сегмента стека с правильным уровнем привилегий. РОНы содержат нули, если первый запуск задачи не требует их конкретных начальных значений. При необходимости нужно инициализировать в TSS поле SS:ESP. Если задача рассчитана на использование LDT и страничного преобразования, то потребуется инициализировать LDTR и CR3.

Минимальный размер TSS – 104 байт и если его размер оказывается меньше МП генерирует особый случай неверного сегмента TSS. Верхний размер TSS ограничен 4 Гб. Дополнительные области в TSS могут определяться пользователем и использовать по своему усмотрению (например хранить полное состояние устройства с плавающей точкой, список открытых файлов и т.д.).

  1.  Переключение задач

Переключение задачи в МП могут вызвать четыре события:

  •  выходящая задача выполняет команду FAR CALL или FAR JMP, и селектор выбирает шлюз задачи;
  •  выходящая задача выполняет команду FAR CALL или FAR JMP, и селектор выбирает дескриптор TSS;
  •  выходящая задача выполняет команду IRET для возврата в предыдущую задачу; эта команда приводит к переключению задачи, если только в регистре EFLAGS бит NT вложенной задачи находится в состоянии 1;
  •  возникло аппаратное или программное прерывание, и соответствующий элемент дескрипторной таблицы прерываний IDT содержит шлюз задачи.

Переключение задачи состоит из следующих действий:

  1.  Проверить, что выходящей задаче разрешено переключение на новую. К командам JMP и CALL применяются правила привилегий обращения к данным. Поле DPL дескриптора TSS и шлюз задачи должны быть больше или равны обоим CPL и RPL селектора задачи. Особым случаем, прерыванием и командам IRET разрешается переключать задачи независимо от поля DPL шлюза задачи или дескриптора TSS назначения.
  2.  Проверить, что дескриптор TSS входящей задачи отмечен  как присутствующий и имеет правильный предел (не меньше 67h).
  3.  Сохранить состояния выходящей задачи. МП берет базовый адрес текущего сегмента TSS из регистра задачи. Регистры МП копируются в текущий TSS.
  4.  Загрузить в регистр TR селектор дескриптора TSS входящей задачи, установить бит занятости Busy новой задачи и установить бит TS переключения задачи в регистре CR0. Селектор либо является операндом команды JMP или CALL, либо берется из шлюза задачи.
  5.  Загрузить состояние входящей задачи из ее сегмента TSS и продолжить выполнение.
    1.  Переключение задачи через шлюз задачи

Шлюз задачи является специальным системным

дескриптором. Формат шлюза задачи представлен на рис. 1. Он не определяет сегмент в памяти, а действует как посредник в процессе переключения задачи и определяет только селектор сегмента TSS и три бита в байте прав доступа. При указании в команде селектора шлюза задачи производится косвенное обращение к дескриптору TSS, которым однозначно определяется входящая задача. Селектор задачи разрешается адресовать в обычных командах FAR CALL и FAR JMP, которые инициируют переключение задачи. Текущая программа должна быть достаточно привилегированна для доступа к шлюзу задачи MAX (CPL, RPL) <= DPL шлюза задачи.

  1.  Переключение задачи через сегмент TSS

Для переключения задачи в межсегментных командах передачи управления разрешается использовать селектор дескриптора TSS вместо селектора шлюза задачи. Правило защиты по привилегиям принимает вид: MAX (CPL, RPL) <= DPL сегмента TSS.

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

  1.  Назначение и использование регистра задачи

При переключении задачи МП должен сохранить контекст выходящей задачи в ее TSS и загрузить контекст входящей задачи из соответствующего ей TSS. После этого начинается выполнение входящей задачи с команды, адресуемой CS:EIP. Сегмент TSS входящей задачи идентифицируется дескриптором TSS, селектор которого прямо или косвенно определяется при переключении задачи. Контекст выходящей задачи сохраняется в сегменте , селектор дескриптора которого всегда находится во внутреннем регистре задачи TR. Сначала МП сохраняет контекст выходящей задачи в TSS, выбираемом регистром TR, а затем загружает в TR селектор дескриптора TSS входящей задачи. Содержимое TR любая программа с помощью команды STR может передать в регистр или ячейку памяти. Для инициализации TR применяется команда загрузки TR LTR.

После загрузки нового контекста из TSS и модификации TR МП отмечает TSS входящей задачи как занятый, устанавливая бит Busy в его дескрипторе. Занятый TSS может относиться либо к выполняющейся задаче, либо к вложенной. Переключение на задачу отмеченную как занятую не производится, МП генерирует особый случай, предотвращая переключение на текущую задачу.

При переключении задачи МП устанавливает флажок TS (переключение задачи) в регистре CR0. Сброс этого флага можно осуществить явно во входящей задаче. Флаг TS используется для управления системным ресурсом (FPU). Если во входящей задаче нет команд FPU, то содержимое устройство не сохраняется для экономии времени, но если FPU требуется входящей задаче, его состояние придется сохранить. Флаг TS предназначен для учета таких ситуаций. По нему МП узнает, что после последнего использования FPU произошло переключение задачи, поэтому МП генерирует особый случай и сохраняет состояние сопроцессора. После этого флажок TS можно сбросить командой CLTS.

  1.  Изменение уровня привилегий в задаче

Так как при смене сегмента кода имеется возможность изменения уровня привилегий, то происходит изменения уровня привилегий стека. При создании сегментов TSS селекторы сегментов кода и стека должны иметь совместимые уровни привилегий.

Смена сегмента кода может произойти намеренно (для временного повышения уровня привилегий) или ненамеренно (при внешних или внутренних прерываниях). При этом уровень привилегий обработка прерывания отличается от уровня прерванной задачи, т. е. Требуется изменить стек. Для работы TSS с любым уровнем привилегий в него вводят три указателя стека для уровней привилегий 0, 1, 2.

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

  1.  Вложение задач

Когда задача вызывается FAR CALL, аппаратным прерыванием, особым случаем, то она считается вложенной в ту задачу, которая переключилась на нее. Глубина вложенной задачи не ограничивается. (При FAR JMP вложений не бывает). Механизмом связи вложенных задач служит поле обратной связи в TSS. В этом поле вызванной задачи сохраняется селектор TSS вызывающей задачи, т. е. Старое содержимое регистра TR. Кроме того МП устанавливает флаг NT (вложенной задачи) в регистр EFLAGS вызывающей задачи. NT сообщает о том, содержит ли поле обратной связи правильное значение селектора.

Когда МП встречает команду IRET, то по флагу NT он узнает нужно ли производить обычный возврат (NT=0) или переключение задачи (NT=1).

Команда RET не учитывает вложений задач, даже если они встроены в цепь вложенных задач командой CALL. Факт вложения задач учитывает только команда IRET.

  1.  Двоичная карта разрешения ввода – вывода

Последнее 16 – битное слово в TSS содержит следующие начала двоичной карты разрешения ввода – вывода. Она является дополнительным средством механизма защиты по привилегиям. Такая карта при необходимости создается для отдельной задачи и участвует в контроле привилегий только для команд ввода – вывода (IN, INS, OUT, OUTS, CLI, STI).

Без двоичной карты разрешения ввода – вывода задача может выполнять команды ввода – вывода, если ее CPL меньше или равно уровню привилегий ввода – вывода IOPL. Значение IOPL может уменьшаться при переключении задачи. При наличии двоичной карты разрешения ввода – вывода и запрете выполнения команд ввода – вывода, МП обращается к двоичной карте разрешения ввода – вывода для проверки возможности ввода – вывода по конкретным адресам. Если соответствующие этим адресам биты карты = 0, операции ввода – вывода разрешаются, в противном случае формируется особый случай нарушения защиты.

В двоичной карте разрешения ввода – вывода каждый бит соответствует одному адресу ввода – вывода. Младший бит карты соответствует нулевому адресу, следующий первому адресу и т. д.

Полная карта ввода – вывода может занимать 8 кб памяти. Однако может быть и усеченной по байтной границе. Все отсутствующие в усеченной карте биты считаются = 1.

Двоичная карта разрешения ввода – вывода размещается в памяти произвольно, но вблизи TSS той задачи, которая пользуется картой. Карта заканчивается либо по достижению 8 кбайт, либо по пределу сегмента TSS. Для сокращения карты достаточно уменьшить предел TSS. Конец карты отмечается специальным байтом со держащим 0 в FFH; он считается частью карты и учитывается в пределе сегмента TSS.

Двоичная карта разрешения ввода – вывода обеспечивает задачам свободный доступ к незащищенным портам ввода – вывода без требований понижения значения IOPL. Допускается использование одной карты различными сегментами.

  1.  Взаимодействие задач

Поскольку дескрипторы в GDT доступны всем задачам с учетом уровня привилегий, а дескрипторы в LDT доступны только одной задаче имеется два предельных случая использования адресного пространства. Если пользоваться только GDT, все задачи разделяют одно и то же адресное пространство, если сосредоточить большую часть дескрипторов в LDT, задачи оказываются почти полностью изолированными. Первая ситуация характерна для однопользовательской системы, а вторая для многопользовательской системы с отдельными задачами для каждого пользователя.

       6.1 Полное изолирование адресных пространств.

       Изолирование адресных пространств отдельных задач достигается относительно легко. Все требующиеся задаче сегменты, определяются и размещаются в LDT. В GDT находятся только дескрипторы таблицы LDT и сегментов TSS. При наличии задачи супервизора с уровнем привилегии 0 в ее таблице LDT должны

содержаться псевдонимы таблиц GDT и IDT, чтобы управлять сегментами и обеспечить средства отладки.

       При переключении задач МП загружает новую таблицу LDT, кэширует дескрипторы новых сегментов и загружает новый контекст. Если в каждой LDT находятся уникальные дескрипторы, а псевдонимы отсутствуют, задачи оказываются полностью изолированными друг от друга.

       6.2 Полное перекрытие адресного пространства.

       В этой модели все задачи разделяют одно и то же адресное пространство. Дескрипторы всех сегментов находятся в GDT. LDT отсутствуют. МП  обращается ко всем сегментам через GDT(первый способ).

Второй способ. Дескрипторы всех сегментов помещаются в LDT, но все задачи разделяют одну и ту же таблицу LDT. В GDT находятся дескрипторы TSS и один селектор LDT. Если селектор LDT поместить в TSS каждой задачи, достигается тот же эффект, что

и при нахождении всех дескрипторов в GDT. Однако все селекторы должны выбирать текущую LDT (TI = 1).

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

       6.3 Частичное перекрытие адресного пространства.

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

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

требуется доступ к дескриптору соответствующего сегмента. Именно дескриптор сегмента управляет объемом адресуемой памяти и целевым использованием сегмента. И управление разделения памяти превращается в управление дескрипторами. Для разрешения задачам доступа к сегменту, дескриптор  этого сегмента достаточно поместить в LDT этих задач. Модификацией полей байта AR можно разрешать/запрещать операции над содержимым сегмента.

       6.3.1. Разделение кода  между задачами.

       С помощью разделения кода между задачами удается избежать дублирование часто используемых программ. Для разделения сегмента кода его дескриптор требуется поместить либо GDT, либо в LDT разделяющих его задач.

       Уровень привилегий дескриптора должен быть достаточно низким, чтобы сегмент могла использовать каждая задача.

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

       При назначении задачам различных уровней привилегий, код в разделенном сегменте кода выполняется на уровне привилегий вызвавшей его задачи. При этом могут возникать сложности, если разделяемый код содержит привилегированные или IOPL-чувствительные команды. Поэтому нужно либо использовать TSS с одинаковым значением в поле IOPL, либо не применять в разделяемом коде команд ввода-вывода.

       6.3.2 Разделение данных.

       Разделенное пространство данных является единственным способом передачи информации между задачами. Если адресные пространства не перекрываются, задачи не могут обмениваться данными. Разделенное пространство данных может быть целым сегментом или его частью. Допускается, что разные задачи могут иметь различные права доступа к разделенному пространству. Неодинаковые права доступа можно реализовать, только

помещая дескриптор разделяемого сегмента в LDT отдельных задач, создавая псевдонимы сегмента. При нахождении дескриптора в GDT, у всех задач будут одинаковые права доступа к нему. Разделение данных ставит специфические задачи, связанные с их модификацией и предоставления каждой задаче самых "свежих" данных.

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

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

       Управление псевдонимами.

       При работе с разделяемыми данными  требуется, чтобы изменения в одном дескрипторе разделенного сегмента как можно скорее были внесены в псевдонимы. Эти изменения относятся

к битам A,P, полям базового адреса и предела. Имеется несколько способов решения этой задачи.

1. Организация списка псевдонимов. Если дескриптор в текущей LDT имеет псевдонимы в другой задаче, следует установить бит пользователя U в дескрипторе, идентифицируя наличия псевдонима.

Затем образуется список псевдонимов, который хранится в расширении сегмента TSS

перед DS. кар. разр. в-в. Каждый элемент списка содержит 16-битный селектор TSS разделяющей задачи и 16-битный селектор псевдонима в таблице LDT этой задачи. Список заканчивается

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

2. Когда задача разделяет несколько сегментов, используют несколько списков - по одному для каждого разделенного сегмента. При наличии у дескриптора псевдонима бит U устанавливается.

В расширении сегмента TSS задачи образуется простой каталог  псевдонимов сегментов. Если дескриптор имеющий псевдоним, находится в четвертом элементе LDT, программа должна обратиться к четвертому элементу каталога. Этот элемент содержит смещение

базы списка псевдонимов четвертого дескриптора;

3. При создании LDT можно поместить рабочие дескрипторы только в четные элементы, информацию о псевдонимах в нечетные элементы. Если дескриптор не имеет псевдонима, следующий за ним нечетный элемент содержит нули. Для хранения информации о псевдонимах доступны 7 бит нечетного "дескриптора", исключая бит AR. В полях базового адреса и предела можно указать начало и конец таблицы псевдонимов.

4. Можно организовать вторую, "теневую" дескрипторную таблицу. По структуре эта таблица аналогична таблице LDT задачи, но вместо дескрипторов она содержит информацию о псевдонимах. Такое представление информации позволяет легко определить, разделяется ли конкретный сегмент и с какими задачами.


 

А также другие работы, которые могут Вас заинтересовать

56006. At the Shopping Centre 137 KB
  It’s Saturday afternoon and Tina and Tim are shopping with their mother. They go to a big shopping centre. The shopping centre is a big building outside the town. It has got many different types of shops.
56007. SHOPPING 31.5 KB
  You task was to revise the new words and prepare some information about shopping in Great Britain, Ukraine and other counties. You were divided into some groups. So, please at first let’s remind our words, look and try to match.
56008. Shops and Shopping 500.5 KB
  Hello, girls and boys! Nice to meet you how are you feeling today? I hope you are fine and ready to work. Let’s start the class. Today’s lesson will be devoted to shops and shopping.
56009. SHOPS AND SHOPPING 46 KB
  Text, exercises are aimed at learning new vocabulary. Pupils are offered to complete the chart, find true or false sentences, give short answers, put questions to the statements, find the odd word, make up sentences with words, find and correct the mistakes.
56011. Шкідливі та корисні звички 664.49 KB
  Кожен із нас мріє прожити щасливе життя, мати міцне здоров’я, багато друзів, знаходити взаєморозуміння між членами родини і нашого суспільства, досягти успіху в роботі, навчанні. Але, на жаль, наші сподівання не завжди справджуються.
56012. Кохання та одруження 62.5 KB
  The topic of our lesson today is Love and Marriage. Let’s start our lesson from the small episode about a person who had all kinds of love in her life: people love, mother’s love, the love of the nation and who was a beloved woman.
56013. Запорізька Січ 70.5 KB
  Мета: з’ясувати становище Запорізької Січі у складі Гетьманщини ознайомити із життям та діяльністю І.Сірка та економічним розвитком Запорізької Січі ІІ половини XVII ст. Мета нашого уроку:з’ясувати становище Запорізької Січі у складі Гетьманщини ознайомитись з життям та діяльністю Івана Сірка та економічним розвитком Запорізької Січі цього періоду. Ми наближаємося до Запорізької Січі.