Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_лекции.doc
Скачиваний:
2
Добавлен:
15.04.2019
Размер:
370.69 Кб
Скачать

Вызов процедур и задач

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

Прямой вызов подпроцедур

Вызов процедур осуществляется с помощью оператора JMP(формат: кор??? Указатель) Call(селектор, смещение) (рис)

БА + смещение = физический адрес точки входа

Доступ разрешается: C=0, CPL=DPL; C=1, CPL>=DPL

Для вызова привилегированных процедур ОС из пользовательских задач используется косвенный вызов процедур. При косвенном вызове процедур также используются операторы JMP или Call, но селектор в том операторе ссылается уже не на дескриптор кодового сегмента, а на специальный дескриптор кодового сегмента – шлюз(вентиль). (рис)

Шлюз имеет следующий формат: (рис)

При косвенном вызове процедуры селектор JMP или Call ссылается на шлюз. Шлюз содержит селектор смещение (32 р), где находится процедура, от начала кодового сегмента до точки входа в вызываемую процедуру. Он содержит стандартный байт в процедуре ??? и счетчик слов, который задает количество слов, которые нужно скопировать из стека пользователя в стек вызываемой процедуры. Косвенный вызов процедур используется для вызова процедур ОС, работающих на высоком уровне привилегий. При косвенном вызове процедур смещение будет ???, оно берется из шлюза.

Выполняются следующие операции: CPL<=DPL

Доступ определяется DPL шлюза.

Вызов задач (многозадачность)

Начиная с 386 м/п Intel поддерживает встроенные средства многозадачности. К ним относятся: специальная структура данных TSS, сегмент состояния задачи и управляющий регистр м/п, TR – регистр задач.

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

TSS всех выполняемых в системе процессов связаны в цепочку. TSS имеет следующую структуру: (рис)

Сегмент состояния задачи занимает 64Кб, младшие 26 слов имеют следующее предназначение: ???. В старших областях хранятся параметры ОС и базовая карта ввода-вывода процессора (БКВВ). В БКВВ хранится информация о всех операциях ввода-вывода процесса и их состояний. Вся информация, хранящаяся в TSS, подразделяется на статическую и динамическую. Статическая информация не меняется в процессе выполнения процесса, динамическая меняется (все регистры процессора).

Если в операторах JMP ил Call встречается прямая или на косвенная ссылка на TSS, то м/п по-другому интерпретирует выполнение этих команд. Он выполняет следующие действия:

  1. выполнение текущего процесса приостанавливается

  2. содержимое регистров м/п сохраняется в TSS на который указывает регистр задачи (TR)

  3. содержимое регистра задачи запоминается

  4. в регистр задачи записывается селектор TSS, на который прямо или косвенно ссылается JMP или Call

  5. из этого нового TSS восстанавливаются все регистры м/п и восстанавливается новый каталог страницы CR3 и новый LDT

  6. в новый TSS по 0му адресу записывается сохраненный селектор предыдущей TSS, т о производится связка TSS в цепочку

  7. управление передается по адресу: ??? CS:EIP, те начинает или продолжает выполняться новый процесс

прямая ссылка на TSS (рис)

косвенная ссылка (рис)

Селектор JMP или Call ссылается на шлюз, который ссылается на TSS. Т о происходит смена адресного пространства.