Файлы устройств – это специальные файлы, имена их находятся в файловой системе, т.е. имеется каталог, а в нем записи. Примеры таких файлов:
/dev/tty00
/dev/lp
/dev/discs
/dev/scsi
/dev/null – пустое устройство
/dev/zero – нулевое устройство
/dev/full – полное устройство
Эти записи определяют устройства, но соответствующее inode для устройства по сути представляют точку входа в драйвер этого устройства, и когда через этот информационный узел выполняется какое-либо действие, то ОС запускает на выполнение соответствующую функцию драйвера.
Файлы разделяются на блочные устройства и на символьные устройства. Файловые системы могут находиться только на блочном устройстве. Блочные устройства могут иметь связанные с ними символьные устройства для обеспечения быстрого и прямого доступа.
ОС использует две конфигурационные таблицы для связи устройства с программным кодом, управляющим этим устройством: таблица блочного устройства т таблица символьного устройства. Таблица индексируется при помощи значения старшего номера устройства, который хранится в информационном узле устройства в соответствующем поле.
|
|
Последовательность действий по передаче данных следующая:
1) системный вызов чтения/записи (read/write) обращается к индексному дескриптору файла обычным образом;
2) ОС проверяет соответствующее поле в индексном дескрипторе и определяет является ли устройство блочным или символьным и извлекает старший номер устройства;
3) старший номер используется для индексации соответствующей таблицы устройств и нахождения процедуры драйвера устройства, нужной для непосредственного выполнения передачи данных.
В inode хранится и младший номер устройства, который позволяет уточнить доступ к конкретному устройству, если используется один драйвер для работы с несколькими устройствами (при использовании одного порта).
#include <fentl.h>
int main()
{
int i,fd;
fd=open(“/dev/tty00”,O_WRONLY);
for (i=0; i<100; i++)
write(fd,’x’,1);
close(fd);}
Процессы