СПбГУТ каф. ЦВТИ ОС Болтов Ю.Ф. КУРСОВАЯ РАБОТА: Процессы и очереди 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. "Почтовый ящик". Болтов Ю.Ф.