Материал: 6261

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

 

111

/var/spool

Данные, обработка которых отложена (статьи из групп

 

новостей, документы посланные на печать, письма, которые не

 

удалось сразу послать из-за проблем со связью и другие).

/var/state

Данные, имеющие отношение к состоянию программ, напри-мер,

 

backup-файлы, файлы текстовых редакторов, конфигура-ции,

 

имеющие отношение ко всей системе и прочее.

/var/tmp

Временные файлы, которые не должны регулярно уничтожаться

 

системой.

/var/yp

Файлы системы NIS (Network Information Services).

Замечание

Видимое пользователям дерево ФС отличается от дерева ФС доступного ядру ОС:

•ядро ОС «видит» дерево виртуальной ФС (VFS);

•пользователь «видит» только ветвь дерева, объявленного для пользователя как корень root;

•современная тенденция контейнерная технология склоняется к минимизации видимой части ФС, повышая ее защищенность.

Управление видимостью дерева ФС осуществляется с помощью утилиты chroot. В частности, она используется во время выполнения процедуры login.

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

Следующий аспект работы пользователя состоит в том, что он всегда находится в

некоторой точке ФС, которая связана с некоторой ее директорией:

•чтобы определить, где находится пользователь, следует использовать команду pwd, которая в качестве результата возвратит имя директории;

•чтобы перемещаться по ФС, пользователь должен использовать команду: cd [директория],

где аргумент команды обрабатывается по следующим правилам:

•отсутствие аргумента делает текущей директорию, заданную системной переменной HOME;

•аргумент, начинающийся символом /, задает абсолютные координаты директории, начиная от корня ФС;

•аргумент, начинающийся любым допустимым символом, отличным от /,

задает относительные координаты директории, начиная от текущей директории;

•для уточнения использования относительной адресации, можно использовать аргумент ./директория;

•для относительной адресации от родительской директории, можно использовать аргумент ../директория

112

Наиболее распространенные команды для работы с директориями:

•mkdir директория; - создание директории;

•rmdir директория; - удаление директории;

•ls [опции] [шаблон]; - вывод на консоль списка файлов и директорий;

•cat файл; - вывод содержимого файла на консоль.

Например,

$ ls -l

 

 

 

 

 

 

 

 

итого 864

 

 

 

 

 

 

 

 

drwxrwxrwx

5

root root

4096

окт.

6

2013

asu11upk3

drwxrwxrwx

3

root root

4096

июля

28

2013

asu12upk

-rw-rw-r--

1

vgr

vgr

18

дек.

22

2012

asu_tmp

drwxrwxr-x

2

vgr

vgr

4096

июня

1

02:32

bin

drwxrwxr-x

2

vgr

vgr

4096

дек.

26

2012

bin.old

-rw-r--r--

1

vgr

vgr

5860

янв.

5

2013

casper.log

-rw-rw-r--

1

vgr

vgr

180

сент. 18

2012

demo2.txt

-rw-rw-r--

1

vgr

vgr

490

сент. 18

2012

demo.txt

…

 

 

 

 

 

 

 

 

$

 

 

 

 

 

 

 

 

Кроме специального назначения директории /dev, о которой говорилось ранее, ФС имеет директорию /proc, в которую монтирована файловая система proc. В ней содержатся множество файлов, содержащих информацию о параметрах или функциональных возможностях ядра ОС.

Например, чтобы узнать, какие типы ФС поддерживает ядро ОС, можно выполнить:

$ cat /proc/filesystems

nodev

sysfs

nodev

rootfs

nodev

bdev

nodev

proc

nodev

cgroup

nodev

cpuset

nodev

tmpfs

nodev

devtmpfs

nodev

debugfs

nodev

securityfs

nodev

sockfs

nodev

pipefs

nodev

anon_inodefs

nodev

devpts

 

ext3

 

ext4

nodev

ramfs

nodev

hugetlbfs

113

 

vfat

nodev

ecryptfs

 

fuseblk

nodev

fuse

nodev

fusectl

nodev

pstore

nodev

mqueue

$

 

Данный пример хорошо показывает, что не все типы ФС подразумевают наличие «физических» (блочных) устройств.

Другой пример, - файл /proc/cmdline, который содержит список параметров, переданных ядру во время загрузки ОС:

$cat /proc/cmdline

BOOT_IMAGE=/boot/vmlinuz-3.5.0-21-generic root=/dev/sda5 ro

$

Замечание

Последний пример - чисто демонстрационный. Студенту самостоятельно следует определить и описать содержимое файла /proc/cmdline.

4.8 Модули и драйверы ОС

Ядро ОС — это большая программа, работающая в собственном защищенном (привелигированном) режиме.

