Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 2:

Использование ОС 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 может производить операции чтения-записи данных.

Таблица 2.4. Файловые системы, поддерживаемые в ОС Linux
Файловая система Описание
affs Файловая система Amiga
ext Расширенная файловая система
ext2 Вторая расширенная файловая система
hpfs Высокопроизводительная файловая система OS/2
iso9660 Файловая система ISO 9660 ( для CD-ROM)
minix Файловая система ОС MINIX
msdos Система FAT16 компании Microsoft
ncp Файловая система компании NetWare
nfs Сетевая файловая система
proc Доступ к системной информации
smb Файловая система Samba (SMB)
sysv Старая файловая система UNIX
ufs Файловая система ОС Solaris и SunOS
umsdos UNIX-подобная файловая система поверх MS-DOS
vfat Файловая система ОС Windows 95
xia Система подобная ext2. Не используется

Любой жесткий диск для использования системой 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 по мере монтирования и использования какой-либо файловой системы кэширует информацию о ней в памяти.

Valentin Diduk
Valentin Diduk
Украина, одесса, кпи, 2010
Евгений Олабин
Евгений Олабин
Беларусь, Гродно