Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 77
Текст из файла (страница 77)
Эти системные механизмы должны быть всегда доступны процессамтребующим реального времени. Следовательно, системные ресурсы для их функционирования должны быть распределены заранее.П ре дсказуем остьТребование 5. Поведение операционной системы должно быть известно и достаточно точно прогнозируемо. Времена выполнения системных вызовов и временные характеристики поведения системы в различных обстоятельствах должны бытьизвестны разработчику. Поэтому создатель ОСРВ должен приводить следующиехарактеристики:•латентную задержку прерывания, то есть время от момента прерывания до момента запуска задачи: она должна быть предсказуема и согласована с требованиями приложения (эта величина зависит от числа одновременно «висящих»прерываний);Q максимальное время выполнения каждого системного вызова (оно должно бытьпредсказуемо и не должно зависеть от числа объектов в системе);а максимальное время маскирования прерываний драйверами и супервизорными модулями операционной системы.Интерфейсы операционных системНапомним, что операционная система всегда выступает как интерфейс между аппаратурой компьютера и пользователем с его задачами.
Под интерфейсами операционных систем здесь и далее следует понимать специальные интерфейсы системного и прикладного программирования (API), предназначенные для выполненияперечисленных ниже задач.••Управление процессами, которое включает в себя следующий набор основныхфункций:•запуск, приостанов и снятие задачи с выполнения;•задание или изменение приоритета задачи;•взаимодействие задач между собой (механизмы сигналов, семафорные примитивы, очереди, конвейеры, почтовые ящики);•вызов удаленных процедур (Remote Procedure Call, RPC).Управление памятью:•запрос на выделение блока памяти;••освобождение памяти;изменение параметров блока памяти (например, память может быть заблокирована процессом либо предоставлена в общий доступ);•отображение файлов на память (имеется не во всех системах).Интерфейсы операционных систем•297Управление вводом-выводом:• запрос на управление виртуальными устройствами (напомним, что управление вводом-выводом является привилегированной функцией самой операционной системы, и никакая из пользовательских задач не должна иметьвозможности непосредственно управлять устройствами);• файловые операции (запросы к системе управления файлами на создание,изменение и удаление данных, организованных в файлы).Здесь мы перечислили основные наборы функций, которые выполняются операционной системой по соответствующим запросам от задач.
Что касается интерфейсапользователя с операционной системой, то он реализуется с помощью специальныхпрограммных модулей, которые принимают его команды на соответствующем языке (возможно, с использованием графического интерфейса) и транслируют ихв обычные вызовы в соответствии с основным интерфейсом системы. Обычно этимодули называют интерпретатором команд. Так, например, функции такого интерпретатора в MS DOS выполняет модуль C0MMAND.COM. Получив от пользователя команду, такой модуль после лексического и синтаксического анализа либо самвыполняет действие, либо, что случается чаще, обращается к другим модулям операционной системы, используя механизм API. Надо заметить, что в последние годыбольшую популярность получили графические интерфейсы (Graphical User Interface, GUI), в которых задействованы соответствующие манипуляторы типа мышьили трекбол (track-ball) 1 .
Указание курсором на объект и щелчок или двойнойщелчок на соответствующей кнопке мыши приводит к каким-либо действиям —запуску программы, ассоциированной с объектом, выбору и/или активизации менюи т. д. Можно сказать, что такая интерфейсная подсистема транслирует «команды» пользователя в обращения к операционной системе.Поясним также, что управление GUI является частным случаем задачи управления вводом-выводом и не относится к функциям ядра операционной системы, хотяв ряде случаев разработчики операционной системы относят функции GUI к основному системному интерфейсу API.Следует отметить, что имеются два основных подхода к управлению задачами.
Так,в одних системах порождаемая задача наследует все ресурсы задачи-родителя, тогдакак в других системах существуют равноправные отношения, и при порождениинового процесса ресурсы для него запрашиваются у операционной системы.Обращения к операционной системе в соответствии с имеющимся интерфейсомAPI могут осуществляться как посредством вызова подпрограммы с передачей ейнеобходимых параметров, так и через механизм программных прерываний. Выборметода реализации вызовов функций API должен определяться архитектурой платформы.1 рекбол — специальный шарик, который в переносных компьютерах (NoteBook) размещается рядом с клавиатурой, прокручивается пальцами и служит для перемещения указателя мыши.
В настоящее время гораздо чаще используют устройство, чувствительное к касанию (touchpad). С помощьютакого устройства пользователь управляет указателем мыши, перемещая палец по специальной поверхности.298Глава 9, Архитектура операционных системТак, например, в операционной системе MS DOS, которая разрабатывалась дляоднозадачного режима (поскольку процессор i80x86 не поддерживал мультипрограммирование), использовался механизм программных прерываний.
При этомосновной набор функций API был доступен через точку входа обработчика int 21 h.В более сложных системах имеется не одна точка входа, а множество — по количеству функций API. Так, в большинстве операционных систем используется методвызова подпрограмм. В этом случае вызов сначала передается в модуль API, на1пример в библиотеку времени выполнения (Run Time Library, RTL) , который перенаправляет его соответствующим обработчикам программных прерываний, входящим в состав операционной системы.
Использование механизма прерыванийвызвано, главным образом, тем, что при этом процессор переводится в режим супервизора.Интерфейс прикладногопрограммированияПрежде всего, необходимо однозначно разделить общий термин API (ApplicationProgram Interface — интерфейс прикладного программирования) на следующиенаправления:Q API как интерфейс высокого уровня, принадлежащий к библиотекам RTL;•API прикладных и системных программ, входящих в поставку операционнойсистемы;•прочие интерфейсы API.Интерфейс прикладного программирования, как это и следует из названия, предназначен для использования прикладными программами системных ресурсов компьютера и реализуемых операционной системой разнообразных системных функций.
API описывает совокупность функций и процедур, принадлежащих ядру илинадстройкам операционной системы.Итак, API — это набор функций, предоставляемых системой программирования разработчику прикладной программы и ориентированных на организацию взаимодействия результирующей прикладной программы с целевой вычислительной системой.Целевая вычислительная система представляет собой совокупность программныхи аппаратных средств, в окружении которых выполняется результирующая программа.
Сама результирующая программа порождается системой программирования наосновании кода исходной программы, созданного разработчиком, а также объектных модулей и библиотек, входящих в состав системы программирования.В принципе API используется не только прикладными, но и системными программами как в составе операционной системы, так и в составе системы программирования. Но дальше речь пойдет только о функциях API с точки рения разработчикаRTL включает в себя те стандартные подпрограммы, которые система программирования пляет на этапе компиляции. В общем случае это не только модули системы программирован:модули самой операционной системы.интерфейс прикладного программирования299прикладной программы. Для системной программы существуют некоторые дополнительные ограничения на возможные реализации API.функции API позволяют разработчику строить результирующую прикладнуюпрограмму так, чтобы использовать средства целевой вычислительной системы длявыполнения типовых операций.
При этом разработчик программы избавлен отнеобходимости создавать исходный код для выполнения этих операций.Программный интерфейс API включает в себя не только сами функции, но и соглашения об их использовании, которые регламентируются операционной системой,архитектурой целевой вычислительной системы и системой программирования.Существует несколько вариантов реализации API:О реализация на уровне модулей операционной системы;О реализация на уровне системы программирования;Q реализация на уровне внешней библиотеки процедур и функций.Система программирования в каждом из этих вариантов предоставляет разработчику средства для подключения функций API к исходному коду программы и организации их вызовов. Объектный код функций API подключается к результирующей программе компоновщиком при необходимости.Возможности API можно оценивать со следующих позиций:• эффективности выполнения функций API — эффективность включает в себяскорость выполнения функций и объем вычислительных ресурсов, необходимых для их выполнения;•широты предоставляемых возможностей;Q зависимости прикладной программы от архитектуры целевой вычислительнойсистемы.В идеале хотелось бы иметь набор функций API, выполняющихся с наивысшейэффективностью, предоставляющих пользователю все возможности современныхоперационных систем и имеющих минимальную зависимость от архитектуры вычислительной системы (еще лучше — лишенных такой зависимости).Добиться наивысшей эффективности выполнения функций API практически трудно по тем же причинам, по которым невозможно добиться наивысшей эффективности выполнения для любой результирующей программы.
Поэтому об эффективности интерфейса API можно говорить только в сравнении его характеристикс другими интерфейсами API.Что касается двух других показателей, то в принципе нет никаких техническихограничений на их реализацию. Однако существуют организационные проблемыи узкие корпоративные интересы, тормозящие создание такого рода библиотек.Реализация функций API на уровне модулейоперационной системыПри реализации функций API на уровне модулей операционной системы операционная система ответственна за выполнение функций API. Объектный код, вы-300Глава 9, Архитектура операционных системполняющий функции, либо непосредственно входит в состав операционной системы (или даже ядра операционной системы), либо находится в составе динамически загружаемых библиотек, поставляемых вместе с системой.