Предмет: Теория операционных систем.
Курс: 2.
Университет: РТУ МИРЭА (Московский Институт Радиоэлектроники и Автоматики)
Факультет (институт): КБСП (Комплексной безопасности и специального приборостроения)
Первое задание
Запустите программу process-run.py со следующими флагами: -l 5:100,5:100.
Нарисуйте таблицу выполнения процесса, статистику и ответьте на вопрос: какой процент времени от работы программы использовался процессор? Почему?
Таблица выполнения процесса:
| Задание 1 | ||||
| cmd> | process-run.py -l 5:100,5:100 | |||
| Таблица выполнения процесса | ||||
| Time | PID:0 | PID:1 | CPU | Ios |
| 1 | RUN:cpu | READY | 1 | |
| 2 | RUN:cpu | READY | 1 | |
| 3 | RUN:cpu | READY | 1 | |
| 4 | RUN:cpu | READY | 1 | |
| 5 | RUN:cpu | READY | 1 | |
| 6 | DONE | RUN:cpu | 1 | |
| 7 | DONE | RUN:cpu | 1 | |
| 8 | DONE | RUN:cpu | 1 | |
| 9 | DONE | RUN:cpu | 1 | |
| 10 | DONE | RUN:cpu | 1 | |
| Статистика: | ||||
| Total Time: | 10 | |||
| CPU Busy: | 10 | 100,00% | ||
| IO Busy: | 0 | 0,00% |
Второе задание
Запустите программу process-run.py со следующими флагами: -l 4:100,1:0.
Эти флаги зададут 4 такта для одного процесса (полностью использующего CPU) и один такт для процесса, который вызовет I/O и подождет его завершения.
Нарисуйте таблицу выполнения процесса, статистику и ответьте на вопрос: сколько тактов займет завершение обоих процессов.
Таблица выполнения процесса:
| Задание 2 | ||||
| cmd> | process-run.py -l 4:100,1:0 | |||
| Таблица выполнения процесса | ||||
| Time | PID:0 | PID:1 | CPU | Ios |
| 1 | RUN:cpu | READY | 1 | |
| 2 | RUN:cpu | READY | 1 | |
| 3 | RUN:cpu | READY | 1 | |
| 4 | RUN:cpu | READY | 1 | |
| 5* | DONE | RUN:io | 1 | |
| 6 | DONE | WAITING | 1 | |
| 7 | DONE | WAITING | 1 | |
| 8 | DONE | WAITING | 1 | |
| 9 | DONE | WAITING | 1 | |
| 10* | DONE | DONE | ||
| Статистика: | ||||
| Total Time: | 10 | |||
| CPU Busy: | 5 | 50,00% | ||
| IO Busy: | 4 | 40,00% |
Третье задание
Поменяйте порядок параметров для ключа -l (-l 1:0,4:100) и запустите программу.
Нарисуйте таблицу выполнения процесса, статистику и ответьте на вопрос: повлиял ли порядок запуска процессов на количество тактов? Почему?
Таблица выполнения процесса:
| Задание 3 | ||||
| cmd> | process-run.py -l 1:0,4:100 | |||
| Таблица выполнения процесса | ||||
| Time | PID:0 | PID:1 | CPU | Ios |
| 1 | RUN:io | READY | 1 | |
| 2 | WAITING | RUN:cpu | 1 | 1 |
| 3 | WAITING | RUN:cpu | 1 | 1 |
| 4 | WAITING | RUN:cpu | 1 | 1 |
| 5 | WAITING | RUN:cpu | 1 | 1 |
| 6* | DONE | DONE | ||
| Статистика: | ||||
| Total Time: | 6 | |||
| CPU Busy: | 5 | 83,33% | ||
| IO Busy: | 4 | 66,67% |
Четвертое задание
Поэкспериментируйте с флагом -S.
Этот флаг определяет реакцию системы в момент вызова I/O. С флагом, выставленным в значение SWITCH_ON_END система не будет переключаться на другой процесс пока первый не закончит с I/O.
Запустите программу с ключами 1:0,4:100 -S SWITCH_ON_END.
Нарисуйте таблицу выполнения процесса, статистику и ответьте на вопрос: Как изменится картина по сравнению с предыдущими запусками?
Таблица выполнения процесса:
| Задание 4 | |||||
| cmd> | process-run.py -l 1:0,4:100 -S SWITCH_ON_END | ||||
| Таблица выполнения процесса | |||||
| Time | PID:0 | PID:1 | CPU | Ios | |
| 1 | RUN:io | READY | 1 | ||
| 2 | WAITING | READY | 1 | ||
| 3 | WAITING | READY | 1 | ||
| 4 | WAITING | READY | 1 | ||
| 5 | WAITING | READY | 1 | ||
| 6 | DONE | RUN:cpu | 1 | ||
| 7 | DONE | RUN:cpu | 1 | ||
| 8 | DONE | RUN:cpu | 1 | ||
| 9 | DONE | RUN:cpu | 1 | ||
| Статистика: | |||||
| Total Time: | 9 | ||||
| CPU Busy: | 5 | 55,56% | |||
| IO Busy: | 4 | 44,44% |
Пятое задание
Запустите программу, но на этот раз поменяйте поведение планировщика так, чтобы он переключался на другой процесс, пока первый ожидает I/O.
Запустите программу с ключами -l 1:0,4:100 -S SWITCH_ON_IO.
Нарисуйте таблицу выполнения процесса, статистику и ответьте на вопрос: Как поведет себя программа в этом случае?
Таблица выполнения процесса:
| Задание 5 | ||||
| cmd> | process-run.py -l 1:0,4:100 -S SWITCH_ON_IO | |||
| Таблица выполнения процесса | ||||
| Time | PID:0 | PID:1 | CPU | Ios |
| 1 | RUN:io | READY | 1 | |
| 2 | WAITING | RUN:cpu | 1 | 1 |
| 3 | WAITING | RUN:cpu | 1 | 1 |
| 4 | WAITING | RUN:cpu | 1 | 1 |
| 5 | WAITING | RUN:cpu | 1 | 1 |
| 6* | DONE | DONE | ||
| Статистика: | ||||
| Total Time: | 6 | |||
| CPU Busy: | 5 | 83,33% | ||
| IO Busy: | 4 | 66,67% |
Шестое задание
Одно из немаловажных поведений — принятие решение о том, что делать после того как процесс I/O завершится.
С ключом -I IO_RUN_LATER после завершения I/O процесс, который вызвал I/O не обязательно продолжит свою работу, напротив, процесс который утилизировал CPU в данный момент продолжит его использование. А затем следующие ожидающие процессы.
Запустите программу с ключами -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_LATER.
Нарисуйте таблицу выполнения процесса, статистику и ответьте на вопрос: Эффективно ли используются ресурсы? Почему?
Таблица выполнения процесса:
| Задание 6 | ||||||
| cmd> | process-run.py -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_LATER | |||||
| Таблица выполнения процесса | ||||||
| Time | PID:0 | PID:1 | PID:2 | PID:3 | CPU | Ios |
| 1 | RUN:io | READY | READY | READY | 1 | |
| 2 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 3 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 4 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 5 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 6 | READY | RUN:cpu | READY | READY | 1 | |
| 7 | READY | DONE | RUN:cpu | READY | 1 | |
| 8 | READY | DONE | RUN:cpu | READY | 1 | |
| 9 | READY | DONE | RUN:cpu | READY | 1 | |
| 10 | READY | DONE | RUN:cpu | READY | 1 | |
| 11 | READY | DONE | RUN:cpu | READY | 1 | |
| 12 | READY | DONE | DONE | RUN:cpu | 1 | |
| 13 | READY | DONE | DONE | RUN:cpu | 1 | |
| 14 | READY | DONE | DONE | RUN:cpu | 1 | |
| 15 | READY | DONE | DONE | RUN:cpu | 1 | |
| 16 | READY | DONE | DONE | RUN:cpu | 1 | |
| 17 | RUN:io | DONE | DONE | DONE | 1 | |
| 18 | WAITING | DONE | DONE | DONE | 1 | |
| 19 | WAITING | DONE | DONE | DONE | 1 | |
| 20 | WAITING | DONE | DONE | DONE | 1 | |
| 21 | WAITING | DONE | DONE | DONE | 1 | |
| 22 | RUN:io | DONE | DONE | DONE | 1 | |
| 23 | WAITING | DONE | DONE | DONE | 1 | |
| 24 | WAITING | DONE | DONE | DONE | 1 | |
| 25 | WAITING | DONE | DONE | DONE | 1 | |
| 26 | WAITING | DONE | DONE | DONE | 1 | |
| 27 | DONE | DONE | DONE | DONE | ||
| Статистика: | ||||||
| Total Time: | 27 | |||||
| CPU Busy: | 18 | 66,67% | ||||
| IO Busy: | 12 | 44,44% |
Седьмое задание
Запустите программу с ключами -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_IMMEDIATE.
Нарисуйте таблицу выполнения процесса, статистику и ответьте на вопрос: Эффективно ли используются ресурсы? Как изменилось поведение планировщика? Почему передача управления процессу, только что завершившему процесс I/O может быть хорошей идеей?
Таблица выполнения процесса:
| Задание 7 | ||||||
| cmd> | process-run.py -l 3:0,5:100,5:100,5:100 -S SWITCH_ON_IO -I IO_RUN_IMMEDIATE | |||||
| Таблица выполнения процесса | ||||||
| Time | PID:0 | PID:1 | PID:2 | PID:3 | CPU | Ios |
| 1 | RUN:io | READY | READY | READY | 1 | |
| 2 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 3 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 4 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 5 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 6 | RUN:io | READY | READY | READY | 1 | |
| 7 | WAITING | RUN:cpu | READY | READY | 1 | 1 |
| 8 | WAITING | DONE | RUN:cpu | READY | 1 | 1 |
| 9 | WAITING | DONE | RUN:cpu | READY | 1 | 1 |
| 10 | WAITING | DONE | RUN:cpu | READY | 1 | 1 |
| 11 | RUN:io | DONE | READY | READY | 1 | |
| 12 | WAITING | DONE | RUN:cpu | READY | 1 | 1 |
| 13 | WAITING | DONE | RUN:cpu | READY | 1 | 1 |
| 14 | WAITING | DONE | DONE | RUN:cpu | 1 | 1 |
| 15 | WAITING | DONE | DONE | RUN:cpu | 1 | 1 |
| 16 | DONE | DONE | DONE | RUN:cpu | 1 | |
| 17 | DONE | DONE | DONE | RUN:cpu | 1 | |
| 18 | DONE | DONE | DONE | RUN:cpu | 1 | |
| Статистика: | ||||||
| Total Time: | 18 | |||||
| CPU Busy: | 18 | 100,00% | ||||
| IO Busy: | 12 | 66,67% |
- Эффективно ли используются ресурсы?
A: Гораздо эффективнее, чем в задании номер 6. - Как изменилось поведение планировщика?
A: Теперь такты используемые на ожидание IO используются еще и для
обработки других процессов. - Почему передача управления процессу, только что завершившему процесс
I/O может быть хорошей идеей?
A: Тактов на обработку симуляции потрачено меньше, чем в задании номер 6.
Соответственно, времени затрачено меньше.