OSDev

для всех
Текущее время: 19 ноя 2019, 13:15

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Адрес аппаратного устройства
СообщениеДобавлено: 20 фев 2019, 20:27 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Вопрос хоть и теоретический, но с другой стороны и практический. Т.к. 100% возникнет при практической реализации операционной системы.
Вопрос заключается в том, как реализовать обращение к аппаратному устройству.
Чтобы обратиться к устройству, ему необходимо присвоить адрес.
Часть устройств подключено к шине PCI, и для адреса достаточно 16 бит (32 для PCI Express).
Часть древних и не очень устройств описано в таблицах ACPI (не подключенных к PCI шине).
Для USB устройств нужно ещё 7 бит к адресу (максимально можно подключить 127) устройств. Итого 32+7=39 бит.
Само USB устройство может быть составным, там вроде около 255 интерфейсов (1 байт). Итого 39+8=48 бит.
В 48 битах можно закодировать 2^48=2,8147498 × 10^14 устройств.
Т.е. 48 бит для адреса слишком много.
Какие есть соображения на этот счёт?

P.S. Ну вот погуглил, есть обычные PCI платы, реализующие внутри себя 16 портов rs-232.
Может есть и платы на большее количество портов.
Т.е. обычному PCI устройству 32 бит не хватит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 08:27 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1391
Не надо пытаться одним адресом покрыть все устройства. Физически устройства образуют древовидную структуру, корнем которой является процессор. Пока устройство прямо доступно процессору, обращения к нему с точки зрения программиста не отличаются от обращений к ячейкам памяти (ну или к портам ввода-вывода, но это, по сути, лишь требует уметь работать с двумя видами адресов -- памяти и портов). Соответственно, для таких устройств необходимо использовать адрес памяти -- а он сейчас 64-разрядный, даже если физически реализовано меньшее число разрядов. Все остальные устройства подключаются через специфические для конкретных интерфейсов контроллеры и адресуются уже по правилам этих интерфейсов. Поэтому нет никакого ни технического, ни логического смысла пытаться присвоить, скажем, USB-мыши принципиально такой же адрес, как и хост-контроллеру USB: процессор не может обращаться к USB-устройствам, он обращается только к хост-контроллеру. Попытка скрестить ежа с ужом приведёт лишь к путанице.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 17:13 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Насчёт древовидной структуры согласен, так всё и есть.
Цитата:
Все остальные устройства подключаются через специфические для конкретных интерфейсов контроллеры и адресуются уже по правилам этих интерфейсов.

Т.е. считаете, что единообразной адресации устройств не требуется?
Цитата:
Поэтому нет никакого ни технического, ни логического смысла пытаться присвоить, скажем, USB-мыши принципиально такой же адрес, как и хост-контроллеру USB: процессор не может обращаться к USB-устройствам, он обращается только к хост-контроллеру. Попытка скрестить ежа с ужом приведёт лишь к путанице.

У каждого устройства должен быть свой уникальный адрес.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 17:24 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Можно предложить и другую реализацию.
Адрес устройства это просто число, не связанное с физическим подключением устройства. Это число должно быть уникально.
Информацию об устройстве хранить например, в красно-чёрном дереве. Ключ - адрес устройства.
Добавление, удаление информации об устройстве тривиальные операции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 18:26 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1391
Единообразная адресация реальных устройств бесполезна: обратиться-то к устройству единообразным образом невозможно из-за различия в способах подключения (это Вам не IBMовские мэйнфреймы, где сие как раз единообразно -- но там принципиально иная организация ввода-вывода). Соответственно, зачем устройству нужен собственный уникальный адрес, который на самом деле адресом не является?

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


В принципе, в такой роли может выступать адрес блока управления устройством: по понятным причинам сей адрес будет, во-первых, уникальным, а во-вторых, как раз единообразным (поскольку формат управляющих блоков определяется не железом, а операционной системой).

Цитата:
Информацию об устройстве хранить например, в красно-чёрном дереве. Ключ - адрес устройства.


А зачем хранить таким образом? Если доступ к устройству необходим для, условно говоря, кода пользователя, то он оперирует не адресами устройств, а некими логическими именами (неважно, будут они в стиле Винды, Униха или ещё чего -- главное, что это будет некий "человеческий" формат), если же операции должен выполнять код самой системы, то ему логичней прямо использовать адреса управляющих блоков.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 19:04 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Да, есть о чём подумать.
Пусть единообразный доступ ко всем устройствам может не требоваться. С этим я согласен.
Но единообразный доступ может потребоваться при обращении к устройствам одного класса.
Например, физический диск может быть и SATA диском, подключенным к AHCI контроллеру, и флешкой.
В операционной системе будет API для работы с дисками, которому подробности физического подключения устройства не требуются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 19:08 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Логические имена в виде строки - названия файлов (unix) удобны для пользователя. Компьютеры работают с числами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 19:18 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Уникальный адрес устройства нужен для работы системы сообщений. Сообщения представляют собой запросы к устройству (драйверу). Передача сообщений осуществляется асинхронно. Единая адресация упростит реализацию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 20:06 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1117
Для адресации используйте handle -некоторое число. Вернее указатель на код драйвера. Для однотипных устройств просто размножаете код драйвера.
Код драйвера - в терминах виндоуса Device Object.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адрес аппаратного устройства
СообщениеДобавлено: 21 фев 2019, 20:28 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1391
v.g.a. писал(а):
Но единообразный доступ может потребоваться при обращении к устройствам одного класса.
Например, физический диск может быть и SATA диском, подключенным к AHCI контроллеру, и флешкой.


Это не устройства одного класса, это устройства разных классов, причём совершенно разных. Устройствами одного класса могут быть тома файловой системы, причём только если файловая система одинакова (скажем, FAT32). Но эти устройства на самом деле построены над другими устройствами более низкого уровня -- разделами физического диска, например. Те, в свою очередь, тоже являются не настоящими устройствами, а надстройками -- над SATA- и флэш-диском в Вашем примере.

Цитата:
В операционной системе будет API для работы с дисками, которому подробности физического подключения устройства не требуются.


Ну так разумней внутри системы оперировать адресами управляющих блоков: без них всё равно обойтись не удастся (как, скажем, узнать, на каком разделе находится данный том файловой системы, и на каком физическом диске находится этот раздел?).

Цитата:
Логические имена в виде строки - названия файлов (unix) удобны для пользователя. Компьютеры работают с числами.


Ага, только перед тем, как начать работать "с числами", нужно как-то сообщить системе, с чем программа собирается работать, и без логических имён или ещё чего-то в этом роде обойтись не удастся (хотя бы потому, что работа часто ведётся с файлами, а они именно именуются). Так что, выдавая запрос на открытие, придётся выдавать и текстовую строку, ну а что тот запрос вернёт -- уже дело системы. Как правило, возвращается некое абстрактное (с точки зрения программы, но не системы) число. Но это не может быть "адрес" устройства как таковой -- хотя б потому, что часто открываются файлы на устройствах, а не сами устройства, а также потому что в общем случае нужно различать обращения к одному и тому же устройству со стороны разных программ.

Цитата:
Уникальный адрес устройства нужен для работы системы сообщений. Сообщения представляют собой запросы к устройству (драйверу). Передача сообщений осуществляется асинхронно. Единая адресация упростит реализацию.


Зачем выдумывать фиктивные адреса устройств, если в любом случае имеются адреса блоков управления устройствами, с которыми работают соответствующие драйверы?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB