Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
Имитационное мо... 60099
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

Пользователей: 13,113
новичок: SaRdOr0493
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Меры близости на векторах в Delphi + Блок схемы
Моделирование вычислительного центра на GPSS + Отчет + Блок схема
Моделирование автомойки на GPSS + Отчет + Блок схемы

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Старший и младший номера устройств
Идентификация и обращение к устройствам определяется пространством имен устройств. В системе UNIX существуют три различных пространства имен устройств. Аппаратное пространство идентифицирует устройства по контроллерам, к которым они присоединены, а также логическому номеру устройства в контроллере. Ядро применяет для именования устройств их нумерацию. Пользователям же необходимо предоставить простое и понятное пространство имен.

Также вам может показаться, что такая тема как http://drivemilano.com/ никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт drivemilano.com. Тема такси в Милане там представлена весьма широко. На том сайте можно узнать много интересного на тему такси в Милане. Что означает вообще тема такси в Милане, где найти такси в Милане - про это написано на сайте drivemilano.com. Это очень важная для многих людей тема - такси в Милане. Спасибо сайту drivemilano.com за информацию на тему такси в Милане.



Для этой цели используются полные имена файлов. Подсистема ввода-вывода определяет семантику пространств имен для ядра и пользователя и осуществляет связь между ними.



Ядро идентифицирует каждое устройство по типу (блочное или символьное), а также по паре номеров, получивших название старшего и младшего номера устройства. Старший помер устройства идентифицирует тип устройства или, что будет более точным, его драйвер. Младший номер устройства идентифицирует определенный экземпляр устройства. Например, все диски могут иметь старший номер 5, но каждый из них в отдельности будет обладать индивидуальным младшим номером. Блочные и символьные устройства имеют отдельные независимые наборы старших номеров. Таким образом, номер 5 блочного устройства может указывать на дисковый драйвер, в то время как тот же номер для символьного устройства принадлежит линейным принтерам.
Старший номер является индексом к таблице соответствующего переключателя устройств. Если в рассматриваемом выше примере ядру необходимо загрузить операцию open дискового драйвера, то для этого оно находит в массиве bdevsw[] вхождение 5 и вызывает определенную для него функцию d_open(). Как правило, старший и младший номера устройства комбинируются в единой переменной типа dev_t. Старшие биты этой переменной содержат старший номер, а младшие — младший соответственно. Для выделения номера применяются макроопределения getmajorQ и getminor(). Для рассматриваемого примера исходный код открытия дискового драйвера выглядит примерно так:
(*bdevsw[getmajor(dev).d_open])(dev. ...):
Ядро передает процедуре d_open() номер устройства в качестве входного параметра. Драйвер устройства поддерживает внутренние таблицы, при помощи которых преобразует младший номер устройства в определенные регистры CSR или номера порта контроллера. Драйвер извлекает младший номер из dev и использует его для обращения к необходимому устройству.
Существует возможность настройки нескольких старших номеров для одного драйвера устройства. Такая возможность оказывается удобной, если драйвер обслуживает сразу несколько устройств различного типа, производящих некоторые общие действия. Например, драйвер накопителя на магнитных лентах может использовать один старший номер для выбора режима автоматической перемотки и другой — для неавтоматического режима. Если устройство одновременно имеет символьный и блочный интерфейс доступа, то оно использует отдельные вхождения в обеих таблицах переключателя и, следовательно, обладает как минимум двумя старшими номерами.
В ранних реализациях UNIX переменная типа dev_t имела 16-разрядное поле, каждые 8 битов которого указывали номер устройства. Это являлось причиной ограничения максимального количества устройств младшего типа в драйвере старшего типа до 256 единиц, что представляет значительное неудобство для некоторых систем. В дополнение к этому драйверы могли использовать несколько старших номеров устройств, соответствующих одному и тому же устройству. Драйверы также использовали сразу несколько имен старших устройств при управлении устройствами различного типа.
Еще одной проблемой является рост таблиц переключателя, которые могут иметь большой объем в том случае, если содержат все возможные вхождения, включающие описания устройств, не подключенных к системе или с незагруженными для них драйверами. Эта проблема возникает из-за того, что производителям драйверов нет нужды в настройке таблицы переключателя для каждой возможной конфигурации их устройств, вследствие чего в таблицу попадает вся информация.
В системе SVR4 было произведено некоторое количество изменений в целью решения вышеописанной проблемы. Тип dev_t является 32-разрядным, первые 14 битов используются для старшего номера, остальные 18 — для младшего. В SVR4 также было представлено понятие внутренних и внешних номеров устройств. Внутренние номера устройств идентифицируют драйвер и хранятся в виде индексов для доступа к переключателю. Внешние номера устройств формируют видимое пользователем представление устройств и хранятся в поле i_rdev индексного дескриптора специального файла устройства (см. раздел 16.4.2).



Во многих системах, в том числе и архитектуре Intel 80x86, внутренние и внешние номера устройств одинаковы. В системах, поддерживающих автонастройку, таких как AT&T ЗВ2, номера отличаются друг от друга. В таких системах массивы bdevsw[] и cdevswf] формируются динамически при загрузке системы и содержат вхождения только для устройств, сконфигурированных в системе. Ядро поддерживает массив под названием MAJ0R[], индексируемый по старшим внешним номерам устройств. Каждый элемент массива хранит соответствующий старший внутренний номер.
Связь между внешними и внутренними номерами осуществляется по типу «много к одному». Для преобразования номеров ядром предусмотрены два макроопределения etoimajor() и itoemagor(). Макрос itoemajorQ должен применяться последовательно для создания всех возможных старших номеров. То же самое и для младших номеров. Например, если драйвер имеет два внешних старших номера с 8 устройствами для каждого номера, они будут проецироваться на внутренние младшие номера в диапазоне от 0 до 15 для одного внутреннего старшего номера.

Макросы getmajor() и getminor() возвращают внутренние номера устройств. Для получения внешних номеров применяются getemajor() и geteminor().
Опубликовал katy June 23 2015 09:49:43 · 0 Комментариев · 3366 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Counter [Исходник...
PHP/MySQL для нач...
Размещение элемен...
Tetris 2002
Создание меню на ...
Добавление басса ...
Иллюстрированный ...
Calendar
Assistant
Delphi на примерах
Progressbar
Программа предназ...
MPTools
Песочные часы
Geo-Whois
SMLPack v1.0
SearchAndReplace
Prolog Interprete...
Создание фракталов
iChat v.7.0 Final...

Топ загрузок
Приложение Клие... 100519
Delphi 7 Enterp... 91131
Converter AMR<-... 20098
GPSS World Stud... 15145
Borland C++Buil... 12884
Borland Delphi ... 9074
Turbo Pascal fo... 7105
Калькулятор [Ис... 5158
Visual Studio 2... 5028
FreeSMS v1.3.1 3557
Случайные статьи
Коллективное владение
Опыты с силой прит...
Принципы работы ск...
Вечерние платья
Раздел описания пр...
Cобытийное моделир...
Идеальная ЛВС
Активация
Деструктор
Выбор ключа итерации
Процесс нагрева во...
Поэтому информация...
Дополнительная инф...
Диагностика пробле...
действие, которое ...
Сохранение состоян...
Коллекция Charts, ...
Динамический вызов...
ТАБЛИЦЫ В GPSS
Широкие файловые п...
Использование класса
на отдельных учетн...
Конструктор Qoob
MIPS-архитектура,
10.5. Принципы
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?