Операционная система ОС РВ
Александр Савватеев
ОС РВ является наиболее развитой из операционных систем СМ ЭВМ, программно совместимых с вычислительными машинами PDP-11 фирмы DEC. Естественно, что и сама ОС РВ имеет американское происхождение; там она называется RSX-11.
ОС РВ представляет собой многозадачную многопользовательскую операционную систему, предназначенную как для разработки и эксплуатации научных, инженерных и экономических программных комплексов, так и для применения в автоматизированных системах управления технологическими процессами. Специально для целей управления существует сокращенный вариант системы, называемый МОС РВ, конкретные задачи для которого разрабатываются под управлением ОС РВ.
При богатстве возможностей ОС РВ отличается очень скромными по нынешним понятиям требованиями к ресурсам вычислительной машины. Для проведения генерации системы нужно примерно 15 Мб на дисках, а для повседневной работы после удаления файлов, необходимых для генерации, системе со всеми ее утилитами - не больше 2 Мб. Потребности в оперативной памяти еще скромнее: ОС РВ, включающая в себя все функциональные возможности, способна нормально работать в многозадачном многопользовательском режиме на ЭВМ со 128 Кб памяти, а объем, достаточный для МОС РВ в минимальной конфигурации без учета задач пользователя, составляет 16 Кб. Таким образом, затраты дисковой памяти сравнимы с полной системой MS DOS, а потребности в ОЗУ намного меньше, и это при том, что ОС РВ в отличие от MS DOS является полноценной многозадачной многопользовательской системой.
Еще одним положительным качеством ОС РВ является ее очень высокая стабильность в работе. Непривилегированный пользователь по определению не может вызвать сбой в работе системы или в работе других пользователей, а ошибок в самой системе практически нет. За несколько лет автор не наблюдал ни одного случая сбоя системы из-за действий рядового пользователя и видел всего несколько сбоев из-за неполадок аппаратуры, и это при том, что машина эксплуатировалась весьма интенсивно (до 16-18 ч в день) и часто решала весьма не стандартные задачи. До такой надежности далеко не только Windows (NT надежна только по сравнению с 95-й), но и Linux.
Наконец, ОС РВ - быстрая система, требующая небольших накладных расходов. В этом отношении для СМ ЭВМ существуют более эффективные системы, чем ОС РВ, но они значительно уступают ей в функциональных возможностях, а разница в накладных расходах между ними очень невелика.
Конечно, ОС РВ не лишена недостатков. Один из них и, вероятно, наиболее существенный - отсутствие "полноценной" виртуальной памяти, но это - следствие архитектурных ограничений, накладываемых процессорами СМ ЭВМ. Второй недостаток - слабо развитая файловая система (нет иерархических каталогов, ограничены длина имен файлов и используемый в них набор символов). Эту проблему, впрочем, можно было бы решить без каких-либо существенных затруднений, если бы сами СМ'ки не стали достоянием истории. Наконец, третий - это непереносимость системы на другие платформы; он является "платой" за очень высокую эффективность системы, написанной целиком на ассемблере.
Основные компоненты системы ОС РВ
ОС РВ состоит из весьма большого числа программ, составляющих единый комплекс. Основными из них являются:
- управляющая программа;
- загрузчик задач;
- драйверы внешних устройств;
- вспомогательные управляющие процессоры FOCACP и MTAACP;
- система управления файлами FCS;
- система управления данными СУД-2;
- программа связи с оператором MCR;
- процессор косвенных командных файлов ICP;
- системные библиотеки;
- транслятор с языка ассемблера, компоновщик и библиотекарь;
- утилиты для работы с дисками, лентами и файлами;
- средства генерации операционной системы.
Управляющая программа - это ядро операционной системы. Во время работы она постоянно присутствует в оперативной памяти. К основным функциям управляющей программы относятся распределение памяти и процессорного времени между задачами, обеспечение синхронизации задач, выполнение запросов на операции ввода-вывода, запуск и завершение задач и т. п. Запросы задач к управляющей программе называются директивами управляющей программы.
Загрузчик задач, как явствует из его названия, предназначен для загрузки задач с дисков в оперативную память. Он может быть частью управляющей программы или же быть отдельной задачей, постоянно находящейся в памяти. Последнее свойство бывает полезно из-за малого объема прямо адресуемой памяти (64 Кб), так как освободившееся в ядре пространство может быть использовано для других целей.
Функцией драйверов внешних устройств является выполнение запросов ввода-вывода, оформленных по общим для всех устройств правилам (с помощью директив управляющей программы QIO$ или QIOW$) на конкретных внешних устройствах. Драйверы, и только они, взаимодействуют непосредственно с аппаратурой внешних устройств. Например, при обращении к диску с помощью одной из директив задача указывает логический номер блока, т. е. номер относительно начала диска. Драйвер преобразует логический номер блока в номера цилиндра, дорожки и сектора на дорожке, после чего выдает контроллеру диска команду, выполняющую запрошенную функцию.
Драйверы внешних устройств могут быть частью управляющей программы (так называемые резидентные драйверы) либо загружаться в отдельную область памяти (загружаемые драйверы). Резидентные драйверы включаются в систему в процессе генерации, поэтому при возникновении потребности их изменения или удаления приходится выполнять повторную генерацию. Загружаемые драйверы могут заноситься в память и удаляться из нее в процессе работы системы, что облегчает модификацию имеющихся и добавление новых драйверов. Кроме того, загружаемые драйверы требуют намного меньшего объема адресного пространства управляющей программы, освобождая его для других нужд, хотя занимают в оперативной памяти места не меньше, чем резидентные драйверы.
Независимо от способа включения в систему драйверы внешних устройств выполняются как часть управляющей программы, а не как отдельные задачи.
Вспомогательные управляющие процессоры (ACP - auxiliary control processor) выполняют "высокоуровневые" функции ввода-вывода. Пользуясь современной терминологией, их можно назвать файловыми процессорами или загружаемыми файловыми системами, хотя их функции могут быть значительно шире.
FOCACP поддерживает файловую структуру ОС РВ на магнитных дисках. Он выполняет такие функции, как создание и удаление каталогов, создание, открытие, закрытие и удаление файлов, преобразование номеров блоков относительно начала файла (так называемых виртуальных номеров) в логические номера блоков относительно начала диска.
MTAACP поддерживает файловую структуру ОС РВ на магнитных лентах. Он открывает и закрывает ленточные файлы, обеспечивает правильное позиционирование ленты и т. п.
При необходимости можно написать дополнительные ACP, реализующие новые файловые системы или обеспечивающие какое-либо другое дополнительное обслуживание запросов ввода-вывода.
Система управления файлами FCS представляет собой библиотеку подпрограмм, предназначенных для манипуляций с файлами, их блоками и записями. Если говорить точно, FCS не является частью операционной системы, а включается в состав конкретных задач, использующих ее подпрограммы.
FCS для выполнения операций ввода-вывода использует директивы управляющих программ QIO$ и QIOW$, которые могут быть свободно использованы и без нее. Однако FCS обычно более удобна в работе, чем прямое взаимодействие с системой, драйвером устройства и ACP через директивы. Например, FCS позволяет манипулировать отдельными записями фиксированной или переменной длины, а директивы - только блоками, размер которых всегда составляет 512 байт.
Система управления данными СУД-2 расширяет возможности файловой системы по обработке файлов данных. Обычно она используется в программах экономического назначения, в частности, на КОБОЛе.
СУД-2 состоит из набора библиотек и утилит. Как и FCS, система управления данными не является частью системы. Используется она довольно редко, вероятно, потому, что СМ ЭВМ не очень часто служат для решения достаточно крупных экономических задач, где возможности FCS оказываются недостаточными и программисту приходится "изобретать" то, что имеется в СУД-2.
Программа связи с оператором MCR является стандартным системным интерпретатором командных строк (CLI - command line interpreter). Функция любого CLI - обеспечение взаимодействия пользователя с системой. В MS DOS в целом аналогичную функцию выполняла программа COMMAND.COM.
Часть команд, реализуемых MCR, относится к внутренним, т. е. выполняется в рамках задачи MCR. Другие команды являются внешними и выполняются отдельными задачами. В этом MCR также аналогичен программе COMMAND.COM.
С ОС РВ поставляется еще один интерпретатор командных строк, включаемый в систему по желанию пользователя в процессе генерации или после нее - диалоговый командный язык DCL. Широкого распространения он, однако, не получил.
Пользователь может создать свой собственный CLI и пользоваться им наряду с MCR.
Процессор косвенных командных файлов ICP предназначен для выполнения командных файлов, по назначению аналогичных .BAT-файлам системы MS DOS. Возможности языка командных файлов в ОС РВ, однако, намного больше, чем у пакетных файлов MS DOS. В частности, обеспечиваются функции диалога с пользователем, обработки числовых, логических и строковых величин, условных и безусловных переходов, ввода-вывода с текстовыми файлами и т. п. Фактически на языке командных файлов можно написать любую программу, принципиально возможную для интерпретатора, хотя он недостаточно удобен.
Командные файлы при необходимости могут быть собраны в библиотеки.
Системные библиотеки содержат готовые объектные модули и макроопределения для реализации часто используемых функций. Основной является системная макробиблиотека, содержащая макроопределения всех директив управляющей программы.
Транслятор с ассемблера, компоновщик и библиотекарь обеспечивают трансляцию программ с ассемблера в объектный код, создание загрузочных модулей, называемых образами задач или просто задачами, а также работу с библиотеками объектных модулей, макробиблиотеками и универсальными библиотеками. Эти три программы всегда входят в операционную систему, так как без них невозможна генерация системы.
Утилиты служат для создания, редактирования, копирования, переименования, удаления, сравнения файлов, работы с магнитными дисками и лентами и т. п. Важнейшими и наиболее часто используемыми из них являются: PIP - основная программа работы с файлами на дисках, BRU - программа для копирования файлов с дисков на ленты и наоборот и для выполнения других функций, EDT - текстовый редактор.
Средства генерации системы включают в себя исходные тексты управляющей программы, драйверов внешних устройств и некоторых модулей программы связи с оператором на языке ассемблера, библиотеки объектных модулей и макробиблиотеки, из которых создаются другие компоненты системы, и процедуры генерации системы.
Процедуры генерации представляют собой несколько командных файлов, вызывающих друг друга или запускаемых пользователем по мере необходимости. В процессе генерации пользователю задается множество вопросов о программах и возможностях, необходимых в данном варианте операционной системы, а также о конфигурации вычислительной машины, на которой система должна работать. В целом, однако, процедура генерации весьма проста, тем более что на большинство вопросов можно давать стандартные ответы.
Абсолютно необходимыми компонентами любого варианта ОС РВ являются только управляющая программа и соответствующие драйверы ввода-вывода. Если генерируется не МОС РВ, а полная ОС РВ, в нее также всегда будет включены загрузчик (либо в ядро, либо в виде отдельной задачи) и программа связи с оператором MCR.
Диспетчер памяти
Важнейшим фактором, влияющим на возможности ОС РВ, является наличие на вычислительной машине диспетчера памяти (ДП). Диспетчер памяти - дополнительное устройство, входящее в состав центрального процессора и обеспечивающее возможность организации виртуальной памяти. ЭВМ, не оборудованные ДП, не могут иметь больше 56 Кб оперативной памяти, а машины с ДП имеют обычно 248 Кб и больше.
Поддержка диспетчера памяти включается в операционную систему ОС РВ в процессе генерации. Если система сгенерирована в варианте без ДП, она будет работать и на машине, оборудованном диспетчером памяти, но использовать его не сможет. Система, сгенерированная с ДП, не может работать на машинах без диспетчера памяти.
Все возможности ОС РВ могут быть реализованы только в варианте с диспетчером памяти. Это связано как с ограничениями, накладываемыми малым объемом ОЗУ в системах без ДП, так и с принципиальной невозможностью защитить задачи пользователя и программы операционной системы друг от друга, так как механизм защиты памяти в процессорах, не оборудованных диспетчером памяти, отсутствует.
Многопользовательская защита
Многопользовательская защита позволяет защищать разных пользователей вычислительной машины, работающей под управлением ОС РВ, от взаимного влияния. Без такой защиты все пользователи равны между собой и, образно выражаясь, могут творить с системой и друг с другом все, что хотят.
В системе с многопользовательской защитой все пользователи делятся на две категории: привилегированные и непривилегированные. Привилегированный пользователь может в принципе сделать все, что угодно; его ошибки (или преднамеренные действия) могут привести к нарушению работы системы в целом, потере информации и т. п.
Непривилегированный пользователь не может нарушить работу других пользователей или самой ОС. Возможности порчи информации ограничены содержимым каталогов, к которым ему разрешен доступ. Ему недоступны некоторые команды MCR, влияющие на работоспособность системы или других пользователей.
Для идентификации пользователей в системе служит так называемый код идентификации пользователя UIC (user identification code). Он состоит из двух восьмеричных чисел, каждое из которых занимает один байт (диапазон восьмеричных значений от 0 до 377). Первое число называется кодом группы, второй - кодом члена группы. Почти во всех случаях UIC записывается в квадратных скобках. Например, UIC [1, 54] задает 548-го члена 1-й группы.
Все привилегированные пользователи относятся к группам от 0 до 7. Члены групп 10-377 являются непривилегированными пользователями.
Одновременно с системой могут работать несколько пользователей, имеющих один и тот же UIC. Возможности "вредительства" друг другу, однако, даже в таком случае будут ограничены, поскольку при организации защиты пользователей друг от друга система во многих (но не во всех) случаях использует не только UIC, но и номер терминала, за которым пользователь работает.
Выполнение задач под управлением ОС РВ
Чтобы задача могла выполняться, она, естественно, должна быть загружена в ОЗУ. В отличие от современных систем, поддерживающих виртуальную память, ОС РВ всегда загружает задачу в память полностью. Это вызвано особенностями архитектуры СМ ЭВМ, не позволяющей заносить в память только требуемые страницы.
Вся оперативная память делится на разделы. В зависимости от назначения можно отметить раздел управляющей программы, разделы драйверов внешних устройств и раздел регистров устройств, используемых самой системой, а также разделы, используемые задачами: общие разделы, разделы, управляемые пользователем, и разделы, управляемые системой.
Общие разделы содержат код или данные, доступные для обращения к ним нескольких задач сразу. Обычной практикой является создание резидентных библиотек объектных модулей. Все задачи, использующие модули, имеющиеся в таких библиотеках, могут работать с одной общей копией каждого модуля вместо того, чтобы включать копии модулей в свой собственный код. Однако если по каким-либо причинам общая библиотека не будет загружена в память или будет загружена по адресам, не совпадающим с первоначальными, задача, использующая эту библиотеку, не сможет быть запущена.
Разделы, управляемые пользователем, предназначены для выполнения задач. Они прямо или косвенно создаются и уничтожаются пользователем. В каждом разделе может решаться только одна задача, предназначенная для выполнения именно в этом разделе. Задача, построенная для другого раздела, выполнена быть не может, так как разделы имеют разные адреса.
Разделы, управляемые системой, могут использоваться только в системе с диспетчером памяти. ОС РВ при запуске задачи выделяет из такого раздела подраздел, предназначенный для выполнения данной задачи, а по ее завершении возвращает выделенную память. С помощью аппаратуры диспетчера памяти система обеспечивает правильность адресации задачи независимо от ее физического размещения в памяти. Таким образом, использование системно-управляемых разделов освобождает пользователя от необходимости заботиться о распределении памяти между задачами. Он может даже не подозревать о существовании разделов и об особенностях механизмов управления памятью в ОС РВ.
Чтобы обеспечить параллельное выполнение нескольких задач, использующих один и тот же раздел памяти, ОС РВ поддерживает выгрузку задач. При применении этого механизма задача через определенный интервал времени переписывается на диск, а на ее место загружается новая задача, которая, в свою очередь, переписывается на диск по истечении выделенного для нее времени работы, и т. д. Небольшие требования задач в ОС РВ к объему памяти позволяют производить выгрузку и повторную загрузку за весьма небольшое время. Конечно, выгрузка тех или иных задач может быть запрещена, что особенно важно для задач управления технологическими процессами.
В системно-управляемых разделах также возможна выгрузка, но по своему прямому назначению она используется редко, так как машины, оборудованные диспетчером памяти, содержат обычно достаточный объем ОЗУ для одновременного размещения нескольких задач. Основным назначением выгрузки в системно-управляемых разделах является уплотнение памяти, "дыры" в которой образуются каждый раз при завершении задачи.
Процессорное время между задачами распределяется по очереди с учетом их приоритетов. Никакая задача не может монополизировать процессор, "подвесив" тем самым остальные задачи. Для обеспечения равноправия между задачами с одинаковым приоритетом и для гарантии быстрой реакции высокоприоритетных задач на внешние события используются механизмы свопинга, круговой диспетчеризации и важных событий, которые здесь не рассматриваются. Свопинг и круговая диспетчеризация могут не включаться в систему при генерации, что позволяет сократить размер управляющей программы, но обычно является нежелательным. Переключение между задачами происходит весьма быстро, что обеспечивает отличное время реакции системы.
В системах с многопользовательской защитой задачи делятся на привилегированные и непривилегированные. Привилегированные задачи могут выполнять потенциально опасные действия, в частности переключаться в режим ядра и напрямую работать со структурами данных системы. Непривилегированные задачи лишены такой возможности, а поэтому не могут вызвать неполадки в работе системы.
Внешние устройства и файловая система на дисках
Все внешние устройства в ОС РВ имеют двухсимвольное имя и восьмеричный однобайтовый номер. Если номер не указывается, подразумевается номер 0. Имя и номер устройства не отделяются друг от друга, за последним символом следует двоеточие. Наиболее распространенными являются следующие имена устройств:
- DK: - кассетные магнитные диски емкостью около 2,5 Мб;
- DM: - кассетные магнитные диски емкостью 14 Мб;
- DP: - пакетные магнитные диски емкостью 29 Мб;
- MT: - магнитные ленты;
- LP: - печатающие устройства;
- TT: - терминалы;
- TI: - псевдоустройство - терминал данного пользователя. Для каждого пользователя система при обращении к устройству TI: переадресует ввод-вывод на соответствующий реальный терминал;
- NL: - пустое псевдоустройство, всегда успешно выполняющее операцию записи на него и выдающее признак "Конец файла" при попытке чтения (аналог устройства NUL в MS DOS).
На дисках ОС РВ создаются каталоги, которые нумеруются, как и UIC - двумя однобайтовыми восьмеричными цифрами. Иерархии каталогов не существует (она впервые появилась, вероятно, в UNIX). На диске всегда присутствует каталог [0, 0], в котором находятся файлы-каталоги с именами гггччч.DIR (ггг - три цифры группы, ччч - три цифры члена в группе) и другие файлы, описывающие файловую структуру данного диска.
На диске, содержащей операционную систему, присутствуют каталоги [1, 1], [1, 2] и [1, 50] или [1, 54]. Первый содержит системные библиотеки, второй - некоторые командные файлы (например, командный файл, выполняемый при загрузке ОС РВ, при регистрации пользователя в системе и при завершении работы пользователя). Третий каталог содержит файлы ядра системы и различных задач. В системе без ДП номер этого каталога [1, 50], в системе с ДП - [1, 54].
Спецификация файла состоит из имени, типа (расширения) и номера версии и имеет следующий формат:
имя.тип;версия
Имя каждого файла состоит из нескольких символов (от одного до девяти), входящих в код RADIX-50. К этим символам относятся большие латинские буквы, цифры и знак доллара (в RADIX-50 входят еще точка и пробел, но они в именах файлов использоваться не могут).
Тип содержит до трех символов в коде RADIX-50.
Версия является однобайтовым восьмеричным числом, нумерация версий начинается с единицы. При создании файла с именем и типом, совпадающим с уже существующим файлом, создаваемый файл будет иметь версию, на единицу большую, чем версия существующего файла. Этот механизм весьма удобен для сохранения копий файлов.
Наиболее распространены следующие типы файлов:
- .TSK - файл образа задачи (загрузочный модуль задачи);
- .OBJ - объектный модуль;
- .MAC - исходный текст программы на макроассемблере;
- .OLB - библиотека объектных модулей;
- .MLB - библиотека макроопределений;
- .CMD - косвенный командный файл.
Полная спецификация файла включает в себя спецификацию устройства, каталога и файла, например
DM2:[1,54]PIP.TSK;1
Заключение
Выше были в самых общих чертах рассмотрены основные особенности системы ОС РВ. Подробную информацию можно получить из документации, поставляемой вместе с системой. В настоящее время в электронном варианте имеется несколько книг, созданных на основе "фирменных" руководств, а именно:
- описание команд MCR и языка косвенных командных файлов;
- описание текстового редактора EDT;
- руководство системного программиста по разработке драйверов внешних устройств;
- описание утилиты управления магнитной лентой MAG.
В настоящий момент близится к завершению работа над описанием директив управляющей программы, а также ведется создание справочника по управляющим блокам операционной системы. В дальнейшем планируется дополнить уже существующие книги и подготовить новые: по системе управления файлами FCS, макроассемблеру, компоновщику, библиотекарю, утилитам.
Наконец, ОС РВ предоставляет уникальную возможность во всех подробностях разобраться с ее функционированием: анализ исходных текстов системы. Конечно, эта работа весьма сложная и кропотливая, но не сложнее, чем попытка разобраться в Linux (ясность программ на ассемблере СМ ЭВМ, пожалуй, не меньше, чем ясность модулей Linux на Си, особенно когда разработчики последней жертвовали ясностью в пользу эффективности). Кроме того, у разработчиков ОС РВ есть чему поучиться, ведь хотя эта система создавалась много лет назад, требования к базовым функциям ОС с того времени практически не изменились.