2. Общая характеристика ОС семейства Unix. Основные компоненты (структура) Unix-системы. Виды программ (процессов) в Unix.

Unix - это семейство операционных систем (ОС), обладающих сходной архитектурой и интерфесом с пользователем. Unix как явление зародилось в начале 70-х годов и развивается до сих пор. Основные современные варианты UNIX: Linux, BSD (FreeBSD, NetBSD, OpenBSD), AIX, HPUX, Solaris, SCO. Важнейшие современные стандарты, обеспечивающие целостность семейства UNIX:

Классическая архитектура UNIX двухуровневая:

  1. Ядро - управляет ресурсами компьютера и предлагает программам базовый набор услуг (системные вызовы).
  2. Системные программы (управление сетью, терминалами, печатью), прикладные программы (редакторы, утилиты, компиляторы и т.д.).

Функции ядра:

Ядро изолирует программы пользователя от аппаратуры. Все части системы, не считая небольшой части ядра, полностью независимы от архитектуры компьютера и написаны на Си. Системные вызовы - это уровень, скрывающий особенности конкретного механизма выполнения на уровне аппаратуры от программ пользователя. Для программиста, системный вызов - это функция (определенная на Си), которую он вызывает в своей программе. Все низкоуровневые операции осуществляются через системные вызовы.

Подсистемы ядра:

  1. Файловая подсистема. Обеспечивает унифицированный доступ к файлам:
    • контроль прав доступа к файлу;
    • чтение/запись файла;
    • размещение и удаление файла;
    • перенаправление запросов к периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.
  2. Подсистема управления процессами. Запущенная на выполнение программа порождает один или несколько процессов (задач). Подсистема контролирует:
    • создание и удаление процессов
    • распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами
    • синхронизация процессов
    • межпроцессное взаимодействие Специальная задача ядра планировщик процессов разрешает конфликты процессов в конкуренции за ресурсы.
  3. Подсистема ввода/вывода. Выполняет запросы файловой системы и подсистемы управления процессами для доступа к периферийным устройствам (дискам, лентам, терминалам). Обеспечивает буферизацию данных и взаимодействует с драйверами устройств.

Типы процессов

Системные процессы. Системные процессы являются частью ядра и всегда расположены в оперативной памяти. Системные процессы не имеют соответствующих им программ в виде исполняемых файлов и запускаются особым образом при инициализации ядра системы. Выполняемые инструкции и данные этих процессов находятся в ядре системы, таким образом они могут вызывать функции и обращаться к данным, недоступным для остальных процессов. Системными процессами являются: shed (диспетчер свопинга), vhand (диспетчер страничного замещения), bdfflush (диспетчер буферного кэша) и kmadaemon (диспетчер памяти ядра). К системным процессам следует отнести init, являющийся прародителем всех остальных процессов в UNIX. Хотя init не является частью ядра, и его запуск происходит из исполняемого файла (/etc/init), его работа жизненно важна для функционирования всей системы в целом.

Демоны. Демоны — это неинтерактивные процессы, которые запускаются обычным образом — путем загрузки в память соответствующих им программ (исполняемых файлов), и выполняются в фоновом режиме. Обычно демоны запускаются при инициализации системы (но после инициализации ядра,) и обеспечивают работу различных подсистем UNIX: системы терминального доступа, системы печати, системы сетевого доступа и сетевых услуг и т. п. Демоны не связаны ни с одним пользовательским сеансом работы и не могут непосредственно управляться пользователем. Большую часть времени демоны ожидают пока тот или иной процесс запросит определенную услугу, например, доступ к файловому архиву или печать документа.

Прикладные процессы. К прикладным процессам относятся все остальные процессы, выполняющиеся в системе. Как правило, это процессы, порожденные в рамках пользовательского сеанса работы. С такими процессами вы будете сталкиваться чаще всего. Например, запуск команды ls(l) породит соответствующий процесс этого типа. Важнейшим пользовательским процессом является основной командный интерпретатор (login shell), который обеспечивает вашу работу в UNIX. Он запускается сразу же после вашей регистрации в системе, а завершение работы login shell приводит к отключению от системы.

Пользовательские процессы могут выполняться как в интерактивном, так и в фоновом режиме, но в любом случае время их жизни (и выполнения) ограничено сеансом работы пользователя. При выходе из системы все пользовательские процессы будут уничтожены. Интерактивные процессы монопольно владеют терминалом, и пока такой процесс не завершит свое выполнение, пользователь не сможет работать другими приложениями. Вы сможете работать с другими приложениями, если в функции интерактивного процесса входит запуск на выполнение других программ. Примером такой задачи является командный интерпретатор shell, который считывает пользовательский ввод и запускает соответствующие задачи.