POSIX raw чтение / запись

Может кто-нибудь объяснить, как операции чтения / записи, выполняемые на узле /dev с использованием операции BSD read() write(), достигают жесткого диска.

Происходит ли это через файловую систему или напрямую взаимодействует через драйверы устройств....

2 ответа

Он напрямую взаимодействует с драйвером устройства. Некоторые операционные системы (не уверенные в OS X) будут использовать буферный кеш, но некоторые его обойдут. В некоторых случаях это зависит даже от узла устройства. Например, OS X имеет /dev/disk*, а также /dev/rdisk*, где узлы устройств rdisk * имеют прямой доступ.

Например, возьмем следующий случай. Вы открываете вымышленное устройство /dev/bd, которое является жестким диском. Ядро, чтобы обслужить запрос системного вызова, сначала пытается найти inode, связанный с путем /dev/bd. После того, как это удалось, выясняется, какой тип индекса, был прочитан только сейчас. В нашем случае тип индекса будет BLOCK-SPECIFIC. На данный момент ядро ​​знает, что этот индекс представляет драйвер (драйвер устройства для конкретного блока). С каждым устройством связана пара (major_id,minor_id), они идентифицируют разные устройства. В inode он может быть найден, и ядро ​​точно знает, какой драйвер может обслуживать запрос. И в зависимости от запроса будет вызвана соответствующая функция драйвера (например, read).

Другие вопросы по тегам