Межпроцессное взаимодействие

Поводов для нежелательной конкуренции между процессами много, особенно при удалении имен каталогов. Предположим, что один процесс пытается найти данные файла по его полному символическому имени, последовательно проходя компонент за компонентом, а другой процесс удаляет каталог, имя которого входит в путь поиска. Допустим, процесс А делает разбор имени "a/b/c/d" и приостанавливается во время получе­ния индексного узла для файла "с". Он может приостановиться при по­пытке заблокировать индексный узел или при попытке обратиться к дис­ковому блоку, где этот индексный узел хранится. Если процессу Внужно удалить связь для каталога с именем "с", он может приостановиться по той же самой причине, что и процесс А. Пусть ядро впоследствии решит возобновить процесс В раньше процесса А. Прежде чем процесс А про­должит свое выполнение, процесс В завершится, удалив связь каталога "с" и его содержимое по этой связи. Позднее процесс Апопытается об­ратиться к несуществующему индексному узлу, который уже был удален. Алгоритм поиска файла, проверяющий в первую очередь неравенство значения счетчика связей нулю, должен сообщить об ошибке.

Что такое API

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

1. Управления процессами

2. Управление памятью

3. Управление вводом-выводом

Для реализации интерфейсов используются специальные программы, которые траслируют команды пользователя в вызовы операционной системы. Обычно эти программы называют интерпретаторами команд. Поле получения команды интерпретатор после лексического и синтаксического разбора либо сам выполняет некие действия, либо обращается к соответствующим модулям операционной системы. Отмечу что графический интерфейс (GUI) – частная задача управления вводом-выводом, не являющаяся частью ядра.

Стоит отметить что существуют два подхода управления процессами – «родитель-потомок» (UnIX) и равноправные отношения (Windows). Обращение к операционной системе, в зависимости от метода управления процессами сильно отличается. Так для однозадачных систем (DOS) использовался механизм программного прерывания. Набор функций API был доступен через точку обработчика int 21h. В более сложных системах имеется не одна а несколько точек входа – по количеству функций API. Так, в большинстве ОС используется метод вызова подпрограмм. В этом случае вызов сначала передается в модуль API (библиотека времени выполнения), который формирует вызовы обработчикам программных прерываний, входящих в состав ОС. Использование прерываний необходимо, поскольку в этом случае процессор переводится в состояние супервизора.

Что же обозначает термин API (application program interface). API можно условно разделить на 3 группы

1. Прикладной API - интерфейс высокого уровня к библиотеке RTL (run time library – библиотека времени выполнения RTL включает модули из системы программирования и модули ОС).API реализуется на уровне пользовательских программ;

2. Системный API - системные программы, в составе ОС.Реализация на уровне вызовов ядра ОС

3. Прочие API. Реализация на уровне внешней библиотеки процедур и функций.

Прикладные API

Прикладные API – интерфейс прикладного программирования предназначен для использования прикладными программами системных ресурсов ОС. API описывает совокупность функций и процедур, принадлежащих ядру ОС. Прикладное API представляет собой набор готовых функций, предоставляемых ОС разработчику прикладных программ с целевой вычислительной системой (ЦВС). ЦВС представляет собой совокупность программных и аппаратных средств, в окружении которых выполняются пользовательские программы. Сюда входят готовые библиотеки и объектные модули ОС. Благодаря этому разработчик избавлен от необходимости создавать код для выполнения типовых операций.

API включает в себя не только функции, но и соглашения об их использовании, которые регламентируются ОС и архитектурой. Объектный код API подключается к программе на этапе компоновки.

Эффективность API определяется широтой предоставляемых пользователю возможностей работы с ОС и минимальной зависимостью от архитектуры вычислительного комплекса.