Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
April 20 2024 16:08:23   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 32761
Учимся удалять!... 31891
Примеры, синони... 23291
Просмотр готовы... 22509
Декартовы коорд... 22035
FAST (методика ... 21333
содержание - се... 20555
Просмотр готовы... 19145
Работа с инстру... 14614
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 9,955
новичок: Logyattella
Друзья сайта
Ramblers Top100
Рейтинг@Mail.ru

Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ по Delphi
Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog
10.1.2.1 Open
При открытии устройства ядро следует той же процедуре, что и при открытии файлов обычного типа (см. раздел 5.1), выделяя в памяти индексы, увеличивая значение счетчика ссылок и присваивая значение точки входа в таблицу файлов и пользовательского дескриптора файла. Наконец, ядро возвращает значение пользовательского дескриптора файла вызывающему процессу, так что открытие устройства выглядит так же, как и открытие файла обычного типа. Однако, перед тем, как вернуться в режим задачи, ядро запускает зависящую от устройства процедуру open (Рисунок 10.3). Для устройства ввода-вывода блоками запускается процедура open, закодированная в таблице ключей устройств ввода-вывода блоками, для устройств посимвольного ввода-вывода — процедура open, закодированная в соответствующей таблице. Если устройство имеет как блочный, так и символьный тип, ядро запускает процедуру open, соответствующую типу файла устройства, открытого пользователем: обе процедуры могут даже быть идентичны, в зависимости от конкретного драйвера.
алгоритм open /* для драйверов устройств */
входная информация:
имя пути поиска
режим открытия
выходная информация:
дескриптор файла
{
преобразовать имя пути поиска в индекс, увеличить значение счетчика ссылок в индексе;
выделить в таблице файлов место для пользовательского дескриптора файла, как при открытии обычного файла;
выбрать из индекса старший и младший номера устройства;
сохранить контекст (алгоритм setjmp) в случае передачи управления от драйвера;
if (устройство блочного типа) {
использовать старший номер устройства в качестве указателя в таблице ключей устройств ввода-вывода блоками;
вызвать процедуру открытия драйвера по данному индексу: передать младший номер устройства, режимы открытия;
}
else {
использовать старший номер устройства в качестве указателя в таблице ключей устройств посимвольного ввода-вывода;
вызвать процедуру открытия драйвера по данному индексу: передать младший номер устройства, режимы открытия;
}
if (открытие в драйвере не выполнилось)
привести таблицу файлов к первоначальному виду, уменьшить значение счетчика в индексе;
}
Рисунок 10.3. Алгоритм открытия устройства
Зависящая от типа устройства процедура open устанавливает связь между вызывающим процессом и открываемым устройством и инициализирует информационные структуры драйвера. Например, процедура open для терминала может приостановить процесс до тех пор, пока в машину не поступит сигнал (аппаратный) о том, что пользователь предпринял попытку зарегистрироваться. После этого инициализируются информационные структуры драйвера в соответствии с принятыми установками терминала (например, скоростью передачи информации в бодах). Для "программных устройств", таких как память системы, процедура open может не включать в себя инициализацию.
Если во время открытия устройства процессу пришлось приостановиться по какой-либо из внешних причин, может так случиться, что событие, которое должно было бы вызвать возобновление выполнения процесса, так никогда и не произойдет. Например, если на данном терминале еще не зарегистрировался ни один из пользователей, процесс getty, "открывший" терминал (раздел 7.9), приостанавливается до тех пор, пока пользователем не будет предпринята попытка регистрации, при этом может пройти достаточно большой промежуток времени. Ядро должно иметь возможность возобновить выполнение процесса и отменить вызов функции open по получении сигнала: ему следует сбросить индекс, отменить точку входа в таблице файлов и пользовательский дескриптор файла, которые были выделены перед входом в драйвер, поскольку открытие не произошло. Ядро сохраняет контекст процесса, используя алгоритм setjmp (раздел 6.4.4), прежде чем запустить процедуру open; если процесс возобновляется по сигналу, ядро восстанавливает контекст процесса в том состоянии, которое он имел перед обращением к драйверу, используя алгоритм longjmp (раздел 6.4.4), и возвращает системе все выделенные процедуре open структуры данных. Точно так же и драйвер может уловить сигнал и очистить доступные ему структуры данных, если это необходимо. Ядро также переустанавливает структуры данных файловой системы, когда драйвер сталкивается с исключительными ситуациями, такими, как попытка пользователя обратиться к устройству, отсутствующему в данной конфигурации. В подобных случаях функция open не выполняется.
Процессы могут указывать значения различных параметров, характеризующие особенности выполнения процедуры открытия. Из них наиболее часто используется "no delay" (без задержки), означающее, что процесс не будет приостановлен во время выполнения процедуры open, если устройство не готово. Системная функция open возвращает управление немедленно и пользовательский процесс не узнает, произошло ли аппаратное соединение или нет. Открытие устройства с параметром "no delay", кроме всего прочего, затронет семантику вызова функции read, что мы увидим далее (раздел 10.3.4).
Если устройство открывается многократно, ядро обрабатывает пользовательские дескрипторы файлов, индекс и записи в таблице файлов так, как это описано в главе 5, запуская определяемую типом устройства процедуру open при каждом вызове системной функции open. Таким образом, драйвер устройства может подсчитать, сколько раз устройство было "открыто", и прервать выполнение функции open, если количество открытий приняло недопустимое значение. Например, имеет смысл разрешить процессам многократно "открывать" терминал на запись для того, чтобы пользователи могли обмениваться сообщениями. Но при этом не следует допускать многократного "открытия" печатающего устройства для одновременной записи, так как процессы могут затереть друг другу информацию. Эти различия имеют смысл скорее на практике, нежели на стадии разработки: разрешение одновременной записи на терминалы способствует установлению взаимодействия между пользователями; запрещение одновременной записи на принтеры служит повышению читабельности машинограмм [30] .
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Быстрое продление ...
Иерархические сети
6.2.1 Области
Общая информация о...
Спидометр
ГЛАВА 1. ОБЩИЙ ОБ...
Глава 2. PocketGPS...
5.3. Долговременны...
2.4.9 Свёрточные коды
9.1.3 Загрузка (по...
Второй параграф
10.3.6 Драйвер кос...
Связь с ци...
Видео для развлечения
Глава 7. HUMMINBI...
Глава третья
1.6 ВЫВОДЫ
8.1.2 Параметры ди...
4.1.1 Определение
1.5.2 Уровни преры...
Определение атрибута
ГЛАВА 1. ОСНОВНЫЕ ...
Sven 848
10.3.1 Символьные ...
Забытые науки
Если бы…
Использование подт...
Дисплей
Глава 21. BT-308 B...
4.12.3.1 Поколения...
Путевые точки
8. Продукции типа...
2.6.1. Кодирование...
Классификация проц...
Идентификация атри...
2.1. Поведенческие...
Движение по маршруту
10.3.3 Терминальн...
4. Особенности выд...
Оглавление
Мини-чат
Вам необходимо залогиниться.

Нет присланных сообщений.
Copyright © 2009