Обработка прерываний. Часть 4.

Каждая задача в системе в текущий момент времени может находиться в одном из трех состояний:

  1. активная задача — задача, имеющая управление центральным процессором; число таких задач ограничивается числом центральных процессоров; в однопроцессорной системе активной задачей может быть только одна задача;
  2. задача в состоянии ожидания некоторого события, например завершения операции ввода-вывода или истечения временного интервала и т. д.;
  3. задача в состоянии готовности использовать центральный процессор в случае, когда процессор (все процессоры) занят выполнением более приоритетных задач.

В случае приоритетного принципа построения очереди задач функция диспетчера заключается в просмотре блоков ТСВ очереди начиная с наиболее приоритетного. При этом целью является поиск наиболее приоритетной задачи, которая находится в состоянии готовности использовать центральный, процессор. Эта задача становится активной.

При циклическом обслуживании задач управление передается следующей (по отношению к текущей) задаче, находящейся в состоянии готовности. При этом задача становится активной, как правило, на некоторый установленный для нее интервал времени. По истечении временного интервала управление получает диспетчер для выбора следующей задачи.

В случае приоритетного принципа построения очереди задач могут использоваться усовершенствованные алгоритмы диспетчирования, цель которых — максимально загрузить процессор. Это достигается путем сбора информации об использовании процессора и автоматического изменения приоритетов на основании собранной информации. Перераспределение приоритетов приводит к тому, что задачи с большими периодами ожидания (задачи с большим удельным весом операций ввода-вывода, диалоговые задачи и др.) получают высокий приоритет. И наоборот, задачи, интенсивно использующие процессор, получают низкий приоритет, с тем чтобы они не могли монополизировать процессор.

Так как многие процессы в мультипрограммной системе протекают асинхронно (например, выполнение задач, выполнение операций ввода-вывода, истечение заданных временных интервалов и т.д.), в системе должны быть средства для синхронизации таких процессов. Элементарным средством синхронизации является аппарат макрокоманд WAIT и POST, связываемых именем события, с которым они имеют дело. Макрокоманда WAIT определяет перевод задачи в состояние ожидания до завершения события, имя которого указано операндом. Макрокоманда POST определяет наступление события, имя которого указано операндом.

Предположим, что программа выдала запрос на ввод данных и не может дальше выполняться до получения запрошенных данных. В этой точке программы необходимо использовать макрокоманду WAIT, указав некоторое имя для события, которое определяет завершение операции ввода данных. Задача переводится в состояние ожидания. После завершения ввода супервизор ввода-вывода выдает макрокоманду POST с именем этого события. Задача переводится в состояние готовности и может выполняться дальше.

С помощью аппарата макрокоманд WAIT и POST можно реализовать более сложные алгоритмы синхронизации событий.

Завершение задачи осуществляется либо при выдаче макрокоманды DETACH, либо при завершении (аварийном или нормальном) задачи и всех ее подзадач. При завершении блок ТСВ выводится из очереди задач, а память, занятая задачей и блоком, освобождается.