Главная Учебники - Разные Лекции (разные) - часть 33
Государственный комитет Российской Федерации по высшему образованию Московский государственный институт электроники и математики Кафедра систем автоматизации проектирования Отчёт по лабораторным работам “Реализация управления процессами и ресурсами многопрограммных операционных систем на уровне диспетчеризации”
по дисциплине Исполнитель: студент Гамов А.В. Руководитель: Витушкин П.И. Отчёт по лабораторной работе 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: () mess1=[10.09.02|20:19:51]NewProc:\\ ID:FF name:proces2 priority:0 mem:12 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=25 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 Ответы на контрольные вопросы
1)Для обработки пакетных данных потому - что схема одноочередной диспетчеризации для операции Истечение кванта происходит по принципу FCFS, то есть процесс который раньше попал в систему раньше получит ЦП, а если он ожидает ресурс, то он пропускает другие процессы с более малым требованием к времени получения ресурса. 2) Более быстрые переходы => большая эффективность, но при слишком малой размерности кванта времени будут тратиться большая часть работы ЦП на обработку списков процессов, а на не саму их работу => квант времени должен зависит от мощности ЦП. От длина кванта зависит переход от процесса к процессу => если какому либо процессу потребуется ресурс при выполнение, то он перейдёт в состояние ожидания операции ввода вывода, если же длина кванта больше то он и перейдёт позже => все программы работающие с ресурсами будут не только притормаживаться из-за времени операции ввода вывода, но и [времени поступления процесса в готовые] – [истечение кванта2-истечение кванта1] * [программы перед ним]. 3)Наиболее короткие процессы. 4) (-)Много время на обработку списка процессов. (+)Более быстрое выполнение коротих процессов. Отчёт по лабораторной работе 3
Изучение способов приоритетной диспетчеризации активных процессов и их программной реализации. Добавить изменение состояния процессов с меньшим приоритетом, если его ресурсы требуются процессу с большим приоритетом. Добавить приоритетную остановку. Доработать интерфейс программы. Постановка задачи
Дано: дескриптор – см. задание. Требуется: список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); иначе если {процессы которые используют требуемые ресурсы имеют меньший приоритет} то ListView2.Add:= ListView1.Items.Item[j-k]; ListView1.Add:={процессы занявшие ресурсы} 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. Добавления только в Findplace. Описание тестового примера
NewProc:\\ ID:FF0200 name:proces1 priority:0 mem:512 device1: () device2: () device3: () NewProc:\\ ID:FF01FF name:proces2 priority:0 mem:511 device1:PRINT() device2: () device3: () NewProc:\\ ID:FE03E8 name:proces3 priority:1 mem:1000 device1:PRINT() device2: () device3: () NewProc:\\ ID:FE03E8 name:proces4 priority:1 mem:1000 device1: () device2:PLTTR() device3: () DelProc:\\ ID:FE03E8 name:proces3 priority:1 mem:1000 device1:PRINT() device2: () device3: () NewProc:\\ ID:FD03E8 name:proces5 priority:2 mem:1000 device1:PRINT() device2:PLTTR() device3: () При освобождение ресурсов процессы переходят из состояния ожидания в состояние готовности. При изменение приоритета происходит проверка на возможность перевода данного процесса в состояние выполнения. При нехватке ресурсов проверяется возможность перевода процессов с более низким приоритетом в состояние ожидания. Результаты тестового примера (протокол)
[LabOS] autor_name=mad_daemon autor_team=MadSOFT autor_group=AP-31 autor_icq=1012023 autor_mail=mad_daemon@xakep.ru autor_oldurl=http://netstorm.nm.ru autor_tmpurl=http://saprophit.nm.ru lab_version=1.0.0.3 lab_type=module.OS protocol_name=C:\MadSOFT\Lab.OS\Laba3\3.txt protocol_date=10.09.02 protocol_time=23:39:48 [Protocol] mess0=[10.09.02|23:39:55]NewProc:\\ ID:FF0200 name:proces1 priority:0 mem:512 device1: () device2: () device3: () mess1=[10.09.02|23:40:03]NewProc:\\ ID:FF01FF name:proces2 priority:0 mem:511 device1:PRINT() device2: () device3: () mess2=[10.09.02|23:40:13]NewProc:\\ ID:FE03E8 name:proces3 priority:1 mem:1000 device1:PRINT() device2: () device3: () mess3=[10.09.02|23:40:29]NewProc:\\ ID:FE03E8 name:proces4 priority:1 mem:1000 device1: () device2:PLTTR() device3: () mess4=[10.09.02|23:40:37]DelProc:\\ ID:FE03E8 name:proces3 priority:1 mem:1000 device1:PRINT() device2: () device3: () mess5=[10.09.02|23:40:52]NewProc:\\ ID:FD03E8 name:proces5 priority:2 mem:1000 device1:PRINT() device2:PLTTR() device3: () [Close] process_run=5 process_count=5 process_edit=0 process_del=1 process_end=0 protocol_mess=6 protocol_date=10.09.02 protocol_time=23:40:56 Ответы на контрольные вопросы
1)При относительном приоритете самый последний поступивший всегда попадает в 1-ю очередь. При абсолютном если он выше выполняемого то он заканчивает выполняемый и становится на его место. 2) “Запуск” “Истечение кванта” “Изменение (Edit)” 3)Сложность реализации поиска изменения состояния менее приоритетных процессов занявших ресурсы. Изучение диспетчеризации процессов с учётом выполнения операций ввода вывода, алгоритмическая и программная реализация данной дисциплины диспетчеризации. Учитывать операции ввода вывода, поступаемые от выполняемого процесса. Доработать интерфейс программы. Постановка задачи
Дано: дескриптор – см. задание. Требуется: список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); иначе если {процессы которые используют требуемые ресурсы имеют меньший приоритет} то ListView2.Add:= ListView1.Items.Item[j-k]; ListView1.Add:={процессы занявшие ресурсы} Inc(k); всё всё {sortproc – вызывается объектами TlistView автономно при каждом изменении} к.ц. ReRun: если ListView3.Items.Item[0]=nil то если {абсолютный приоритет выполняемого меньше приоритета ListView2.Items.Item[0]} то {для ListView3.Items. Item[0] изменяется значение ввода вывода} {если оно становится равно нулю то все ресурсы у данного процесса убираются} { ListView3.Items. Item[0]меняется местами с ListView2.Items.Item[0]} всё всё так как сортировка производится методами винды и при этом обрабатываются только строки из обного столбца, то добавлен столбец # в котором находится HEX(255-приоритет)+HEX(память), что позволяет быстро сортировать по принципу HPF=SM=FCFS. Описание тестового примера
NewProc:\\ ID:FF0200 name:proces1 priority:0 mem:512 device1: () device2: () device3: ()inout:0 NewProc:\\ ID:FF01FF name:proces2 priority:0 mem:511 device1:PRINT() device2: () device3: ()inout:10 NewProc:\\ ID:FE03E8 name:proces3 priority:1 mem:1000 device1:PRINT() device2: () device3: ()inout:10 NewProc:\\ ID:FE03E8 name:proces4 priority:1 mem:1000 device1: () device2:PLTTR() device3: ()inout:10 DelProc:\\ ID:FE03E8 name:proces3 priority:1 mem:1000 device1:PRINT() device2: () device3: ()inout:10 NewProc:\\ ID:FD03E8 name:proces5 priority:2 mem:1000 device1:PRINT() device2:PLTTR() device3: ()inout:9 При освобождение ресурсов процессы переходят из состояния ожидания в состояние готовности. При изменение приоритета происходит проверка на возможность перевода данного процесса в состояние выполнения. При нехватке ресурсов проверяется возможность перевода процессов с более низким приоритетом в состояние ожидания. Операция ввода вывода происходит в момент истечения кванта. Операция запрос ресурсов ввода вывода в меню изменить. Для теста просто нужно запустить систему и ждать обнуления значения ввода вывода. Результаты тестового примера (протокол)
[LabOS] autor_name=mad_daemon autor_team=MadSOFT autor_group=AP-31 autor_icq=1012023 autor_mail=mad_daemon@xakep.ru autor_oldurl=http://netstorm.nm.ru autor_tmpurl=http://saprophit.nm.ru lab_version=1.0.0.3 lab_type=module.OS protocol_name=C:\MadSOFT\Lab.OS\Laba3\3.txt protocol_date=10.09.02 protocol_time=23:39:48 [Protocol] mess0=[10.09.02|23:39:55]NewProc:\\ ID:FF0200 name:proces1 priority:0 mem:512 device1: () device2: () device3: ()inout:0 mess1=[10.09.02|23:40:03]NewProc:\\ ID:FF01FF name:proces2 priority:0 mem:511 device1:PRINT() device2: () device3: ()inout:10 mess2=[10.09.02|23:40:13]NewProc:\\ ID:FE03E8 name:proces3 priority:1 mem:1000 device1:PRINT() device2: () device3: ()inout:10 mess3=[10.09.02|23:40:29]NewProc:\\ ID:FE03E8 name:proces4 priority:1 mem:1000 device1: () device2:PLTTR() device3: ()inout:10 mess4=[10.09.02|23:40:37]DelProc:\\ ID:FE03E8 name:proces3 priority:1 mem:1000 device1:PRINT() device2: () device3: ()inout:10 mess5=[10.09.02|23:40:52]NewProc:\\ ID:FD03E8 name:proces5 priority:2 mem:1000 device1:PRINT() device2:PLTTR() device3: ()inout:9 [Close] process_run=5 process_count=5 process_edit=0 process_del=1 process_end=0 protocol_mess=6 protocol_date=10.09.02 protocol_time=23:40:56 Ответы на контрольные вопросы
1)[DISK0,DISK1,TAPE0,TAPE1,PRINT,PLTTR]: харды, стриммеры, принтетр, плотер. 2) _rerun; и две рекурсивные функции проверки. 3)Если новый процесс запрашивает ресурс то он с начало находится в состояние ожидания и лишь после операции выделения ресурса переход в состояние готовый. 4)Если к процессу применить операцию выделить ресурс то он переходит в состояние ожидания (дальше п.3). 5)В первой лабе нет удаления использования ресурса в результате выполнения всех команд ввода вывода => есть только одна возможность изменить состояние ждущего процесса (выполнить операцию выделить процесс) это удалить (а у меня и изменить) процесс. 6)(+)то что следующий процесс может использовать занятые устройства.
|