Шлюзы вызова

Шлюзы вызова позволяют реализовать фактическое изменение уровня привилегий.

Шлюз вызова определяет точку входа программе.

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

Шлюзы вызова определяют разрешенные точки входа в более привилегированный код и являются единственным средством смены уровня привилегии.

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

Адресовать шлюз вызова можно только в команде межсегментного вызова far call, использование far jmp запрещено. Сама команда call должна адресовать шлюз вызова, а не сегмент кода назначения.

Реализованный в Intel процессорах косвенный вызов привилегированных процедур имеет несколько преимуществ:

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

2. Шлюзы вызова делают привилегированные процедуры невидимыми для программ на внешних уровнях привилегий.

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

Правила защиты при использовании шлюза вызова

1. ;

2. ;

3. .Это правило предотвращает передачу на более низкий уровень привилегий;

4. .

5.5.4 Поддержка многозадачности в процессорах
архитектуры IA-32

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

Для управления многозадачностью в процессоре нет специальных команд. Вместо этого в некоторых случаях по-другому интерпретируются команды межсегментной передачи управления. Переключение задачи может быть вызвано командами межсегментной передачи управления (far call и far jump). Помимо этого новая задача может активизироваться прерыванием или особым случаем. Когда реализуется одна из таких форм передачи управления, по типу адресуемого дескриптора процессор определяет что ему нужно сделать: выполнить обычную межсегментную передачу или переключить задачу.

Имеется два типа дескрипторов, относящихся к задачам:

1. Дескриптор сегмента состояния задачи.

2. Шлюз задачи.

При каждом переключении задачи процессор может перейти к другой локальной дескрипторной таблице.

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

Для поддержки многозадачности в процессоре имеются:

- регистр задачи;

- сегмент состояния задачи;

- дескриптор сегмента состояния задачи;

- дескриптор шлюза задачи.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: