Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
501 из 715
алгоритм open /* для драйверов устройств */
входная информация:
имя пути поиска
режим открытия
выходная информация:
дескриптор файла
{
преобразовать имя пути поиска в индекс, увеличить значение счетчика ссылок в индексе;
выделить в таблице файлов место для пользовательского дескриптора файла, как при открытии обычного файла;
выбрать из индекса старший и младший номера устройства;
сохранить контекст (алгоритм setjmp) в случае передачи управления от драйвера;
if (устройство блочного типа) {
использовать старший номер устройства в качестве указателя в таблице ключей устройств ввода-вывода блоками;
вызвать процедуру открытия драйвера по данному индексу: передать младший номер устройства, режимы открытия;
}
else {
использовать старший номер устройства в качестве указателя в таблице ключей устройств посимвольного ввода-вывода;
вызвать процедуру открытия драйвера по данному индексу: передать младший номер устройства, режимы открытия;
}
if (открытие в драйвере не выполнилось)
привести таблицу файлов к первоначальному виду, уменьшить значение счетчика в индексе;
}
Рисунок 10.3. Алгоритм открытия устройства
Зависящая от типа устройства процедура open устанавливает связь между вызывающим процессом и открываемым устройством и инициализирует информационные структуры драйвера. Например, процедура open для терминала может приостановить процесс до тех пор, пока в машину не поступит сигнал (аппаратный) о том, что пользователь предпринял попытку зарегистрироваться.
|< Пред. 499 500 501 502 503 След. >|