Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
April 27 2024 09:56:58   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 32807
Учимся удалять!... 31913
Примеры, синони... 23299
Просмотр готовы... 22526
Декартовы коорд... 22057
FAST (методика ... 21343
содержание - се... 20567
Просмотр готовы... 19169
Работа с инстру... 14628
Сейчас на сайте
Гостей: 3
На сайте нет зарегистрированных пользователей

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

Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ по Delphi
Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog
10.1.2.2 Closе
Процесс разрывает связь с открытым устройством, закрывая его. Однако, ядро запускает определяемую типом устройства процедуру close только в последнем вызове функции close для этого устройства, и то только если не осталось процессов, которым устройство необходимо открытым, поскольку процедура закрытия устройства завершается разрывом аппаратного соединения; отсюда ясно, что ядру следует подождать, пока не останется ни одного процесса, обращающегося к устройству. Поскольку ядро запускает процедуру открытия устройства при каждом вызове системной функции open, а процедуру закрытия только один раз, драйверу устройства неведомо, сколько процессов используют устройство в данный момент. Драйверы могут легко выйти из строя, если при их написании не соблюдалась осторожность: когда при выполнении процедуры close они приостанавливают свою работу и какой-нибудь процесс открывает устройство до того, как завершится процедура закрытия, устройство может стать недоступным для работы, если в результате комбинации вызовов open и close сложилась нераспознаваемая ситуация.
алгоритм close /* для устройств */
входная информация: дескриптор файла
выходная информация: отсутствует
{
выполнить алгоритм стандартного закрытия (глава 5ххх);
if (значение счетчика ссылок в таблице файлов не 0) goto finish;
if (существует еще один открытый файл, старший и младший номера которого совпадают с номерами закрываемого устройства)
goto finish; /* не последнее закрытие */
if (устройство символьного типа) {
использовать старший номер в качестве указателя в таблице ключей устройства посимвольного ввода-вывода;
вызвать процедуру закрытия, определяемую типом драйвера и передать ей в качестве параметра младший номер устройства;
}
if (устройство блочного типа) {
if (устройство монтировано) goto finish;
переписать блоки устройства из буферного кеша на устройство;
использовать старший номер в качестве указателя в таблице ключей устройства ввода-вывода блоками;
вызвать процедуру закрытия, определяемую типом драйвера и передать ей в качестве параметра младший номер устройства;
сделать недействительными блоки устройства, оставшиеся в буферном кеше;
}
finish:
освободить индекс;
}
Рисунок 10.4. Алгоритм закрытия устройства
Алгоритм закрытия устройства похож на алгоритм закрытия файла обычного типа (Рисунок 10.4). Однако, до того, как ядро освобождает индекс, в нем выполняются действия, специфичные для файлов устройств.
1. Просматривается таблица файлов для того, чтобы убедиться в том, что ни одному из процессов не требуется, чтобы устройство было открыто. Чтобы установить, что вызов функции close для устройства является последним, недостаточно положиться на значение счетчика ссылок в таблице файлов, поскольку несколько процессов могут обращаться к одному и тому же устройству, используя различные точки входа в таблице файлов. Так же недос таточно положиться на значение счетчика в таблице индексов, поскольку одному и тому же устройству могут соответствовать несколько файлов устройства. Например, команда ls -l покажет, что одному и тому же устройству символьного типа ("c" в начале строки) соответствуют два файла устройства, старший и младший номера у которых (9 и 1) совпадают. Значение счетчика связей для каждого файла, равное 1, говорит о том, что имеется два индекса.
crw-w-w- 1 root vis 9, 1 Aug 6 1984 /dev/tty01
crw-w-w- 1 root unix 9, 1 May 3 15:02 /dev/tty01
Если процессы открывают оба файла независимо один от другого, они обратятся к разным индексам одного и того же устройства.
2. Если устройство символьного типа, ядро запускает процедуру закрытия устройства и возвращает управление в режим задачи. Если устройство блочного типа, ядро просматривает таблицу результатов монтирования и проверяет, не располагается ли на устройстве смонтированная файловая система. Если такая система есть, ядро не сможет запустить процедуру закрытия устройства, поскольку не был сделан последний вызов функции close для устройства. Даже если на устройстве нет смонтированной файловой системы, в буферном кеше еще могут находиться блоки с данными, оставшиеся от смонтированной ранее файловой системы и не переписанные на устройство, поскольку имели пометку "отложенная запись". Поэтому ядро просматривает буферный кеш в поисках таких блоков и переписывает их на устройство перед запуском процедуры закрытия устройства. После закрытия устройства ядро вновь просматривает буферный кеш и делает недействительными все буферы, которые содержат блоки для только что закрытого устройства, в то же вре мя позволяя буферам с актуальной информацией остаться в кеше.
3. Ядро освобождает индекс файла устройства. Короче говоря, процедура закрытия устройства разрывает связь с устройством и инициализирует заново информационные структуры драйвера и аппаратную часть устройства с тем, чтобы ядро могло бы позднее открыть устройство вновь.
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Технология фазиров...
10.1.2.1 Open
1.3.1 Файловая сис...
Определение сущности
8.4 ВЫВОДЫ
Индукция Джона Ст...
Непереносимые (нет...
3.6 ВЫВОДЫ
Своя игра
4.6 НАЗНАЧЕНИЕ ИНД...
На кого рассчитана...
1.3.2 Среда выпол...
10.1.2.4 Стратегич...
В чем заключается ...
12.3.2 Реализация ...
7.3.6. Технология...
Глава 4. Основные ...
Глава 5. Основы GPS
Компьютерные файлы 2
ГЛАВА 3. РАБОЧЕЕ О...
Для пользователей ...
Настройки телефона...
6.5.2 Выделение об...
Глава 11. Pretec ...
4. Разработка инфо...
Идея пятая: Ионосф...
Перепроектирование...
Глава 4. Векторна...
Качество приема
8.6. Управление ко...
Общая схема вывода
Принцип 6. Сохраня...
Точность GPS
Правое и левое
7.3.4. Взаимосвяз...
Случаи из жизни
Применение домена
1.3.3 Элементы кон...
10.3.3 Терминальн...
2.3.2.4 Телеграфны...
Мини-чат
Вам необходимо залогиниться.

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