5

Как устройства, драйверы устройств, файлы устройств и точки монтирования связаны в Linux (я начинающий пользователь Ubuntu)?

Мое понимание о них довольно расплывчато; Я надеюсь, что будет какое-то четкое объяснение, которое поможет мне получить более широкую картину.

4 ответа4

5

В философии Unix все в действительности представляет собой файл текстового файла в иерархии каталогов, и здесь все на самом деле является именами для различных «файлов» в этой иерархии.

Устройство - это любое физическое аппаратное или виртуальное устройство (например, dev/null), которое может использоваться системой = они обычно находятся в /dev/.

Для устройств хранения все разделы находятся в /dev / и должны быть смонтированы (/dev / sdx - это физический диск, а /dev / sdx1 /dev / sdx2 .. - это разделы), используя соответствующий драйвер устройства в другом месте, обычно / mnt / или / media /. Однако вы также можете монтировать раздел как определенный каталог в иерархии, такой как / home / или даже как произвольный каталог, если у вас есть разрешения.Точка монтирования - это, в основном, место, где можно получить доступ к разделу, и его представление в иерархии.

Файл устройства - это представление устройства в иерархии файловой системы.

Хотя это обычно абстрагируется, при подключении устройства требуются необходимые драйверы, чтобы система знала, как «общаться» с физическим устройством, о котором идет речь, а в случае устройств хранения файловые системы - полная команда монтирования. включите это, но обычно это автоматически. примерами этого являются универсальный драйвер libata для жестких дисков и ext3 или различные драйверы предохранителей для файловых систем.

3

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

драйвер устройства: программное обеспечение, которое выполняет операции ввода-вывода на устройстве от имени ОС и / или пользовательских запросов.

файл устройства (или узел устройства): имя файла для доступных пользователю устройств, обычно в каталоге /dev, с атрибутами для владельца и прав доступа. Обратите внимание, что некоторые "устройства" (например, Ethernet-порт eth0) не имеют доступного пользователю файла устройства.

точка монтирования: точка монтирования - это каталог в файловой системе (например, /mnt), который фактически обращается к другой файловой системе, обычно на другом устройстве

2

В общем:

  • Устройство = Аппаратное обеспечение
  • Драйвер устройства = интерфейс между ОС / программой и оборудованием
  • Файл устройства = Интерфейс с драйвером
  • Точка монтирования = Не совсем уверен в этом, я думаю, что вы говорите о «физическом местоположении в разделе, используемом в качестве корневой файловой системы» (Википедия)
1

(Следующее упрощено, но должно дать вам общее представление)

Устройство представляет собой аппаратное обеспечение, напрямую подключенное к ЦП (редко, если это не шина), или косвенно подключенное через шину (которая сама является устройством). Устройства могут связываться с ЦП любым из четырех способов: адреса памяти, адреса ввода-вывода, каналы DMA и IRQ. (Эпоха, в которую вам приходилось беспокоиться, давно прошла, она умерла вместе с ISA).

Одна из причин, по которой у нас есть операционные системы, заключается в предоставлении общего интерфейса для взаимодействия с типами оборудования. Таким образом, те, кто пишет программы, могут использовать этот общий интерфейс вместо того, чтобы быть осведомленными о деталях низкого уровня каждого конкретного устройства. Это делает программирование быстрее и проще.

Драйвер - это часть программного обеспечения, которая представляет этот общий интерфейс на стороне приложения и затем преобразует запросы, используя этот интерфейс, в форму, которую может обрабатывать устройство (используя вышеупомянутые адреса памяти, адреса ввода-вывода, каналы DMA и IRQ, или, возможно, звоню другим водителям) и обратно.

Linux, будучи операционной системой в стиле UNIX, использует один конкретный "общий интерфейс", называемый UNIX API. Одна из целей разработки UNIX - сделать так, чтобы все выглядело как файл. Вы можете выполнять следующие операции с файлами: создавать, читать, писать, искать и закрывать. Для вещей, которые не вписываются в эти концепции, есть еще одна операция под названием ioctl, которая является своего рода "универсальным" для всего остального.

Если вы отправляете запросы на эти операции над файлом устройства, запросы направляются не на уровень файловой системы ядра, а непосредственно на устройство.

Теперь у вас есть файлы устройств, которые позволяют вам общаться с устройствами хранения на низком уровне (/dev/sda и т.д.), Но устройства хранения действительно глупы. Все, что они могут сделать с помощью API UNIX, - это предоставить вам LBA или блок данных (512, 2048 или 4096 байт) или сохранить их (современные жесткие диски имеют десятки миллионов LBA, если не больше). Они не организовывают это в файлы самостоятельно. Например, запись в файл может включать запись во многие LBA, и вам нужна система, чтобы отслеживать, какие LBA принадлежат какому файлу. Это задача уровня файловой системы ядра, преобразовывающая запросы на операции над файлами в запросы на операции на устройствах и использующая часть хранилища этого устройства для отслеживания всего.

Уровень файловой системы - это то, что реализует всю систему каталогов. Это древовидная структура, и вы можете присоединять или монтировать блочные устройства в различных точках этого дерева. Слой файловой системы должен знать, какое «низкоуровневое» устройство имеет файлы, и поэтому вам необходимо его смонтировать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .