Все  системные  действия выполняет  ядро  операционной  системы
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) - проверку и ремонт
файловых систем..



Раздел диска, в котором создана файловая система, разбит на три
части.

СУПЕРБЛОК. Занимает 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: Tue, 27 Jun 2023 07:24:34 GMT