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.

Файловая система в 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