Любой процесс работает в режиме пользователя. Потому, любой процесс имеет доступ к устройствам только через ядро ОС.

Чтобы работать с конкретным устройством, ядро ОС имеет специальное ПО, которое называется драйвером.

ПО драйвера имеет два интерфейса:

•интерфейс вызова драйвера ядром ОС, который использует концепцию узла ФС или node, подразделяя устройства на символьные и блочные;

•интерфейс устройства, который использует сам драйвер для работы с конк-

ретным устройством через общую шину ЭВМ. Принципиальная разница между этими интерфейсами:

•интерфейс вызова драйвера ядром ОС определяется разработчиками ОС и

различается от ее типа: разный интерфейс для разных ОС;

•интерфейс устройства определяется архитектурой аппаратной части ЭВМ

и конструктивными особенностями конкретного устройства.

Учитывая большое разнообразие архитектур аппаратной части ЭВМ, драйверы традиционно пишутся в виде модулей, которые хранятся в ФС ОС и загружаются

114

по мере необходимости.

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

Идея использования модулей ядра — очень привлекательна:

•для разработки любого ПО используются средства разработки, которые сами являются ПО и могут функционировать только в среде уже загруженной ОС;

•статически скомпилированный драйвер может вступить в конфликт с архитектурой аппаратной части ЭВМ, что может сделать ядро ОС неработоспособным;

•стремление уменьшить размер ядра ОС, которое является актуальным для встроенных (embedded) систем или в проектах микроядерной архитектуры ОС.

Для создания модулей в ОС Linux разработана специальная технология, которая широко освещена в соответствующей литературе. Например, корпорация IBM на сайте http://www.ibm.com/developerworks/ru/library/l-linux_kernel_01/ выпустила более 70ти статей, посвященных этой тематике.

В общем случае, модуль — системное ПО ОС, которое не обязательно является драйвером. Главное, что это ПО предназначено для работы в защищенном режиме пространства ядра ОС.

Использование модулей предполагает учет их особенностей:

•управление модулями из режима пользователя осуществляется утилитами insmod, rmmod, lsmod, modinfo и modprobe;

•разработка модулей предполагает знание не только технологии их написания и отладки, но также - архитектуры и ПО ядра ОС;

•вывод информации в пространство пользователя модуль осуществляет посредством функции printk(...), которая записывает сообщение в файл

/var/log/messages;

•для просмотра сообщений модулей ядра используется утилита dmesg;

•файлы конфигурации и сами модули находятся в директориях ФС: /etc и

/lib/modules.

4.9Системные вызовы ОС по управлению устройствами и ФС

Один из общепринятых способов повышения мобильности ПО - обеспечение стандартизации окружения приложений. Это подразумевает стандартизацию ПО ОС, утилит и программных интерфейсов саих приложений. Таким средством является

115

стандарт POSIX (Portable Operating System Interface), который описывает различные интерфейсы операционной системы.

Название POSIX предложено известным специалистом, основателем Фонда свободного программного обеспечения, Ричардом Столмэном. Наиболее современная версия стандарта POSIX, в редакции 2003 г., основана на Техническом стандарте

Open Group IEEE Std 1003.1 и на международном стандарте ISO/IEC 9945.

По состоянию на 2001 год, стандарт содержал следующие четыре части:

1.основные определения (термины, концепции и интерфейсы, общие для всех частей);

2.описание прикладного программного C-интерфейса к системным сервисам;

3.описание интерфейса к системным сервисам на уровне командного языка и служебных программ ;

4.детальное разъяснение положений стандарта, обоснование принятых решений.

Вдальнейшем, накапливались и были внесены многие мелкие исправления, учтенные в редакции 2003 года.

Стандарт POSIX - обязательный элемент современной дисциплины разработки прикладных систем.

Таким образом, рассмотрев основные понятия и требования стандарта POSIX, мы можем перейти к непосредственному обсуждению системных вызовов ОС. На рисунке 1.9, приведен список системных вызовов ОС, разделенных на группы:

•управление процессами;

•управление файлами;

•управление каталогами и файловыми системами;

•разные, которые нельзя полностью отнести к предыдущим группам.

Непосредственно к нашей теме, относятся группы управление файлами, а также управление каталогами и файловыми системами.

Примеры предыдущего раздела показывают, что зная структуру необходимых данных, можно одни функции реализовать через другие, «более мелкие», но общая парадигма системного ПО требует отношение к ним как к функциям одного уровня.

Замечание.

Непосредственное применение системных вызовов предполагает изучение правил их вызова с использованием утилиты man, которая, собственно говоря, и была создана для этих целей.

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

Источник: https://studfile.net/preview/16438529/