Лабораторная работа №2 по О-Средам / ОС2
.DOC
Санкт-Петербургский Государственный Электротехнический Университет
Кафедра: АСОИУ
Лабораторная работа №2 по курсу
«Операционные среды АСОИУ»
«Исследование принципов диспетчеризации процессов»
Преподаватель:
Широков Владимир Владимирович
Выполнили:
Студенты гр.9331
Захаров Илья
Мазманов Денис
Степуленок Денис
Студентка гр.9332
Воронкина Ирина
Санкт-Петербург 2003
Цель работы - ознакомление с принципами реализации алгоритмов диспетчеризации процессов в многозадачных средах.
Общие сведения
Реализация псевдопараллельного режима с помощью явного включения в пользовательские процессы оператора ПЕРЕДАТЬ_УПРАВЛЕНИЕ обладает недостатками:
1) Пользовательские процессы включают в себя действия, которые по существу не относятся к их функциям.
2) Интервалы процессорного времени, предоставляемые процессам, зависят от самих процессов, и есть опасность захвата процессора на длительный срок одним процессом.
Поэтому в многозадачных системах используется принудительная передача управления. Моменты принудительной передачи управления определяются прерываниями от таймера. Такой способ передачи управления называется диспетчеризацией.
Работает многозадачная система с принудительной диспетчеризацией следующим образом.
Выполнение текущей сопрограммы приостанавливается прерыванием от таймера. Управление передается программе-обработчику прерывания. Обработчик выполняет действия по выбору следующей сопрограммы и передает ей управление оператором ПЕРЕДАТЬ_УПРАВЛЕНИЕ.
Таким образом, каждой сопрограмме выделяется квант времени для выполнения.
Сведения из языка Паскаль, используемые при реализации диспетчеризации
Установка вектора прерывания: SetIntVec(IntNo : byte; Vector : pointer) где IntNo - номер вектора прерывания; Vector - адрес процедуры-обработчика прерывания. Чтение вектора прерывания: GetIntVec(IntNo : byte; Var Vector : pointer) где IntNo - номер вектора прерывания; Vector - переменная, в которую пишется адрес процедуры-обработчика прерывания. Примечание: Номер вектора прерывания от таймера - 8; номера свободных векторов для переустановки системного обработчика прерываний от таймера: 60h-66h; 78h-7Fh. Структура процедуры-обработчика прерывания: Procedure Handler; interrupt; {обязательный атрибут} Begin ... End {Handler}.
Технология реализации диспетчеризации
Технология реализации диспетчеризации в среде Паскаль представлена "заготовкой" программы:
Program User_Disp;
Procedure ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ; Assembler;
Asm
...
End;
Procedure СОЗДАТЬ_СОПРОГРАММУ;
Begin
{Описана ранее}
End;
Procedure ПЕРЕДАТЬ_УПРАВЛЕНИЕ; Assembler;
Asm
{Описана ранее}
End;
Procedure Handler; interrupt;
Begin
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
{Выбрать следующую сопрограмму}
ПЕРЕДАТЬ_УПРАВЛЕНИЕ;
End;
Procedure User_1;
Begin
while true do begin
...
end;
End;
Procedure User_2;
Begin
while true do begin
...
if УСЛОВИЕ then begin {завершение выполнения}
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
ВОССТАНОВИТЬ_ВЕКТОР_ПРЕРЫВАНИЯ_ОТ_ТАЙМЕРА;
ПЕРЕДАТЬ_УПРАВЛЕНИЕ; {в главную программу}
end;
end;
End;
Begin
СОЗДАТЬ_СОПРОГРАММУ; {User_1}
СОЗДАТЬ_СОПРОГРАММУ; {User_2}
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
ПЕРЕУСТАНОВИТЬ_ВЕКТОР_ПРЕРЫВАНИЯ_ОТ_ТАЙМЕРА;
УСТАНОВИТЬ_НА_ВЕКТОР_8_ПРОЦЕДУРУ_Handler;
ПЕРЕДАТЬ_УПРАВЛЕНИЕ; {в User_i}
End.
Содержание задания
1. Реализовать программу, раскрыв все предложения операторами языка Паскаль. 2. Нарисовать состояния стека произвольной сопрограммы при приостановке ее прерыванием от таймера и возобновлении из обработчика прерываний. Отчет должен содержать текст программы с комментариями, а также рисунки, отражающие состояния стека сопрограмм при прерываниях.