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

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

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

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

Отчет должен содержать тексты программ с комментариями и рисунки, отражающие состояния стеков сопрограмм.

4