Unix, базовые принципы и особенности
Все системные действия выполняет ядро операционной системы
Unix. Ядро - обычный выполняемый файл, расположен в файле /unix
или /stand/unix или /vmunix или /vmlinuz (в зависимости от кон-
кретной реализации). Можете посмотреть размер этого файла - не
маленький. При начальной загрузке системы ядро целиком загружа-
ется в оперативнную память и в дальнейшем резидентно находится
в ней, выполняя все необходимые работы.
Что входит в ядро.
ДРАЙВЕРЫ УСТРОЙСТВ. И тех, которые есть, и тех, которых нет, но
могут быть, а также и такие, которые никогда вам не
понадобятся.
УПРАВЛЯЮЩИЕ ПОДПРОГРАММЫ: части кода, ответственные за
обеспечение работы пользовательских программ - разделение
времени и прочих ресурсов системы.
СЛУЖЕБНЫЕ ТАБЛИЦЫ И ДАННЫЕ ЯДРА: таблицы текущих процессов, от-
крытых файлов, управляющие структуры...
СИСТЕМНЫЕ ВЫЗОВЫ. (То, что MS-DOS называется "21 прерывание",
можно считать некоторой аналогией/пародией на системные
вызовы.) С точки зрения программиста это обычная си-шная
функция, только выполняет она системно-зависимые действия,
например: прочитать данные из файла, установить сетевое
соединение, создать каталог, и т.д. и т.п. Все системные вызовы
( а всего их более 1500 штук ) вкомпилированы в тело ядра Unix.
Пользовательские программы, вызывающие функции, являющиеся
системными вызовами, на самом деле содержат только jump'ы на
соответствующие адреса памяти в ядре. В пользовательскую
программу системные вызовы не влинковываются.
Что находится в оперативной памяти.
ЯДРО ОПЕРАЦИОННОЙ СИСТЕМЫ.
БУФЕРНЫЙ КЭШ. Часть оперативной памяти резервируется под кэши-
рование чтения и записи на диск. Любая операция чтения с диска
приводит к тому, что прочитанные блоки помещаются в буферный
кэш, а из него уже передаются запросившим данные программам.
Если блок попал в кэш, то все последующие обращения к нему бу-
дут получать образ блока из кэша, причем независимо от того -
та же самая программа обращается к блоку или какая-либо дру-
гая. Кэшируется также и запись на диск, опять же, разделяемая
между всеми выполняемыми программами.
ПРОЦЕССЫ. Процессом в Unix называется выполняющаяся программа.
Средства экономии памяти. Виртуальная память.
РЕЕНТЕРАБЕЛЬНОСТЬ КОДА. Когда одна и та же программа(выполня-
емый файл) запущена в нескольких экземплярах, то в оперативную
память загружается только одна копия выполняемого ассемблерного
кода на всех. Каждый выполнямый процесс использует один и тот
же текст программы, просто у каждого процесса имеется свой соб-
ственный указатель на текущий оператор.
РАЗДЕЛЯЕМЫЕ БИБЛИОТЕКИ. (В Windows есть похожее понятие DLL -
динамически подгружаемая библиотека). Некоторое количество час-
то выполняемых функций (например, printf, да и много других)
оформляется в виде специальным образом подготовленной библиоте-
ки (SHARED LIBRARY). При компиляции программы, использующей
разделяемые библиотеки, эти функции не линкуются внутрь кода
программы. Они "выдергиваются" из библиотеки на стадии
выполнения программы. Этим мы экономим место на диске и в
оперативной памяти: в программах отсутствует код разделяемых
функций, а в оперативной памяти эта функция присутствует в
одном экземпляре на всех.
SWAPING. Каждый Unix-процесс функционирует в своем собственном
32-х битном виртуальном адресном пространстве, не пересекающем-
ся с другими. Адресное пространство процесса может быть боль-
шим, чем физическая оперативная память. Виртуальная память под-
держивается с помощью PAGING'а - разрешения виртуальных адресов
в физические "на лету", с подкачкой отсутствующих страниц
памяти со swap-области на жестком диске.
На самом деле SWAPING'а как такового в Unix'е нет, вместо него
применяется гораздо более гибкий PAGING. (swaping - по опреде-
лению, это ПОЛНАЯ выгрузка программы на swap-область с целью
освобождения места в оперативной памяти).
Область памяти, занятая программой, разделена на три части: TEXT
(выполняемые коды программы), DATA (статические данные програм-
мы), STACK (динамические данные). Когда операционка освобождает
место в памяти за счет TEXT'а, то она не занимается сбросом
его на диск. Она сразу помечает его как свободный. Действи-
тельно, когда потребуется загрузить TEXT обратно в память, его
можно будет взять из самого выполняемого файла с программой.
Такая экономия имеет один побочный эффект. Файл программы, ко-
торая в данный момент выполняется, невозможно уничтожить. Опе-
рационная система сообщит в этом случае: "text file busy", и
откажется выполнять удаление.
БИТ НАВЯЗЧИВОСТИ. (sticky bit). Выполняемая программа может
иметь дополнительный атрибут. Так называемый "бит навязчивос-
ти". Когда такая программа заканчивает выполнение, операционка
(по возможности) старается не занимать память, в которой нахо-
дился текст программы. Соответственно, повторный ее запуск про-
изойдет очень быстро - ведь программа все еще загружена в па-
мять, ее не требуется зачитывать с диска. Нужно просто передать
на нее управление.
Файловая система в Unix - "деревянная", состоит из файлов и
каталогов. На каждом разделе диска создается собственная неза-
висимая файловая система. Отдельные файловые системы "сцепляют-
ся" вместе, в единое общее дерево директорий. Такая операция
называется "монтированием". Выглядит это примерно так:
mount -F ufs /dev/dsk/m197_c0d0s5 /home1
mount -F ufs /dev/dsk/m197_c0d0s4 /usr
df
Получить доступ к файлам "несмонтированной" файловой системы
невозможно. Порочная пракика MS-DOSа - сколько разделов, столь-
ко и "дисков" ( a: b: c: d: e: ... k: l: m: n:) в Unix не при-
меняется. В Unix всегда есть ровно одно общее дерево каталогов,
и, по большому счету, пользователям совершенно все равно, на
каком именно диске или разделе диска расположены его файлы
/usr/spool/moshkow или /home1/moshkow/bin/mcopy ...
Файловая система Unix кэшируется буферным кэшем. Операция запи-
си на диск выполняется не тогда, когда это приказывает выполня-
емый процесс, а когда операционная система сочтет нужным это
сделать. Это резко поднимает эффективность и скорость работы с
диском, и повышает опасность ее использования. Выключение
питания на "горячей", работающей Unix-машине приводит к
разрушениям структуры файловой системы.
При каждой начальной загрузке Unix проверяет - корректно ли бы-
ла выключена машина в прошлый раз, и если нет - автоматически
запускает утилиту fsck (File System Check) - проверку и ремонт
файловых систем..
Внутренняя структура файловой системы Unix
Раздел диска, в котором создана файловая система, разбит на три
части.
СУПЕРБЛОК. Занимает 1 Kb.
Содержит служебную информацию:
Тип файловой системы,
Размер
Начало списка свободных блоков.
. . . что-то еще
ОБЛАСТЬ INOD-ов. Занимает примерно 8% общего размера раздела.
inode - Index-node - описатель файла. Он содержит всю информа-
цию о файле, за исключением имени файла, и собственно данных
файла. В inod'е хранится:
тип файла (файл, каталог, именованный канал, специальный файл)
кто владелец
права(атрибуты) файла
время модификаци/создания файла
адреса блоков, из которых состоит файл
что-то еще ...
ОБЛАСТЬ ДАННЫХ. В этой области расположенвИРТУАЛЬНАЯЯы блоки с данными фай-
лов. Незанятые блоки провязаны в СПИСОК СВОБОД-
НЫХ БЛОКОВ
Файлы бывают двух основных типов. ФАЙЛ, КАТАЛОГ.
ФАЙЛ - он и есть файл.
КАТАЛОГ - файл фиксированного формата: состоит из строчек с
именами файлов, входящих в каталог
имя_файла1 Номер_Инода1
имя_файла2 Номер_Инода2
. . .
Чтобы получить доступ к файлу по имени, операционная система
1. находит это имя в каталоге, содержащем файл,
2. берет Номер_Инода файла,
3. по номеру находит inod в области inod'ов,
4. из inod'а берет адреса блоков, в которых расположены данн-
ые файла,
5. по адресам блоков считывает блоки из области данных.
Все.
Формат индексного описателя файла.
Область инодов разбита на 64-х байтные структуры - inod'ы.
В inod'е хранится:
Тип файла (файл/каталог/специальный файл/fifo/socket)
Атрибуты (права доступа)
Владелец файла
Группа-владелец файла
Времена создания, модификации, последнего доступа к файлу
Длина файла
Адрес 1-го блока файла
Адрес 2-го блока файла
...
Адрес 10-го блока файла
Адрес блока косвенной адресации (блока с 256 адресами блоков)
Адрес блока 2-й косвенной адресации
(блока с 256 адресами блоков с адресами)
Адрес блока 3-й косвенной адресации
(блока с адресами блоков с адресами блоков с адресами)
Точный формат структуры файловой системы см.
man fs
Last-modified: Sun, 07 Aug 2005 11:19:51 GMT