КУРСОВАЯ РАБОТА: Процессы и очереди 1. Цель работы

advertisement
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
КУРСОВАЯ РАБОТА: Процессы и очереди
1. Цель работы
Данная работа, являясь продолжением предыдущих работ, представляет
собой следующий шаг по созданию ядра ОС. Его цель - изучить приемы и
получить практические навыки по созданию и использованию очередей в
мультизадачной среде.
2. Общие сведения об организации очередей в ядре и общая постановка
задачи.
Параллельно выполняемые в многозадачной среде процедуры
называются процессами.
Поскольку процессор один, а процессов много, то появляется средство
упорядочивания доступа процессов к процессору, принимающее форму
очереди. Важнейшим видом очереди является очередь процессов, готовых к
выполнению. Для обеспечения возможности включения процесса в очереди
необходимо модифицировать дескриптор сопрограммы, реализующей процесс,
введя в него поле - указатель на следующей.
С учетом возможности динамического создания и уничтожения
представим процесс как объект следующего вида:
ПРОЦЕСС = ОБЪЕКТ
{ДАННЫЕ:} ЭЛЕМЕНТЫ ДЕСКРИПТОРА СОПРОГРАММЫ;
СЛЕДУЮЩИЙ;
АДРЕС_СТЕКА;
{МЕТОДЫ:} Procedure ИНИЦИАЛИЗИРОВАТЬ;
Procedure ОСВОБОДИТЬ_ПАМЯТЬ;
Procedure УСТАНОВИТЬ_СЛЕДУЮЩИЙ;
Function ПОЛУЧИТЬ_СЛЕДУЮЩИЙ;
КОНЕЦ;
Вторым
видом
объектов
многозадачной
ОЧЕРЕДЬ,представляемая следующим описанием:
ОЧЕРЕДЬ = ОБЪЕКТ
{ДАННЫЕ:} НАЧАЛО;
{МЕТОДЫ:} Procedure ИНИЦИАЛИЗИРОВАТЬ;
Procedure ОСВОБОДИТЬ_ПАМЯТЬ;
Procedure ВКЛЮЧИТЬ_ПРОЦЕСС;
Procedure ИСКЛЮЧИТЬ_ПРОЦЕСС;
Function ПОЛУЧИТЬ_НАЧАЛО;
КОНЕЦ;
среды
является
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
В базовом варианте данной работе рассматривается очередь готовых
процессов, которая может быть представлена как тип, производный от типа
ОЧЕРЕДЬ:
ОЧЕРЕДЬ_ГОТОВЫХ = ОБЪЕКТ(ОЧЕРЕДЬ)
{МЕТОДЫ:} Procedure ИНИЦИАЛИЗИРОВАТЬ;
Procedure ОСВОБОДИТЬ_ПАМЯТЬ;
Procedure ЗАПУСТИТЬ_ДИСПЕТЧЕР;
Procedure ОСТАНОВИТЬ_ДИСПЕТЧЕР;
Procedure ДОБАВИТЬ_НОВЫЙ_ПРОЦЕСС;
Procedure АКТИВИЗИРОВАТЬ_СЛЕДУЮЩИЙ;
КОНЕЦ;
В других вариантах наряду с очередью готовых должна присутствовать в
соответствии с вариантом задания дополнительно как минимум одна из
очередей блокированных процессов. Управление в этом случае требует
наличие простейшего планировщика.
В данной работе требуется дополнить объектом "Очередь"
программную модель, разработанную в двух лабораторных работах.
3. Варианты задания
Во всех заданиях (как минимум) должны быть организованы очереди
готовых к выполнению процессов. При наличии этой очереди в процедуре
ПЕРЕКЛЮЧЕНИЯ КОНТЕКСТОВ конкретные операции заменяются на
абстрактные операции с элементами очереди. При выполнении только одного
минимума
(варианты 1..3) максимальная оценка за курсовую работу- "хорошо".
При выборе остальных вариантов диапазон оценок увеличивается до "5".
Вариант 1
1. В соответствии со спецификацией п.4 реализовать на языке «С»
библиотечный модуль , обеспечивающий работу с очередью готовых
процессов, учитывая динамическое выделение памяти под процессы.
2. Составить пример, иллюстрирующий работу библиотечного модуля с
использованием языка С, обеспечивающий работу с очередью готовых
процессов, с учетом динамического выделения памяти под процессы.
1. В соответствии со спецификацией п.4 реализовать с использованием
языка Турбо Паскаль библиотечный модуль , обеспечивающий работу с
очередью готовых процессов с учетом динамического выделения памяти под
процессы.
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
2. Составить пример, иллюстрирующий работу библиотечного модуля.
с использованием языка Турбо Паскаль, обеспечивающий работу с
очередью готовых процессов, с учетом динамического выделения памяти под
процессы.
Вариант 3
--------1. В соответствии со спецификацией п.4 реализовать с использованием
ассемлера библиотечный модуль , обеспечивающий работу с очередью готовых
процессов, учитывая динамическое выделение памяти под процессы.
2. Составить пример, иллюстрирующий работу библиотечного модуля с
использованием языка Турбо Паскаль, обеспечивающий работу с очередью
готовых процессов, с учетом динамического выделения памяти под процессы.
Вариант 4
--------В дополнение к первому варианту на том же языке программирования
создать очередь задержанных процессов и возвращать их в очередь готовых,
используя введение в обработчик прерывания дополнительной операции.
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
Вариант 5
--------В дополнение ко второму варианту на том же языке программирования
создать очередь задержанных процессов и возвращать их в очередь готовых,
используя введение в обработчик прерывания дополнительной операции.
Вариант 6
--------В дополнение к третьему варианту на том же языке программирования
создать очередь задержанных процессов и возвращать их в очередь готовых,
используя введение в обработчик прерывания, дополнительной операции.
Вариант 7
--------В дополнение к первому варианту на том же языке программирования
создать очередь процессов, которая должна регулировать доступ к глобальному
большому массиву данных.
Вариант 8
--------В дополнение ко второму варианту на том же языке программирования
создать очередь процессов, которая должна регулировать доступ к глобальному
большому массиву данных.
Вариант 9
--------В дополнение к третьему варианту на том же языке программирования
создать очередь процессов, которая должна регулировать доступ к глобальному
большому массиву данных.
Вариант 10
--------В дополнение к первому варианту на том же языке программирования
для вывода на экран относительно большой графической информации
создать очередь процессов , которая должна регулировать доступ к видео
памяти.
Вариант 11
--------В дополнение ко второму варианту на том же языке программирования
для вывода на экран относительно большой графической информации создать
очередь процессов , которая должна регулировать доступ к видео памяти.
Вариант 12
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
--------В дополнение к третьему варианту на том же языке программирования
для вывода на экран относительно большой графической информации
создать очередь процессов, которая должна регулировать доступ к видео
памяти.
Отчет должен содержать тексты программ библиотечного модуля и
примера.
Вариант 13
--------В дополнение к первому варианту на том же языке программирования
для вывода на экран относительно большой текстовой информации создать
очередь процессов , которая должна регулировать доступ к видео памяти.
Вариант 14
--------В дополнение ко второму варианту на том же языке программирования
для вывода на экран относительно большой текстовой информации создать
очередь процессов , которая должна регулировать доступ к видео памяти.
Вариант 15
--------В дополнение к третьему варианту на том же языке программирования
для вывода на экран относительно большой текстовой информации создать
очередь процессов , которая должна регулировать доступ к видео памяти.
Вариант 16
--------В дополнение к первому варианту на том же языке программирования
создать очередь завершаемых процессов и удалять их в обработчике
прерываний.
Вариант 17
--------В дополнение ко второму варианту на том же языке программирования
создать очередь завершаемых процессов и удалять их в обработчике прерываний.
Вариант 18
--------В дополнение к третьему варианту на том же языке программирования
создать очередь завершаемых процессов и удалять их в обработчике прерываний.
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА должна содержать:
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
*введение;
*постановку задачи и ее анализ;
*подробное описание кокцепции или краткое описание
алгоритма;
* выводы;
*текст программы(в приложении).
4. Технология реализации процессов и очереди готовых процессов
Технология реализации процессов и очереди готовых процессов
представлена в виде словесного описания библиотечного модуля, являющегося
дальнейшим развитием модуля Disp лабораторной работы 2.
Unit DispObj;
Interface
Type
ПРОЦЕСС = ОБЪЕКТ
ЭЛЕМЕНТЫ ДЕСКРИПТОРА СОПРОГРАММЫ;
СЛЕДУЮЩИЙ;
АДРЕС_СТЕКА;
Procedure ИНИЦИАЛИЗИРОВАТЬ;
Procedure ОСВОБОДИТЬ_ПАМЯТЬ;
Procedure УСТАНОВИТЬ_СЛЕДУЮЩИЙ;
Function ПОЛУЧИТЬ_СЛЕДУЮЩИЙ;
КОНЕЦ;
ОЧЕРЕДЬ = ОБЪЕКТ
НАЧАЛО;
Procedure ИНИЦИАЛИЗИРОВАТЬ;
Procedure ОСВОБОДИТЬ_ПАМЯТЬ;
Procedure ВКЛЮЧИТЬ_ПРОЦЕСС;
Procedure ИСКЛЮЧИТЬ_ПРОЦЕСС;
Function ПОЛУЧИТЬ_НАЧАЛО;
КОНЕЦ;
ОЧЕРЕДЬ_ГОТОВЫХ = ОБЪЕКТ(ОЧЕРЕДЬ)
Procedure ИНИЦИАЛИЗИРОВАТЬ;
Procedure ОСВОБОДИТЬ_ПАМЯТЬ;
Procedure ЗАПУСТИТЬ_ДИСПЕТЧЕР;
Procedure ОСТАНОВИТЬ_ДИСПЕТЧЕР;
Procedure ДОБАВИТЬ_НОВЫЙ_ПРОЦЕСС;
Procedure АКТИВИЗИРОВАТЬ_СЛЕДУЮЩИЙ;
КОНЕЦ;
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
Var
ListReady : ОЧЕРЕДЬ_ГОТОВЫХ; {экземпляр типа}
Implementation
{Следующие 6 процедур не отнесены к объектам}
{-----------------------------------------------------------------------}
Procedure ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
Assembler;
Asm
...
End;
{-----------------------------------------------------------------------}
Procedure РАЗРЕШИТЬ_ПРЕРЫВАНИЯ;
Assembler;
Asm
...
End;
{-----------------------------------------------------------------------}
Procedure СОЗДАТЬ_СОПРОГРАММУ;
Begin
...
End;
{-----------------------------------------------------------------------}
Procedure ПЕРЕДАТЬ_УПРАВЛЕНИЕ;
Assembler;
Asm
...
End;
{-----------------------------------------------------------------------}
Procedure Handler;
interrupt;
Begin
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
ListReady.АКТИВИЗИРОВАТЬ_СЛЕДУЮЩИЙ;
End;
{-----------------------------------------------------------------------}
Procedure Idler; {всегда в очереди готовых}
Begin
...
End;
{-- МЕТОДЫ ОБЪЕКТА ПРОЦЕСС -------------------------------------}
Procedure ПРОЦЕСС.ИНИЦИАЛИЗИРОВАТЬ;
Begin
СОЗДАТЬ_СОПРОГРАММУ;
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
ЗАПОЛНИТЬ ПОЛЕ АДРЕС_СТЕКА;
End;
{-----------------------------------------------------------------------}
Procedure ПРОЦЕСС.ОСВОБОДИТЬ_ПАМЯТЬ;
Begin
ОСВОДИТЬ ПАМЯТЬ, ЗАНЯТУЮ ПОД СТЕК;
End;
{-----------------------------------------------------------------------}
Procedure ПРОЦЕСС.УСТАНОВИТЬ_СЛЕДУЮЩИЙ;
Begin
СЛЕДУЮЩИЙ := ... ;
End;
{-----------------------------------------------------------------------}
Function ПРОЦЕСС.ПОЛУЧИТЬ_СЛЕДУЮЩИЙ;
Begin
ПОЛУЧИТЬ_СЛЕДУЮЩИЙ := СЛЕДУЮЩИЙ;
End;
{--- МЕТОДЫ ОБЪЕКТА ОЧЕРЕДЬ --------------------------------------}
Procedure ОЧЕРЕДЬ.ИНИЦИАЛИЗИРОВАТЬ;
Begin
НАЧАЛО := NIL;
End;
{-----------------------------------------------------------------------}
Procedure ОЧЕРЕДЬ.ОСВОБОДИТЬ_ПАМЯТЬ;
Begin
{Цикл по всем процессам очереди}
ПРОЦЕСС.ОСВОБОДИТЬ_ПАМЯТЬ;
End;
{-----------------------------------------------------------------------}
Procedure ОЧЕРЕДЬ.ВКЛЮЧИТЬ_ПРОЦЕСС;
Begin
...
End;
{-----------------------------------------------------------------------}
Procedure ОЧЕРЕДЬ.ИСКЛЮЧИТЬ_ПРОЦЕСС;
Begin
...
End;
{-----------------------------------------------------------------------}
Function ОЧЕРЕДЬ.ПОЛУЧИТЬ_НАЧАЛО;
Begin
ПОЛУЧИТЬ_НАЧАЛО := НАЧАЛО;
End;
{---МЕТОДЫ ОБЪЕКТА ОЧЕРЕДЬ_ГОТОВЫХ-------------------------------------}
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
Procedure ОЧЕРЕДЬ_ГОТОВЫХ.ИНИЦИАЛИЗИРОВАТЬ;
Begin
ОЧЕРЕДЬ.ИНИЦИАЛИЗИРОВАТЬ;
End;
{-----------------------------------------------------------------------}
Procedure ОЧЕРЕДЬ_ГОТОВЫХ.ОСВОБОДИТЬ_ПАМЯТЬ;
Begin
ОЧЕРЕДЬ.ОСВОБОДИТЬ_ПАМЯТЬ;
End;
{-----------------------------------------------------------------------}
Procedure ОЧЕРЕДЬ_ГОТОВЫХ.ЗАПУСТИТЬ_ДИСПЕТЧЕР;
Begin
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
ПЕРЕУСТАНОВИТЬ_ВЕКТОР_ПРЕРЫВАНИЯ_ОТ_ТАЙМЕРА;
УСТАНОВИТЬ_НА_ВЕКТОР_8_ПРОЦЕДУРУ_Handler;
ПОЛУЧИТЬ_НАЧАЛО;
ИСКЛЮЧИТЬ_ПРОЦЕСС;
ПЕРЕДАТЬ_УПРАВЛЕНИЕ;
End;
{-----------------------------------------------------------------------}
Procedure ОЧЕРЕДЬ_ГОТОВЫХ.ОСТАНОВИТЬ_ДИСПЕТЧЕР;
Begin
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
ВОССТАНОВИТЬ_ВЕКТОР_ПРЕРЫВАНИЯ_ОТ_ТАЙМЕРА;
ПЕРЕДАТЬ_УПРАВЛЕНИЕ; {в главную программу}
End;
{-----------------------------------------------------------------------}
Procedure ОЧЕРЕДЬ_ГОТОВЫХ.ДОБАВИТЬ_НОВЫЙ_ПРОЦЕСС;
Begin
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
ПРОЦЕСС.ИНИЦИАЛИЗИРОВАТЬ;
ВКЛЮЧИТЬ_ПРОЦЕСС;
РАЗРЕШИТЬ_ПРЕРЫВАНИЯ;
End;
{-----------------------------------------------------------------------}
Procedure ОЧЕРЕДЬ_ГОТОВЫХ.АКТИВИЗИРОВАТЬ_СЛЕДУЮЩИЙ;
Begin
ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;
ВКЛЮЧИТЬ_ПРОЦЕСС; {текущий}
ПОЛУЧИТЬ_НАЧАЛО;
ИСКЛЮЧИТЬ_ПРОЦЕСС;
ПЕРЕДАТЬ_УПРАВЛЕНИЕ;
End;
{-----------------------------------------------------------------------}
Begin
СПбГУТ
каф. ЦВТИ ОС
Болтов Ю.Ф.
ListReady.ИНИЦИАЛИЗИРОВАТЬ;
ListReady.ДОБАВИТЬ_НОВЫЙ_ПРОЦЕСС; {Включение Idler}
End.
С учетом приведенного библиотечного модуля пользовательская
программа выглядит следующим образом:
Program User;
Uses Disp;
Type
...
Const
...
Var
...
{-----------------------------------------------------------------------}
Procedure User_1;
Begin
while true do begin
...
end;
End;
{-----------------------------------------------------------------------}
...
{-----------------------------------------------------------------------}
Procedure User_N;
Begin
while true do begin
...
if УСЛОВИЕ then then begin {завершение выполнения}
ListReady.ОСТАНОВИТЬ_ДИСПЕТЧЕР;
end;
end;
End;
{-----------------------------------------------------------------------}
Begin
ListReady.ДОБАВИТЬ_НОВЫЙ_ПРОЦЕСС; {Включение User_1}
...
ListReady.ДОБАВИТЬ_НОВЫЙ_ПРОЦЕСС; {Включение User_N}
ListReady.ЗАПУСТИТЬ_ДИСПЕТЧЕР;
End.
5. Контрольные вопросы
1. Роль очередей в организациии ядра.
СПбГУТ
каф. ЦВТИ ОС
2. Очередь "ГОТОВЫХ_ ПРОЦЕССОВ".
3. Очередь "БЛОКИРОВАННЫХ_ ПРОЦЕССОВ".
4. Очередь "ЗАДЕРЖАННЫХ_ ПРОЦЕССОВ".
5. Очередь "ЗАВЕРШАЕМЫХ_ ПРОЦЕССОВ".
6. ПРИМИТИВЫ сообщений.
7. Временная синхронизация при передаче сообщений.
8. "Почтовый ящик".
Болтов Ю.Ф.
Download