К содержанию

Задание 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 зависит от процесса AB может начаться только после того, как A закончится
ID процессов, от которых зависит данный, через «;»процесс ждёт всех из списка — то есть последнего из них
значение 0процесс ни от кого не зависит и начинает сразу
независимые процессы могут выполняться параллельноодновременно может идти сколько угодно процессов
каждый процесс начинается в самое раннее допустимое времяникаких пауз: процесс стартует, как только готов последний из тех, кого он ждёт
нумерация миллисекунд начинается с 11-я мс — от момента 0 до момента 1; процесс с 6 до 8 идёт в 7-ю и 8-ю мс

Сначала разберёмся на восьми процессах, которые можно посчитать руками, потом перенесём расчёт в Excel и решим задачу из файла. Тема состоит из пяти подтем и дополнительного урока — у каждой своя страница. Идём по ним по порядку:

  1. Процессы и расписание — ты сейчас здесь: когда процесс начинается и заканчивается.
  2. Расписание в Excel — тот же расчёт формулами для таблицы из файла.
  3. Сколько процессов — вопросы о миллисекундах; решим задачу темы: ответ 3.
  4. Параллельность — сколько процессов идёт одновременно и как долго.
  5. Сдвиги процессов — задачи, где процесс можно запустить позже.
  6. Задержки и ограниченные ресурсы — дополнительный урок для редких задач.

Процесс и зависимость

Что значит, что один процесс зависит от другого?

Зависимый процесс ждёт, пока закончится тот, от кого он зависит. Независимые процессы идут одновременно. Процесс — это просто работа, которая длится несколько миллисекунд; что именно он делает, в задании неважно.

Пусть процесс 1 работает 4 мс, а процесс 2 — 6 мс и ждёт результата процесса 1. Тогда они идут друг за другом: 2 начинает в 4 и заканчивает в 4 + 6 = 10.

Процесс 2 ждёт процесс 1: сначала 1 занимает мс с 1-й по 4-ю, потом 2 — с 5-й по 10-ю. Всё готово к 10.

Если же 2 ни от кого не зависит, оба начинают сразу и идут одновременно. Тогда всё готово к 6 — к окончанию самого долгого:

Независимые процессы идут одновременно: всё готово к 6, а не к 4 + 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
140
260
331
421; 2
552
643; 4
724; 5
816; 7

Стрелки показывают, кто чей результат ждёт. Процессы разложены по столбцам — шагам расчёта: у каждого процесса все поставщики стоят левее, поэтому его можно считать, когда левые столбцы уже посчитаны.

Граф зависимостей: стрелка ведёт от поставщика к тому, кто его ждёт. В рамке — ID и время работы.

Пройди расчёт по шагам. Пунктир на кадре — момент, когда готов последний поставщик: с него процесс и начинает.

  1. Начинаем с пустой сетки: строка — процесс, столбец — миллисекунда.
  2. Процесс 1 ни от кого не зависит: начинает сразу, в 0, и заканчивает в 4. Занимает мс с 1-й по 4-ю.
  3. Процесс 2 ни от кого не зависит: начинает сразу, в 0, и заканчивает в 6. Занимает мс с 1-й по 6-ю.
  4. Процесс 3 ждёт процесс 1, а тот готов к 4. Окончание 4 + 3 = 7. Занимает мс с 5-й по 7-ю.
  5. Процесс 4 ждёт процессы 1 и 2: 1 готов к 4, 2 — к 6. Начинает по последнему — в 6. Окончание 6 + 2 = 8. Занимает 7-ю и 8-ю мс.
  6. Процесс 5 ждёт процесс 2, а тот готов к 6. Окончание 6 + 5 = 11. Занимает мс с 7-й по 11-ю.
  7. Процесс 6 ждёт процессы 3 и 4: 3 готов к 7, 4 — к 8. Начинает по последнему — в 8. Окончание 8 + 4 = 12. Занимает мс с 9-й по 12-ю.
  8. Процесс 7 ждёт процессы 4 и 5: 4 готов к 8, 5 — к 11. Начинает по последнему — в 11. Окончание 11 + 2 = 13. Занимает 12-ю и 13-ю мс.
  9. Процесс 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 мс. Её называют критической: сколько бы процессов ни шло одновременно, быстрее она не пройдёт.

