Предмет: Теория операционных систем.
Курс: 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.
Соответственно, времени затрачено меньше.