• Стойки ресепшн

    Лучшие стойки ресепшн для салонов красоты - то, что Вы ищете, у нас.

    www.europe-mebel.ru





Linux Kernel (Ядро линукса) (часть 2)


Работа с файлами устройств в VFS

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

С этой целью VFS заменяет файловые операции по умолчанию у файла устройства, когда он открывается. Как результат, каждый системный вызов для
файла устройства транслируется в вызов функции, специфичной для устройства, а не функции файловой системы. Функция, специфичная для устройства, воздействует на устройство, чтобы оно выполнило операцию, запрошенную процессом4.

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

Индексный дескриптор инициализируется путем чтения соответствующего индексного дескриптора с диска при помощи подходящей функции файловой системы (обычно ЭТО ext2_read_inode ИЛИ ext3_read_inode ; Когда эта функция обнаруживает, что индексный дескриптор на диске относится К файлу устройства, она вызывает функцию init special inode о, которая инициализирует поле i rdev индексного дескриптора значениями старшего и младшего номеров файла устройства. Кроме того, она записывает в поле i_op индексного дескриптора адрес одной из таблиц файловых операций: либо def bik fops, либо def chr fops, в зависимости от типа файла устройства. Служебная процедура системного вызова open о вызывает также функцию dentry open о, которая выделяет новый файловый объект и записывает в его поле f op адрес, хранящийся в i fop, т. е. адрес либо def bik fops, либо def chr fops. Благодаря этим двум таблицам, каждый системный вызов, сделанный для файла устройства, активизирует функцию драйвера устройства, а не функцию файловой системы.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

Linux Kernel (Ядро линукса) (часть 1)

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

Linux Kernel (Ядро линукса) (часть 2)

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно неуклюже: получив системный вызов fork о, ядро в буквальном смысле дублировало все адресное пространство родителя и присваивало копию процессу-потомку. Такая операция...

Linux Kernel (Ядро линукса) (часть 3)

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