Критическая цепочка 2 → 5 → 7 → 8 выделена: каждый её процесс начинает ровно тогда, когда закончился предыдущий.

Найти её легко с конца. Процесс 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-ю
  • Порядок расчётасначала поставщики, потом те, кто их ждёт
  • Общее времямаксимум всех окончаний
  • Критическая цепочкакаждый ждёт предыдущего; её длина — общее время

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1
Процесс начинается в момент 12 и работает 7 мс. Когда он закончится и какие миллисекунды займёт?
ОтветСкрыть ответ
Ответ
Закончится в 19 и займёт мс с 13-й по 19-ю.
Вопрос 2
Процессы A (5 мс) и B (9 мс) ни от кого не зависят. Процесс C ждёт оба и работает 3 мс. Когда начнётся и закончится C?
ОтветСкрыть ответ
Ответ
A готов к 5, B — к 9. C ждёт последнего: начало 9, окончание 9 + 3 = 12.
Вопрос 3
Почему в прошлой задаче начало C — не 5 + 9 = 14?
ОтветСкрыть ответ
Ответ
A и B шли одновременно, оба с момента 0. Пока B работал свои 9 мс, A успел закончить. Ждать нужно только последнего.
Вопрос 4
В учебном примере процесс 6 удлинили с 4 до 5 мс. Изменится ли общее время? А если до 6 мс?
ОтветСкрыть ответ
Ответ
До 5 мс — нет: 6 закончится в 13, как и 7, и процесс 8 всё равно начнёт в 13. До 6 мс — да: 6 закончится в 14, 8 — в 15.
Вопрос 5
Почему все восемь процессов нельзя закончить быстрее 14 мс, сколько бы процессов ни шло одновременно?
ОтветСкрыть ответ
Ответ
Цепочка 2 → 5 → 7 → 8 идёт строго по очереди: 6 + 5 + 2 + 1 = 14. Каждый её процесс ждёт предыдущего.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Два независимых процесса

Процессы A (5 мс) и B (9 мс) независимы и запускаются в момент 0. Когда будут готовы оба результата?

Введите число.

Процесс ждёт результат

Процесс B (9 мс) ждёт результат процесса A (5 мс), A запускается в 0. Когда закончится B?

Введите число.

Окончание процесса

Процесс начинается в момент 12 мс и работает 7 мс. Когда он закончится?

Введите число.

Начало процесса

Процесс закончился в момент 30 мс, а работал 8 мс. Когда он начался?

Введите число.

Процесс ждёт двух поставщиков

Процессы A и B запускаются в 0 и выполняются 8 и 5 мс. Процесс C ждёт оба результата и работает 3 мс. Когда закончится C?

Введите число.

Поставщик запускается позже

Процесс A сам работает 2 мс, но запускается в момент 10. Его получатель B работает 4 мс и запускается сразу после A. Когда закончится B?

Введите число.

В таблице три процесса: 1 — 5 мс, зависимостей нет; 2 — 3 мс, зависимостей нет; 3 — 4 мс, зависит от 1 и 2. За какое минимальное время завершатся все процессы?

Введите число.

Начало процесса 3 и общее время

Процессы: 1 — 4 мс, без поставщиков; 2 — 7 мс, без поставщиков; 3 — 2 мс, ждёт 1 и 2; 4 — 3 мс, ждёт 3. Найди начало процесса 3 и общее время.

Введите два числа через пробел в том порядке, в каком их спрашивают.

Перепутанные строки

Строки перепутаны: 20 — 3 мс, ждёт 10; 40 — 4 мс, ждёт 20; 10 — 5 мс, без поставщиков; 30 — 8 мс, без поставщиков; 50 — 2 мс, ждёт 30 и 40. Найди начало процесса 50 и общее время.

Введите два числа через пробел в том порядке, в каком их спрашивают.

Общее время системы из семи процессов

В таблице приведены данные о процессах: для каждого — 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; зависимый процесс запускается сразу после завершения всех процессов, от которых он зависит. Определите минимальное время (в мс), через которое завершится выполнение всей совокупности процессов.

Введите число.

Удлинение процессов 5 и 3

В учебном примере время работы процесса 5 увеличили с 5 до 6 мс. Каким станет общее время? А если вместо этого процесс 3 удлинить с 3 до 5 мс?

Введите два числа через пробел в том порядке, в каком их спрашивают.