|
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.
Ядро ОС — это большая программа, работающая в собственном защищенном (привелигированном) режиме.
Любой процесс работает в режиме пользователя. Потому, любой процесс имеет доступ к устройствам только через ядро ОС.
Чтобы работать с конкретным устройством, ядро ОС имеет специальное ПО, которое называется драйвером.
ПО драйвера имеет два интерфейса:
•интерфейс вызова драйвера ядром ОС, который использует концепцию узла ФС или 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.
Один из общепринятых способов повышения мобильности ПО - обеспечение стандартизации окружения приложений. Это подразумевает стандартизацию ПО ОС, утилит и программных интерфейсов саих приложений. Таким средством является
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, которая, собственно говоря, и была создана для этих целей.
Наряду с низкоуровневыми системными вызовами, для работы с файлами и файловыми системами, используются более высокоуровневые функции, которые обеспечивают буферизованный ввод-вывод и подробно изложены в любом учебнике по языку С.