Россия, Казань, Казанский Национальный Исследовательский Технический Университет |
Использование ОС Linux в качестве сервера электронной почты
Управление драйверами устройств
Еще одна из зон ответственности ядра — управление аппаратными устройствами ПК. Любое устройство в системе, с которым ОС Linux должна взаимодействовать должно иметь драйвер (специальный код) внутри ядра. Драйверный код позволяет ядру вести двусторонний обмен данными с устройством. Для встраивания драйвера устройства в ядро ОС Linux используются два способа.
Раньше единственным способом вставки кода драйвера устройства в ядро была перекомпиляция ядра системы. Каждый раз, добавляя новое устройство в систему, вы были вынуждены перекомпилировать ядро. По мере того как увеличивалось количество устройств, поддерживаемых системой Linux, этот процесс становился все более неэффективным. Поэтому был разработан более эффективный метод вставки драйвера устройства в ядро — с помощью модулей ядра. Модули ядра могли вставляться в уже запущенное ядро и также "на ходу" выгружаться из него, когда устройство уже не используется. Далее в этой лекции в разделе "Модули ядра" этот механизм будет рассмотрен более подробно.
Все физические устройства в ОС Linux представляются специальными файлами устройств. Файлы устройств разделяются на три вида:
- символьные;
- блочные;
- сетевые.
Символьные файлы выделяются устройствам, обрабатывающим данные посимвольно. Большинству модемов соответствуют символьные файлы устройств. Блочные файлы выделяются устройствам, обработка данных в которых осуществляется большими блоками, например таким, как дисковые накопители. Сетевые файлы устройств соответствуют устройствам, в которых осуществляется пакетная передача данных. К ним относятся сетевые адаптеры и специальные "петельные" устройства, замыкающиеся сами на себя, что позволяет системе Linux проводить сеансы связи с самой собой с применением сетевых протоколов. Эти устройства используются для тестирования и отладки программного обеспечения.
Файлы устройств создаются в файловой системе как узлы. Каждый узел имеет уникальную пару номеров, которая идентифицирует его для ядра ОС Linux. В эту пару номеров входят младший и старший номера устройства. Подобные устройства группируются по одинаковому старшему номеру устройства. Младший номер устройства необходим для идентификации устройства среди устройств с одинаковыми старшими номерами. В листинге 2.5 приведен пример файлов устройств сервера на базе ОС Linux.
1 [rich@shadrach /dev]$ ls -al sda* ttyS* 2 brw-rw----1 root disk 8, 0 May 5 1998 sda 3 brw-rw----1 root disk 8, 1 May 5 1998 sda1 4 brw-rw----1 root disk 8, 10 May 5 1998 sda10 5 brw-rw----1 root disk 8, 11 May 5 1998 sda11 6 brw-rw----1 root disk 8, 12 May 5 1998 sda12 7 brw-rw----1 root disk 8, 13 May 5 1998 sda13 8 brw-rw----1 root disk 8, 14 May 5 1998 sda14 9 brw-rw----1 root disk 8, 15 May 5 1998 sda15 10 brw-rw----1 root disk 8, 2 May 5 1998 sda2 11 brw-rw----1 root disk 8, 3 May 5 1998 sda3 12 brw-rw----1 root disk 8, 4 May 5 1998 sda4 13 brw-rw----1 root disk 8, 5 May 5 1998 sda5 14 brw-rw----1 root disk 8, 6 May 5 1998 sda6 15 brw-rw----1 root disk 8, 7 May 5 1998 sda7 16 brw-rw----1 root disk 8, 8 May 5 1998 sda8 17 brw-rw----1 root disk 8, 9 May 5 1998 sda9 18 crw-------1 root tty 4, 64 Nov 29 16:09 ttyS0 19 crw-------1 root tty 4, 65 May 5 1998 ttyS1 20 crw-------1 root tty 4, 66 May 5 1998 ttyS2 21 crw-------1 root tty 4, 67 May 5 1998 ttyS3 22 [rich@shadrach /dev]$Листинг 2.5. Пример списка устройств на сервере с ОС Linux
В строке 1 задана команда ls для отображения всех файлов устройств sda и ttyS. Устройство sda — это первый жесткий диск SCSI, а ttyS соответствуют стандартным последовательным портам (COM) IBM-совместимых ПК. В строках со 2-й по 17-ю показаны все устройства sda в системе. Не все из них используются в данный момент, однако они создаются на тот случай, если в них возникнет потребность. В строках 18–21 вы видите все доступные в системе устройства ttyS.
В пятой колонке указаны старшие номера узлов устройств. Обратите внимание, что все устройства sda имеют один и тот же старший номер узла устройства (8), а все устройства ttyS используют 4. В шестой колонке указаны младшие номера узлов устройств. Как видите, каждое устройство с общим старшим номером имеет уникальный младший номер устройства. В первой колонке отражаются права доступа к файлу устройства. Первый символ в правах доступа говорит о типе файла. Заметьте, что файлы SCSI дисков все помечены как блоковые (b), в то же время файлы последовательных портов имеют пометку (c), т.е. определены как символьные.
Для того чтобы создать новый узел для устройства, можно воспользоваться командой mknod. Формат mknod следующий:
mknod [OPTION] NAME TYPE [MAJOR MINOR],
где NAME — это имя файла, а TYPE — его тип (блоковый или символьный). Параметр OPTION имеет лишь один вариант. Опция -m позволяет устанавливать права доступа к создаваемому файлу. Будьте внимательны при выборе уникальных старшего и младшего номеров узла устройства.
Управление файловой системой
В отличие от других операционных систем, ядро ОС Linux способно поддерживать различные типы файловых систем для чтения-записи на жесткие диски. В настоящее время в ОС Linux поддерживается 15 различных файловых систем. Однако при этом необходимо скомпилировать соответствующим образом ядро, чтобы в нем была включена поддержка всех файловых систем. В табл. 2.4 представлен список файловых систем, с которыми операционная система Linux может производить операции чтения-записи данных.
Любой жесткий диск для использования системой Linux должен быть форматирован с помощью одной из файловых систем, указанных в табл. 2.4. Форматирование в файловой системе Linux подобно форматированию диска в системе MS-DOS. Вначале операционная система должна занести на диск необходимую системную информацию, и только после этого диск можно использовать для дальнейшей работы. Для формирования файловой системы в ОС Linux используется команда mkfs. Формат команды mkfs
mkfs [-V] [-t fstype][fs-options] filesys [blocks],
где fstype указывает тип используемой файловой системы, а blocks — количество используемых в ней блоков. Файловой системой по умолчанию является ext2, а число блоков — все доступные блоки в разделе.
Ядро Linux взаимодействует с другими файловыми системами посредством виртуальной файловой системы Virtual File System (VFS). Таким образом обеспечивается стандартный интерфейс между ядром и всеми файловыми системами. Виртуальная файловая система VFS по мере монтирования и использования какой-либо файловой системы кэширует информацию о ней в памяти.