Лабораторная работа №1 по О-средам / ОС1
.DOC
Санкт-Петербургский Государственный Электротехнический Университет
Кафедра: АСОИУ
Лабораторная работа №1 по курсу
«Операционные среды АСОИУ»
«Изучение алгоритмов реализации и использования сопрограмм»
Преподаватель:
Широков Владимир Владимирович
Выполнили:
Студенты гр.9331
Захаров Илья
Мазманов Денис
Степуленок Денис
Студентка гр.9332
Воронкина Ирина
Санкт-Петербург 2003
Цель работы - ознакомление с алгоритмами реализации сопрограмм и способами их использования для организации многозадачности.
Общие сведения
Сопрограммы - это средство передачи управления из одной процедуры в другую без отношения вложенности. Выполняемой процедуре нет необходимости возвращаться в вызвавшую ее процедуру. Традиционные операторы ВЫЗОВ и ВОЗВРАТ в случае сопрограмм заменяются одним оператором - ПЕРЕДАТЬ_УПРАВЛЕНИЕ. Сопрограммы обладают следующими свойствами:
1) позволяют имитировать параллельность с помощью явных передач управления;
2) являются средством реализации многозадачного режима.
Реализация сопрограмм основана на выделении собственного стека для каждой из процедур. Тогда оператор ПЕРЕДАТЬ_УПРАВЛЕНИЕ по существу выполняет операцию замены стека приостанавливаемой сопрограммы на стек возобновляемой сопрограммы.
Работа процедур в качестве сопрограмм требует предварительной подготовки, состоящей в выделении стека каждой из процедур и записи в стек точки входа в процедуру. Текущее состояние стека каждой из сопрограмм хранится в структуре, называемой ДЕСКРИПТОР_СОПРОГРАММЫ. Поэтому сопрограммы представляются своими дескрипторами.
Технология реализации и работы сопрограмм
Поскольку работа со стеком требует доступа непосредственно к регистрам SS и SP, оператор ПЕРЕДАТЬ_УПРАВЛЕНИЕ может быть реализован только средствами языка ассемблера.
Оформление ассемблерной процедуры в среде Pascal:
Procedure Name_Proc(Параметры-значения; Параметры-переменные);
Assembler; {обязательный атрибут}
Asm {обязательный атрибут}
...
End;
Запись в адресуемую ячейку памяти производится оператором
MemW[Seg:Ofs] := ... .
Технология реализации сопрограмм представлена в форме описания последовательностей действий, производимых при создании сопрограммы и при передаче управления от одной сопрограммы к другой.
Procedure СОЗДАТЬ_СОПРОГРАММУ;
Begin
ВЫДЕЛИТЬ ПАМЯТЬ ПОД СТЕК;
ВЫДЕЛИТЬ ПАМЯТЬ ПОД ДЕСКРИПТОР;
ВЫЧИСЛИТЬ АДРЕС "ДНА" СТЕКА И ЗАПИСАТЬ ЕГО В ДЕСКРИПТОР;
ПО АДРЕСУ "ДНА" СТЕКА ЗАПИСАТЬ ТОЧКУ ВХОДА В ПРОЦЕДУРУ;
End;
Procedure ПЕРЕДАТЬ_УПРАВЛЕНИЕ; Assembler;
Asm
СЧИТАТЬ АДРЕС ДЕСКРИПТОРА ПРИОСТАНАВЛИВАЕМОЙ СОПРОГРАММЫ;
ЗАПИСАТЬ В ЭТОТ ДЕСКРИПТОР СОСТОЯНИЕ СТЕКА;
СЧИТАТЬ АДРЕС ДЕСКРИПТОРА ВОЗОБНОВЛЯЕМОЙ СОПРОГРАММЫ;
ВОССТАНОВИТЬ СОСТОЯНИЕ СТЕКА ИЗ ЭТОГО ДЕСКРИПТОРА;
End;
Технология работы сопрограмм представлена в форме "заготовки" программы:
Program Cor;
Procedure СОЗДАТЬ_СОПРОГРАММУ;
Begin
...
End;
Procedure ПЕРЕДАТЬ_УПРАВЛЕНИЕ; Assembler;
Asm
...
End;
Procedure User_1;
Begin
while true do begin
...
ПЕРЕДАТЬ_УПРАВЛЕНИЕ; {в другую сопрограмму}
end;
End;
...
Procedure User_N;
Begin
while true do begin
...
if УСЛОВИЕ then {завершение выполнения}
ПЕРЕДАТЬ_УПРАВЛЕНИЕ {в главную программу}
else
ПЕРЕДАТЬ_УПРАВЛЕНИЕ; {в другую сопрограмму}
end;
End;
Begin
СОЗДАТЬ_СОПРОГРАММУ; {User_1}
...
СОЗДАТЬ_СОПРОГРАММУ; {User_N}
ПЕРЕДАТЬ_УПРАВЛЕНИЕ; {в одну из сопрограмм}
End.
Содержание задания
1. Реализовать процедуры СОЗДАТЬ_СОПРОГРАММУ и ПЕРЕДАТЬ_УПРАВЛЕНИЕ по их спецификациям, представленным выше.
2. Реализовать программу Cor, заменив словесные описания действий операторами языка Pascal.
3. Нарисовать состояния стека сопрограммы при создании, приостановке и возобновлении.
4. В разрабатываемой демонстрационной программе организовать динамическое выделение и освобождение памяти под дескрипторы и стеки сопрограмм.
5. Реализовать сопрограммы, представив их в виде объектов, включающих следующие данные - адрес стека и значения регистров SS и SP, а также методы создания, уничтожения и передачи управления.
Отчет должен содержать тексты программ с комментариями и рисунки, отражающие состояния стеков сопрограмм.