Государственный комитет Российской Федерации по высшему образованию
Московский государственный институт электроники и математики
Кафедра систем автоматизации проектирования
Отчёт по лабораторным работам
“Реализация управления процессами и ресурсами многопрограммных операционных систем на уровне диспетчеризации”
по дисциплине
Исполнитель: студент Гамов А.В.
Руководитель: Витушкин П.И.
Отчёт по лабораторной работе 1
Осуществить формирование средств представления процессов и механизмов управления их состоянием на уровне диспетчеризации.
Необходимо разработать алгоритм и написать программу, имитирующую работу простейшей ОС (“система”) – которая должна выполнять следующие действия:
- формирование дескрипторов процессов, вводимых в “систему”.
- определение состояний, в котором находятся все известные “системе” процессы.
- Формирование и ведение списочных структур (“очередей”) дескрипторов на основании их состояний, приоритетов и используемой дисциплины диспетчеризации.
При формировании дескриптора необходимо осуществить ввод следующей информации:
- имя процесса (символьная строка, содержащая не более 8 символов).
- приоритет процесса (целое число в диапазоне 0-255).
- объём ОП (целое число в диапазоне 032767).
- перечень внешних и периферийных устройств [DISK0,DISK1,TAPE0,TAPE1,PRINT,PLTTR] (не более трех для каждого процесса)
- имя файла если выбрано внешнее устройство хранения данных (символьная строка, содержащая не более 8 символов).
Определить состояние поступивших процессов и переместить их в подходящий список и выполнить соответствующую принципу HPF=FCFS сортировку и перестановку состояний если активные (занявшие нужные процессы ресурсы) ниже по приоритету.
Разработать интерфейс программы.
Постановка задачи
Дано:
дескриптор – см. задание.
Требуется:
список1 или дескриптор1 – выполняемый процесс.
список2 – готовые процессы.
список3 – ожидающие процессы.
Интерфейс.
Структура программы
Назначение подпрограмм
Newproc – формирование дескриптора
Delproc – удаление дескриптора
EditProc – редактирование дескриптора.
ReRun – проверка на возможность запуска другого более приоритетного процесса.
Findplace – проверяет возможность перевести процессы из состояния ожидания в готовность или выполнение.
Sortproc – сортировка по HPF=FCFS.
Endproc – удаление выполняемого процесса (дескриптора).
Алгоритм модулей
Newproc, Endproc, Delproc, Editproc – описания не требуется ?).
Findplace:
{определение ресурсов выделенных }
цикл от j:=0 до ListView1.Count-1
если {все ресурсы доступны} то
ListView2.Add:=ListView1.Items.Item[j-k];
Inc(k);
всё
{sortproc – вызывается объектами TlistView автономно при каждом изменении}
к.ц.
ReRun:
если ListView3.Items.Item[0]=nil то
если {приоритет выполняемого меньше приоритета ListView2.Items.Item[0]} то
{ListView3.Items.Item[0] меняется местами с ListView2.Items.Item[0]}
всё
всё
Описание тестового примера
Так как в первой лабораторной не предволагается никаких дополнительных операции кроме запуска сортировки и завершения, то тест очень прост:
NewProc:\ ID:FF name:proces1 priority:0 mem:512 device1: () device2: () device3: ()
NewProc:\ ID:FF name:proces2 priority:0 mem:512 device1:PRINT() device2: () device3: ()
NewProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2: () device3: ()
StartEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2: () device3: ()
EndEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2:PLTTR() device3: ()
StartEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2:PLTTR() device3: ()
EndEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1: () device2:PLTTR() device3: ()
NewProc:\ ID:FE name:proces4 priority:1 mem:512 device1:PRINT() device2:PLTTR() device3: ()
DelProc:\ ID:FF name:proces2 priority:0 mem:512 device1:PRINT() device2: () device3: ()
DelProc:\ ID:FF name:proces3 priority:0 mem:512 device1: () device2:PLTTR() device3: ()
Тест показывает все доступные действия над дескрипторами кроме увеличения уменьшения приоритета, но при этом происходят те же действия так как модуль работает независимо от действий, а использует только значения дескрипторов для сортировки и проверок.
При освобождение ресурсов процессы переходят из состояния ожидания в состояние готовности.
При изменение приоритета происходит проверка на возможность перевода данного процесса в состояние выполнения.
Результаты тестового примера (протокол):
[LabOS]
autor_name=mad_daemon
autor_team=MadSOFT
autor_group=AP-31
lab_version=1.0.0.1
lab_type=module.OS
protocol_name=C:\MadSOFT\Lab.OS\Laba1\1.txt
protocol_date=10.09.02
protocol_time=20:19:12
[Protocol]
mess0=[10.09.02|20:19:26]NewProc:\ ID:FF name:proces1 priority:0 mem:512 device1: () device2: () device3: ()
mess1=[10.09.02|20:19:51]NewProc:\ ID:FF name:proces2 priority:0 mem:512 device1:PRINT() device2: () device3: ()
mess2=[10.09.02|20:20:07]NewProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2: () device3: ()
mess3=[10.09.02|20:20:11]StartEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2: () device3: ()
mess4=[10.09.02|20:20:32]EndEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2:PLTTR() device3: ()
mess5=[10.09.02|20:25:31]StartEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2:PLTTR() device3: ()
mess6=[10.09.02|20:25:33]EndEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1: () device2:PLTTR() device3: ()
mess7=[10.09.02|20:25:53]NewProc:\ ID:FE name:proces4 priority:1 mem:512 device1:PRINT() device2:PLTTR() device3: ()
mess8=[10.09.02|20:26:43]DelProc:\ ID:FF name:proces2 priority:0 mem:512 device1:PRINT() device2: () device3: ()
mess9=[10.09.02|20:26:46]DelProc:\ ID:FF name:proces3 priority:0 mem:512 device1: () device2:PLTTR() device3: ()
[Close]
process_run=2
process_count=4
process_edit=2
process_del=2
process_end=0
protocol_mess=10
protocol_date=10.09.02
protocol_time=20:27:03
Ответы на контрольные вопросы
I группа
1)Сформулировать определение состояния процесса?
Определение состояний процессов, поступивших на уровень диспетчеризации осуществляется путём анализа требуемых процессу ресурсов и свободных ресурсов.
Если все ресурсы для данного процесса не включая ЦП можно выделить, то он переводится в состояние готовности, а если и ЦП свободен то процесс переводится в состояние выполнения. Иначе в ожидание его.
2)Охарактеризуйте причины изменения состояния процессов в ВС?
- Поступление процесса с более высоким приоритетом, либо изменение приоритета.
- Освобождение ресурса.
- Запрос ресурса.
- Окончание (удаление) процесса.
- Истечение кванта.
3)Что является причиной изменения процесса в разработанной вами “системе”?
- Поступление процесса с более высоким приоритетом, либо изменение приоритета.
(Down,Up,Edit)
- Освобождение ресурса.
(Edit)
- Удаление (завершение выполняемого) процесса.
(Ydalit,EndProc)
Осуществить формирование средств представления процессов и механизмов управления их состоянием на уровне диспетчеризации.
Заменить принцип сортировки списков HPF=FCFS на HPF=SM=FCFS.
Создать “Изменение кванта”.
Доработать интерфейс программы.
Постановка задачи
Дано:
дескриптор – см. задание.
Требуется:
список1 или дескриптор1 – выполняемый процесс.
список2 – готовые процессы.
список3 – ожидающие процессы.
Интерфейс.
Структура программы
Назначение подпрограмм:
Newproc – формирование дескриптора
Delproc – удаление дескриптора
EditProc – редактирование дескриптора.
ReRun – проверка на возможность запуска другого более приоритетного процесса или с равным приоритетом.
Findplace – проверяет возможность перевести процессы из состояния ожидания в готовность или выполнение.
Sortproc – сортировка по HPF=FCFS.
Endproc – удаление выполняемого процесса (дескриптора).
!Timeproc – таймер
Алгоритм модулей
Newproc, Endproc, Delproc, Editproc – описания не требуется ?).
Findplace:
{определение ресурсов выделенных }
цикл от j:=0 до ListView1.Count-1
если {все ресурсы доступны} то
ListView2.Add:=ListView1.Items.Item[j-k];
Inc(k);
всё
{sortproc – вызывается объектами TlistView автономно при каждом изменении}
к.ц.
ReRun:
если ListView3.Items.Item[0]=nil то
если {абсолютный приоритет выполняемого меньше приоритета ListView2.Items.Item[0]} то
{ListView3.Items.Item[0] меняется местами с ListView2.Items.Item[0]}
всё
всё
так как сортировка производится методами винды и при этом обрабатываются
только строки из обного столбца, то добавлен столбец # в котором находится
HEX(255-приоритет)+HEX(память), что позволяет быстро сортировать
по принципу HPF=SM=FCFS.
Описание тестового примера
Так как в первой лабораторной не предволагается никаких дополнительных операции кроме запуска сортировки и завершения, то тест очень прост:
NewProc:\ ID:FF name:proces1 priority:0 mem:512 device1: () device2: () device3: ()
NewProc:\ ID:FF name:proces2 priority:0 mem:12 device1:PRINT() device2: () device3: ()
NewProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2: () device3: ()
StartEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2: () device3: ()
EndEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2:PLTTR() device3: ()
StartEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1:PRINT() device2:PLTTR() device3: ()
EndEditProc:\ ID:FF name:proces3 priority:0 mem:512 device1: () device2:PLTTR() device3: ()
NewProc:\ ID:FE name:proces4 priority:1 mem:512 device1:PRINT() device2:PLTTR() device3: ()
DelProc:\ ID:FF name:proces2 priority:0 mem:512 device1:PRINT() device2: () device3: ()
DelProc:\ ID:FF name:proces3 priority:0 mem:512 device1: () device2:PLTTR() device3: ()
Тест показывает все доступные действия над дескрипторами кроме увеличения уменьшения приоритета, но при этом происходят те же действия так как модуль работает независимо от действий, а использует только значения дескрипторов для сортировки и проверок.
При освобождение ресурсов процессы переходят из состояния ожидания в состояние готовности.
При изменение приоритета происходит проверка на возможность перевода данного процесса в состояние выполнения.
При нажатии на кнопку RunOS запускается таймер.
При нажатии на кнопку StopOS таймер останавливается.
Результаты тестового примера (протокол)
[LabOS]
autor_name=mad_daemon
autor_team=MadSOFT
autor_group=AP-31
lab_version=1.0.0.1
lab_type=module.OS
protocol_name=C:\MadSOFT\Lab.OS\Laba1\1.txt
protocol_date=10.09.02
protocol_time=20:19:12
[Protocol]
mess0=[10.09.02|20:19:26]NewProc:\ ID:FF name:proces1 priority:0 mem:512 device1: () device2: () device3: ()