Задание 22
Многопроцессорные системы
Процессы и зависимости, расписание руками и в Excel через ВПР, процессы на n-й миллисекунде, сетка параллельности, сдвиги и поздние начала.
6 подтем · 40 задач + 7 дополнительных · повышенный · ≈ 7 мин
Подтема 1 из 6
Процессы и расписание
Что спрашивают в задании 22 и как найти, когда каждый процесс начнётся и закончится, если он ждёт результатов других.
Как устроена тема
В задании 22 дают таблицу процессов: сколько каждый работает и результатов каких других процессов он ждёт. Нужно понять, когда каждый из них начнётся и закончится, и ответить на вопрос о получившемся расписании. Вот задача, которую мы решим в этой теме:
«В файле 22-2.xlsx содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B зависит от процесса A, если для выполнения процесса B необходимы результаты выполнения процесса A. В этом случае процессы A и B могут выполняться только последовательно. Информация о процессах представлена в файле в виде таблицы. В первом столбце таблицы указан идентификатор процесса (ID), во втором столбце таблицы — время его выполнения в миллисекундах, в третьем столбце перечислены с разделителем «;» ID процессов, от которых зависит данный процесс. Если процесс независимый, то в таблице указано значение 0. Определите, сколько процессов выполнялось в течение 21-й миллисекунды, при условии, что все независимые друг от друга процессы могут выполняться параллельно. Считать, что каждый процесс начинается в самое раннее допустимое время. Нумерация миллисекунд начинается с 1.»
Главное в задании — правильно построить расписание; сам вопрос потом решается одной формулой. Разберём условие:
| В условии | Что это значит |
|---|---|
| процесс B зависит от процесса A | B может начаться только после того, как A закончится |
| ID процессов, от которых зависит данный, через «;» | процесс ждёт всех из списка — то есть последнего из них |
| значение 0 | процесс ни от кого не зависит и начинает сразу |
| независимые процессы могут выполняться параллельно | одновременно может идти сколько угодно процессов |
| каждый процесс начинается в самое раннее допустимое время | никаких пауз: процесс стартует, как только готов последний из тех, кого он ждёт |
| нумерация миллисекунд начинается с 1 | 1-я мс — от момента 0 до момента 1; процесс с 6 до 8 идёт в 7-ю и 8-ю мс |
Сначала разберёмся на восьми процессах, которые можно посчитать руками, потом перенесём расчёт в Excel и решим задачу из файла. Тема состоит из пяти подтем и дополнительного урока — у каждой своя страница. Идём по ним по порядку:
- Процессы и расписание — ты сейчас здесь: когда процесс начинается и заканчивается.
- Расписание в Excel — тот же расчёт формулами для таблицы из файла.
- Сколько процессов — вопросы о миллисекундах; решим задачу темы: ответ 3.
- Параллельность — сколько процессов идёт одновременно и как долго.
- Сдвиги процессов — задачи, где процесс можно запустить позже.
- Задержки и ограниченные ресурсы — дополнительный урок для редких задач.
Процесс и зависимость
Что значит, что один процесс зависит от другого?
Зависимый процесс ждёт, пока закончится тот, от кого он зависит. Независимые процессы идут одновременно. Процесс — это просто работа, которая длится несколько миллисекунд; что именно он делает, в задании неважно.
Пусть процесс 1 работает 4 мс, а процесс 2 — 6 мс и ждёт результата процесса 1. Тогда они идут друг за другом: 2 начинает в 4 и заканчивает в 4 + 6 = 10.
Если же 2 ни от кого не зависит, оба начинают сразу и идут одновременно. Тогда всё готово к 6 — к окончанию самого долгого:
Время на рисунках разбито на миллисекунды, как в задании: 1-я мс — от момента 0 до момента 1, 2-я — от 1 до 2. Справа у каждой строки — моменты начала и окончания.
Начало и окончание
Процесс ждёт двух других. Когда он начнёт?
Когда закончится последний из них: начало — самое позднее окончание тех, кого ждёшь. Окончание — начало плюс время работы.
Пусть процесс C ждёт A и B. A заканчивается в момент 5, B — в момент 12. В момент 5 результат A уже есть, а B ещё работает. Оба результата готовы только в 12 — значит, C начинает в 12. Если C работает 3 мс, он закончится в 12 + 3 = 15 и займёт 13-ю, 14-ю и 15-ю мс.
Складывать 5 и 12 нельзя: это моменты на общих часах, а не длительности. Пока B работал до 12, A тоже работал — одновременно с ним.
Тех, кого процесс ждёт, будем называть его поставщиками: они поставляют ему результаты. У процесса без поставщиков (в таблице — 0) начало 0.
Расписание по шагам
Как посчитать начала и окончания для всей таблицы?
По очереди, от независимых процессов к зависимым: процесс считаем, когда окончания всех его поставщиков уже известны. Возьмём восемь процессов — на них проверим каждый шаг темы:
| ID | Время, мс | Зависит от ID |
|---|---|---|
| 1 | 4 | 0 |
| 2 | 6 | 0 |
| 3 | 3 | 1 |
| 4 | 2 | 1; 2 |
| 5 | 5 | 2 |
| 6 | 4 | 3; 4 |
| 7 | 2 | 4; 5 |
| 8 | 1 | 6; 7 |
Стрелки показывают, кто чей результат ждёт. Процессы разложены по столбцам — шагам расчёта: у каждого процесса все поставщики стоят левее, поэтому его можно считать, когда левые столбцы уже посчитаны.
Пройди расчёт по шагам. Пунктир на кадре — момент, когда готов последний поставщик: с него процесс и начинает.
- Начинаем с пустой сетки: строка — процесс, столбец — миллисекунда.
- Процесс 1 ни от кого не зависит: начинает сразу, в 0, и заканчивает в 4. Занимает мс с 1-й по 4-ю.
- Процесс 2 ни от кого не зависит: начинает сразу, в 0, и заканчивает в 6. Занимает мс с 1-й по 6-ю.
- Процесс 3 ждёт процесс 1, а тот готов к 4. Окончание 4 + 3 = 7. Занимает мс с 5-й по 7-ю.
- Процесс 4 ждёт процессы 1 и 2: 1 готов к 4, 2 — к 6. Начинает по последнему — в 6. Окончание 6 + 2 = 8. Занимает 7-ю и 8-ю мс.
- Процесс 5 ждёт процесс 2, а тот готов к 6. Окончание 6 + 5 = 11. Занимает мс с 7-й по 11-ю.
- Процесс 6 ждёт процессы 3 и 4: 3 готов к 7, 4 — к 8. Начинает по последнему — в 8. Окончание 8 + 4 = 12. Занимает мс с 9-й по 12-ю.
- Процесс 7 ждёт процессы 4 и 5: 4 готов к 8, 5 — к 11. Начинает по последнему — в 11. Окончание 11 + 2 = 13. Занимает 12-ю и 13-ю мс.
- Процесс 8 ждёт процессы 6 и 7: 6 готов к 12, 7 — к 13. Начинает по последнему — в 13. Окончание 13 + 1 = 14. Занимает 14-ю мс. Все процессы закончились к 14 мс.
Все процессы закончились к 14 мс — это и есть минимальное время, за которое выполнится вся совокупность. Ищут его как наибольшее из всех окончаний: процесс с последним ID не обязательно заканчивается последним.
Критическая цепочка
Почему всё нельзя закончить быстрее 14 мс?
Есть цепочка, где каждый процесс ждёт предыдущего: 2 → 5 → 7 → 8. Она идёт строго по очереди, 6 + 5 + 2 + 1 = 14 мс. Её называют критической: сколько бы процессов ни шло одновременно, быстрее она не пройдёт.
Найти её легко с конца. Процесс 8 начался в 13 — по окончанию 7. Процесс 7 начался в 11 — по окончанию 5. Процесс 5 начался в 6 — по окончанию 2. Каждый раз берём того поставщика, который закончился последним.
Тонкости:что даёт ускорение процесса
Ускорять процесс вне критической цепочки бесполезно. Процесс 6 заканчивается в 12, а 8 всё равно ждёт 7 до 13. Его можно даже удлинить на 1 мс — он закончится в 13, и итог останется 14. А вот удлинение на 2 мс уже сдвинет конец: 6 закончится в 14, 8 — в 15.
Итого
- ЗависимостьB начинает только после окончания A
- Началосамое позднее окончание поставщиков; без них — 0
- Окончаниеначало + время работы
- Миллисекундыпроцесс с s до f занимает мс с (s + 1)-й по f-ю
- Порядок расчётасначала поставщики, потом те, кто их ждёт
- Общее времямаксимум всех окончаний
- Критическая цепочкакаждый ждёт предыдущего; её длина — общее время
Проверьте себя
Ответь сначала сам, потом открой ответ.
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Два независимых процесса
Процессы A (5 мс) и B (9 мс) независимы и запускаются в момент 0. Когда будут готовы оба результата?
Введите число.
Подсказка
Независимые процессы идут одновременно: всё готово к окончанию самого долгого.
Решение
9 мс: max(5; 9).
Ответ: 9
Процесс ждёт результат
Процесс B (9 мс) ждёт результат процесса A (5 мс), A запускается в 0. Когда закончится B?
Введите число.
Подсказка
B ждёт A: они идут друг за другом.
Решение
14 мс: 5 + 9.
Ответ: 14
Окончание процесса
Процесс начинается в момент 12 мс и работает 7 мс. Когда он закончится?
Введите число.
Подсказка
Окончание — начало плюс время работы.
Решение
19 мс: 12 + 7.
Ответ: 19
Начало процесса
Процесс закончился в момент 30 мс, а работал 8 мс. Когда он начался?
Введите число.
Подсказка
Начало — окончание минус время работы.
Решение
22 мс: 30 − 8.
Ответ: 22
Процесс ждёт двух поставщиков
Процессы A и B запускаются в 0 и выполняются 8 и 5 мс. Процесс C ждёт оба результата и работает 3 мс. Когда закончится C?
Введите число.
Подсказка
C начинает, когда готов последний из поставщиков.
Решение
11 мс: max(8; 5) + 3.
Ответ: 11
Поставщик запускается позже
Процесс A сам работает 2 мс, но запускается в момент 10. Его получатель B работает 4 мс и запускается сразу после A. Когда закончится B?
Введите число.
Подсказка
B ждёт окончания A — момента на общих часах, а не его времени работы.
Решение
16 мс: 10 + 2 + 4.
Ответ: 16
Три процесса
В таблице три процесса: 1 — 5 мс, зависимостей нет; 2 — 3 мс, зависимостей нет; 3 — 4 мс, зависит от 1 и 2. За какое минимальное время завершатся все процессы?
Введите число.
Подсказка
Процесс 3 ждёт последнего из своих поставщиков.
Решение
9 мс: процесс 3 ждёт до max(5; 3) = 5 и работает ещё 4.
Ответ: 9
Начало процесса 3 и общее время
Процессы: 1 — 4 мс, без поставщиков; 2 — 7 мс, без поставщиков; 3 — 2 мс, ждёт 1 и 2; 4 — 3 мс, ждёт 3. Найди начало процесса 3 и общее время.
Введите два числа через пробел в том порядке, в каком их спрашивают.
Подсказка
Сначала независимые процессы, потом те, кто их ждёт.
Решение
Начало процесса 3 — 7 мс, общее время 12 мс.
Ответ: 7 12
Перепутанные строки
Строки перепутаны: 20 — 3 мс, ждёт 10; 40 — 4 мс, ждёт 20; 10 — 5 мс, без поставщиков; 30 — 8 мс, без поставщиков; 50 — 2 мс, ждёт 30 и 40. Найди начало процесса 50 и общее время.
Введите два числа через пробел в том порядке, в каком их спрашивают.
Подсказка
Считай процесс, когда окончания его поставщиков уже известны, а не по порядку строк.
Решение
Начало процесса 50 — 12 мс, общее время 14 мс: 10 → 20 → 40 заканчивается в 12, процесс 30 — в 8.
Ответ: 12 14
Общее время системы из семи процессов
В таблице приведены данные о процессах: для каждого — ID, время выполнения и ID процессов, от которых он зависит. 1 — 3 мс, 0; 2 — 8 мс, 0; 3 — 2 мс, 1; 4 — 5 мс, 1; 3; 5 — 4 мс, 2; 4; 6 — 6 мс, 3; 7 — 1 мс, 5; 6. Процессы, не зависящие от других, начинаются в момент 0; зависимый процесс запускается сразу после завершения всех процессов, от которых он зависит. Определите минимальное время (в мс), через которое завершится выполнение всей совокупности процессов.
Введите число.
Подсказка
Построй начала и окончания всех семи процессов; ответ — наибольшее окончание.
Решение
15.
Ответ: 15
Удлинение процессов 5 и 3
В учебном примере время работы процесса 5 увеличили с 5 до 6 мс. Каким станет общее время? А если вместо этого процесс 3 удлинить с 3 до 5 мс?
Введите два числа через пробел в том порядке, в каком их спрашивают.
Подсказка
Влияет только удлинение процесса из критической цепочки 2 → 5 → 7 → 8.
Решение
15 мс: процесс 7 стартует в 12, процесс 8 — в 14; при удлинении процесса 3 итог остаётся 14: процесс 6 закончит в 13, как и процесс 7.
Ответ: 15 14