Базовые объекты ОС
Выбор основных объектов ОС во многом определяет успех разработки. Сосредоточение в ядре только программ управления базовыми объектами и реализация всей операционной системы и задач пользователей на единой технологии обеспечивают простоту создания системных и пользовательских подсистем, стройность архитектуры системы, легкость отладки, создают базу для расширения ОС и ее модернизации.
Выбирается такой подход, при котором индивидуальные объекты ОС или множества объектов размещаются в собственном адресном пространстве, в отдельной задаче.
Для этого подхода характерно наличие двух механизмов межпрограммного взаимодействия: один - для подпрограмм, выполняющихся в одном адресном пространстве, другой - для подпрограмм, выполняющихся в разных пространствах. Во втором случае параметры и результаты могут быть только значениями. Передача параметров-значений может трактоваться как передача сообщения от одной задачи к другой, а передача результата - как передача ответа. Эти передачи осуществляет ядро ОС, которому доступна вся память.
Таким образом, базовыми объектами ОС являются задачи и сообщения как средство взаимодействия между задачами.
Рассмотрим примитивы управления этими объектами.Примитивы реализуются ядром ОС.
Существуют следующие примитивы обмена сообщениями:
1. ПОСЛАТЬ СООБЩЕНИЕ СИНХРОННО (Nз,Nвх,СООБЩ,ОТВЕТ)
где Nз - уникальный идентификатор задачи-получателя сообщения, Nвх - идентификатор входа в задаче-получателе, СООБЩ - адрес сообщения и его длина, ОТВЕТ - адрес буфера, куда будет помещен ответ, и его длина.
2. ПОСЛАТЬ СООБЩЕНИЕ АСИНХРОННО (Nз,Nвх,СООБЩ,ОТВЕТ) <ИДС>
где Nз - уникальный идентификатор задачи-получателя сообщения, Nвх - идентификатор входа в задаче-получателе, СООБЩ - адрес сообщения и его длина, ОТВЕТ - адрес буфера, куда будет помещен ответ, и его длина. ИДС - идентификатор отправленного сообщения (выходной параметр).
3. ПРИНЯТЬ СООБЩЕНИЕ (Nв1,...,Nвn,СООБЩ) <ИДС,Nвi>
где Nв1,...,Nвn - список входов в задачу, по которым разрешен прием сообщений. СООБЩ - адрес буфера и его длина, куда будет помещено сообщение. ИДС - идентификатор принятого сообщения, Nвi - идентификатор входа, по которому было получено сообщение.
ИДС и Nвi - выходные параметры.
4. ПОСЛАТЬ ОТВЕТ (ИДС, ОТВЕТ)
где ИДС - идентификатор принятого сообщения, на который посылается ответ. ОТВЕТ - адрес и длина посылаемого ответа.
5. ЖДАТЬ ОТВЕТА (ИДС1,...,ИДСn) <ИДСi>
где ИДС1,...,ИДСn - список идентификаторов отправленных сообщений, по которым ожидаются ответы. ИДСi - идентификатор отправленного сообщения, на который получен ответ.
6. ЖДАТЬ ВРЕМЯ (Т)
где Т - интервал времени, истечения которого ожидает выдавшая примитив задача.
Кроме перечисленнных примитивов возможны примитивы, которые составляют комбинации примитивов 3, 5 и 6. Существует разновидность примитива 4 - ПОСЛАТЬ ОТРИЦАТЕЛЬНЫЙ ОТВЕТ - в результате выполнения которого будет сгенерирована исключительная ситуация в задаче-отправителе. Семантически примитивы 1-5 соответствуют конструкциям: вызов подпрограммы, вход в подпрограмму и возврат из нее.
Задача, давшая примитив ПОСЛАТЬ СООБЩЕНИЕ СИНХРОННО, откладывается до момента выдачи примитива ПОСЛАТЬ ОТВЕТ ее задачей-партнером и переписи ответа в буфер под ответ. Соответственно, задача, давшая примитив ПРИНЯТЬ СООБЩЕНИЕ, либо получает сообщение, если оно есть, либо откладывается до тех пор, пока от одного из ее партнеров не поступит примитив ПОСЛАТЬ СООБЩЕНИЕ и сообщение не перепишется в буфер. Задача, давшая примитив ПОСЛАТЬ СООБЩЕНИЕ АСИНХРОННО, будет продолжать свое выполнение до тех пор, пока не будет выдан явный примитив ожидания сообщения, ответа, времени либо их комбинации. Перепись сообщения из адресного пространства задачи - отправителя в адресное пространство задачи-получателя происходит без промежуточных системных буферов, поэтому для корректной работы повторно использовать память, в которой располагается сообщение, можно только после получения соответствующего ответа на данное сообщение.
Для задач ОС уникальные идентификаторы фиксированы. Для пользовательской задачи уникальный идентификатор вырабатывается при ее образовании и может быть известен другой задаче через посредство задачи ОС.
Уникальные идентификаторы отправленных и полученных сообщений вырабатываются при выполнении примитива ПОСЛАТЬ СООБЩЕНИЕ.
Существуют две основные категории задач: пользовательские и задачи ОС. Все задачи выполняются в непривилегированном режиме. Такая реализация задач ОС упрощает их отладку, обеспечивает раннюю диагностику ошибок системы и препятствует распространению этих ошибок.
Процессорный приоритет задач ОС выше приоритета любой пользовательской задачи. Уникальные идентификаторы закреплены за задачами ОС. Существует категория задач ОС, которая не использует векторные регистры.
Существует ряд программ ОС, для выполнения которых требуется привилегированный режим. К ним относятся программы управления оперативной памятью, массовой памятью, дисковой и т.д. Поэтому эти программы оформляются в виде "псевдозадач". Псевдозадачи имеют собственные уникальные идентификаторы, они взаимодействуют с другими задачами, используя примитивы обмена сообщениями, но в отличие от обычных задач выполняются в привилегированнном режиме, не имеют своего изолированного адресного пространства и виртуального комплекта основных и промежуточных регистров.
Категория псевдозадач позволяет разгрузить ядро от таких функций, как управления задачами, собственно обработка прерываний, управление оперативной памятью. Функциями ядра остаются только управление передачей сообщений, управление процессором, временем и дешифрация прерываний. Обработку прерываний выполняет соответствующая псевдозадача.
Контроль в операционной системе от несанкционированного обращения децентрализован и основан на закреплении постоянных уникальных идентификаторов за системными задачами. Это дает возможность не контролировать обращения на наиболее часто
используемых трактах: задача пользователя - задача ОС, и позволяет самим системным задачам решать, кто имеет право к ним обращаться. Так, например, псевдозадача управления оперативной памятью разрешает обрашаться с командами запроса и возврата памяти только Инициатору-Терминатору, а с командами запроса и возврата буферов-только псевдозадаче обмена с внешней памятью.
Таким образом, операционная система состоит из ядра, псевдозадач и задач. Каждая из задач выполняется в изолированном адресном пространстве. Взаимодействие и синхронизация взаимодействия задач (включая псевдозадачи) осуществляется средствами обмена сообщениями. Программы ОС размещаются и в адресном пространстве пользовательской задачи. Это системные программы, реализующие методы доступа к файлам и программам, выполняющимся на внешней машине, а также программы, интерпретирующие конструкции языка управления заданиями.