Многотерминальная дисковая операционная система. Часть 4.

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

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

Система имеет развитые средства обработки прерываний. Пользователь может задать программу обработки внутренних прерываний (SST — синхронных) и программу завершения, следующую за диспетчерским событием (AST — асинхронным по отношению к выполняемой программе). К внутренним прерываниям, которым можно задать программу-обработчик, относятся прерывания:

  • по несуществующему (резервному) коду операций и ошибочному адресу в команде;
  • процессора плавающей точки (только в ЭВМ «Электроника 79» и «Электроника 60-1»);
  • по командам TRAP, ВРТ, ЕМТ.

Программы SST обрабатывают некоторые особые ситуации, возникшие в выполняемой программе. По характеру выполнения они подобны подпрограммам. Передача управления им обязательна, так как вызывается логикой самой программы; они, как правило, могут быть прерваны при возникновении внешних прерываний. Выполнение же программы завершения зависит от того, что выполняет процессор в момент прерывания и в каком состоянии находится задача, к которой относится программа завершения (т. е. в которой она описана). Если в момент передачи ей управления процессор выполняет другую программу завершения, то новая программа устанавливается в очередь. Таким образом, в системе не разрешено вложенное выполнение программ завершения. Если процессор занимается выполнением основной программы, то управление передается программе завершения всегда, кроме одного случая — когда относящаяся к ней задача находится в состоянии «свернута». В этом случае выполнение программы завершения откладывается до момента развертывания соответствующей задачи, т. е. до перевода ее в состояние «готовность». Само по себе выполнение программы завершения не приводит к изменению состояния относящейся к ней задачи, если в программе завершения нет программных запросов на такое изменение. В программах завершения, как и в ФОДОС, могут использоваться программные запросы.

МДОС позволяет задать программу обработки прерываний на физическом уровне, т. е. привязать программу к конкретному вектору прерывания. Как и в ФОДОС, имеются три уровня, на котором может выполняться программа обработки:

  • уровень прерывания, когда приоритет процессора маскирует прерывания от устройств с тем же или более низким приоритетом по сравнению с тем, прерывание от которого обрабатывается;
  • FORK-уровень, когда приоритет процессора равен нулю, но обработчик выполняется раньше основной программы и программ завершения;
  • AST-уровень — уровень программ завершения.

Переход на FORK-уровень осуществляется вызовом специальной подпрограммы ядра или автоматически через 500 мкс; на этом уровне программа может использовать операции над семафорами. Переход на AST-уровень осуществляется по завершении программы FORK-уровня; адрес AST-программы задается отдельно. На этом уровне программные запросы могут использоваться без ограничений.

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

Для внутренней синхронизации используется по 8 последних семафоров каждого типа. Над семафорами определены операции объявления, установки и проверки, очистки и проверки, чтения, ожидания. Так как операции являются неразделяемыми, то совместное использование операций очистки и ожидания соответствует операции, чтение является дополнительной операцией. Семафоры могут быть «привязаны» либо к внутренним событиям процесса (задачи), тогда они управляются с помощью явного использования указанных операций, либо к диспетчерским событиям, тогда р- и v-операции над ними ядро выполняет самостоятельно (т. е. имеет место неявное использование операций над семафорами).

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