Введение

Технологическая система (снята с производства)

Многопрограммная система RC 4000 (также называемая Monitor или RC 4000 в зависимости от источника) — это устаревшая операционная система, разработанная для миникомпьютера RC 4000 в 1969 году. Для ясности в данной статье преимущественно используется термин Monitor.

Обзор

Мультипрограммная система RC 4000 исторически примечательна тем, что стала первой попыткой разбить операционную систему на группу взаимодействующих программ, общающихся посредством ядра передачи сообщений. RC 4000 не получила широкого распространения, но оказала значительное влияние, породив концепцию микроядра, которая доминировала в исследованиях операционных систем в 1970-х и 1980-х годах. Монитор был создан в основном одним программистом, Пером Бринчем Хансеном, который работал в Regnecentralen, где разрабатывалась RC 4000. Лейф Свальгаард участвовал в реализации и тестировании Монитора. Бринч Хансен обнаружил, что ни одна существующая операционная система не подходит для новой машины, и устал от необходимости адаптировать существующие системы. Он считал, что более эффективным решением будет создание базового ядра, которое он называл ядром (nucleus), на основе которого можно было бы построить операционную систему из взаимодействующих программ. Например, Unix использует небольшие взаимодействующие программы для многих задач, передавая данные через систему, называемую конвейерами или каналами. Однако значительный объем фундаментального кода интегрирован в ядро, в частности, такие компоненты, как файловые системы и управление программами. Монитор также предполагал переместить этот код, сделав почти всю систему набором взаимодействующих программ и сведя ядро (nucleus) лишь к системе связи и поддержки. Монитор использовал систему общей памяти, подобную каналам, в качестве основы для межпроцессного взаимодействия (IPC). Данные, предназначенные для отправки из одного процесса в другой, копировались в пустой буфер памяти, а когда принимающая программа была готова, извлекались обратно. Затем буфер возвращался в пул. Программы имели очень простой интерфейс прикладного программирования (API) для передачи данных, использующий асинхронный набор из четырех методов. Клиентские приложения отправляли данные с помощью команды "отправить сообщение" и могли опционально блокироваться с помощью команды "ждать ответа". Серверы использовали зеркальный набор вызовов: "ждать сообщения" и "отправить ответ". Важно отметить, что сообщения имели неявный "обратный путь" для каждого отправленного сообщения, что делало семантику более похожей на вызов удаленной процедуры, чем на полностью основанную на вводе-выводе (I/O) систему Mach. Монитор разделял адресное пространство приложения на две части: внутренние процессы представляли собой выполнение традиционных программ, запускаемых по запросу, а внешние процессы фактически являлись драйверами устройств. Внешние процессы обрабатывались вне пользовательского пространства ядром, хотя их можно было запускать и останавливать как любую другую программу. Внутренние процессы запускались в контексте родительского процесса, который их запустил, поэтому каждый пользователь мог эффективно создавать свою собственную операционную систему, запуская и останавливая программы в своем собственном контексте. Планирование было полностью предоставлено на усмотрение программ, если оно вообще требовалось (в 1960-х годах многозадачность компьютера была функцией сомнительной ценности). Один пользователь мог начать сеанс в среде с вытесняющей многозадачностью, в то время как другой мог начать работу в однопользовательском режиме для пакетной обработки с более высокой скоростью. Планирование в реальном времени можно было поддерживать путем отправки сообщений в процесс-таймер, который возвращал управление только в нужный момент времени. Эти две области получили наибольшее развитие после выпуска Монитора, что побудило новые проекты использовать аппаратное обеспечение для поддержки обмена сообщениями и поддержку потоков в приложениях для сокращения времени запуска. Например, Mach требовал блока управления памятью для улучшения обмена сообщениями с помощью протокола копирования при записи и отображения (вместо копирования) данных от процесса к процессу. Mach также широко использовал потоки, позволяя внешним программам или серверам (в более современных терминах) легко запускать новые обработчики для входящих запросов. Тем не менее, IPC в Mach был слишком медленным, чтобы сделать подход микроядра практически полезным. Это изменилось только тогда, когда микроядро L4, разработанное Йохеном Лидтке, продемонстрировало снижение накладных расходов на IPC на порядок величины.