Новые книги

Колонки и статьи Алексея Федорчука, печатавшиеся в журнале LinuxFormat на протяжении 2006-2013 годов, собранные в хронологическом порядке. Они посвящёны UNIX, Linux и другим UNIX-подобным системам, их приложениям, а также идеологическим вопросам Свободного и Открытого Программного Обеспечения (FOSS). Публикуются в авторской редакции.
The Windows Driver Model has two separate but equally important aspects. First, the core model describes the standard structure for device drivers. Second, Microsoft provides a series of bus and class drivers for common types of devices.

The core WDM model describes how device drivers are installed and started, and how they should service user requests and interact with hardware. A WDM device driver must fit into the Plug and Play (PnP) system that lets users plug in devices that can be configured in software.

Microsoft provides a series of system drivers that have all the basic functionality needed to service many standard types of device. The first type of system driver supports different types of bus, such as the Universal Serial Bus (USB), IEEE 1394 (FireWire) and Audio port devices. Other class drivers implement standard Windows facilities such as Human Input Devices (HID) and kernel streaming. Finally, the Still Image Architecture (STI) provides a framework for handling still images, scanners, etc.

These system class drivers can make it significantly easier to write some types of device driver. For example, the USB system drivers handle all the low-level communications across this bus. A well defined interface is made available to other drivers. This makes it fairly straightforward to issue requests to the USB bus.

5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ

 

5.8 СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ

Системная функция mknod создает в системе специальные файлы, в число которых включаются поименованные каналы, файлы устройств и каталоги. Она похожа на функцию creat в том, что ядро выделяет для файла индекс. Синтаксис вызова системной функции mknod:

   mknod(pathname,type and permissions,dev)

где pathname - имя создаваемой вершины в иерархической структуре файловой системы, type and permissions - тип вершины (например, каталог) и права доступа к создаваемому файлу, а dev указывает старший и младший номера устройства для блочных и символьных специальных файлов (глава 10). На Рисунке 5.13 приведен алгоритм, реализуемый функцией mknod при создании новой вершины.


     алгоритм создания новой вершины                            
     входная информация:  вершина (имя файла)                   
                          тип файла                             
                          права доступа                         
                          старший, младший номера устройства    
                          (для блочных и символьных специальных 
                          файлов)                               
     выходная информация: отсутствует                           
     {                                                          
        если (новая вершина не является поименованным каналом   
         и пользователь не является суперпользователем)         
            возвратить (ошибку);                                
        получить индекс вершины, являющейся родительской для    
         новой вершины (алгоритм namei);                        
        если (новая вершина уже существует)                     
        {                                                       
            освободить родительский индекс (алгоритм iput);     
            возвратить (ошибку);                                
        }                                                       
        назначить для новой вершины свободный индекс из файловой
         системы (алгоритм ialloc);                             
        создать новую запись в родительском каталоге: включить  
         имя новой вершины и номер вновь назначенного индекса;  
        освободить индекс родительского каталога (алгоритм      
         iput);                                                 
        если (новая вершина является блочным или символьным спе-
         циальным файлом)                                       
            записать старший и младший номера в структуру индек-
             са;                                                
       освободить индекс новой вершины (алгоритм iput);        
     }                                                          

Рисунок 5.13. Алгоритм создания новой вершины

Ядро просматривает файловую систему в поисках имени файла, который оно собирается создать. Если файл еще пока не существует, ядро назначает ему новый индекс на диске и записывает имя нового файла и номер индекса в родительский каталог. Оно устанавливает значение поля типа файла в индексе, указывая, что файл является каналом, каталогом или специальным файлом. Наконец, если файл является специальным файлом устройства блочного или символьного типа, ядро записывает в индекс старший и младший номера устройства. Если функция mknod создает каталог, он будет существовать по завершении выполнения функции, но его содержимое будет иметь неверный формат (в каталоге будут отсутствовать записи с именами "." и ".."). В упражнении 5.33 рассматриваются шаги, необходимые для преобразования содержимого каталога в правильный формат.


     алгоритм смены каталога                                   
     входная информация:  имя нового каталога                   
     выходная информация: отсутствует                           
     {                                                          
        получить индекс для каталога с новым именем (алгоритм   
         namei);                                                
        если (индекс не является индексом каталога или же про-  
         цессу не разрешен доступ к файлу)                      
        {                                                       
           освободить индекс (алгоритм iput);                   
           возвратить (ошибку);                                 
        }                                                       
        снять блокировку с индекса;                             
        освободить индекс прежнего текущего каталога (алгоритм  
         iput);                                                 
        поместить новый индекс в позицию для текущего каталога  
         в пространстве процесса;                               
     }                                                          

Рисунок 5.14. Алгоритм смены текущего каталога

Предыдущая глава || Оглавление || Следующая глава