Скачиваний:
41
Добавлен:
01.05.2014
Размер:
39.42 Кб
Скачать

Санкт-Петербургский Государственный Электротехнический Университет

Кафедра: АСОИУ

Лабораторная работа №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. Нарисовать состояния стека произвольной сопрограммы при приостановке ее прерыванием от таймера и возобновлении из обработчика прерываний. Отчет должен содержать текст программы с комментариями, а также рисунки, отражающие состояния стека сопрограмм при прерываниях.

4