2. Общая характеристика ОС семейства Unix. Основные компоненты (структура) Unix-системы. Виды программ (процессов) в Unix.
Unix - это семейство операционных систем (ОС), обладающих сходной архитектурой и интерфесом с пользователем. Unix как явление зародилось в начале 70-х годов и развивается до сих пор. Основные современные варианты UNIX: Linux, BSD (FreeBSD, NetBSD, OpenBSD), AIX, HPUX, Solaris, SCO. Важнейшие современные стандарты, обеспечивающие целостность семейства UNIX:
- POSIX - Portable Operating System Interface
- ANSI C (c89 и с99)
Классическая архитектура UNIX двухуровневая:
- Ядро - управляет ресурсами компьютера и предлагает программам базовый набор услуг (системные вызовы).
- Системные программы (управление сетью, терминалами, печатью), прикладные программы (редакторы, утилиты, компиляторы и т.д.).
Функции ядра:
- инициализация системы - загрузка и запуск ОС
- управление процессами и потоками
- управление памятью - отображение адресного пространства на физическую память, совместное использование памяти процессами
- управление файлами - реализует понятие файловой системы, дерева каталогов и файлов
- обмен данными между процессами выполняющимися внутри одного компьютера, в разных узлах сетей передачи данных, а также между процессами и драйверами внешних устройств
- программный интерфейс (API) - обеспечивает доступ к возможностям ядра со стороны процессов пользователя через системные вызовы, оформленных в виде библиотеки функций на Си.
Ядро изолирует программы пользователя от аппаратуры. Все части системы, не считая небольшой части ядра, полностью независимы от архитектуры компьютера и написаны на Си. Системные вызовы - это уровень, скрывающий особенности конкретного механизма выполнения на уровне аппаратуры от программ пользователя. Для программиста, системный вызов - это функция (определенная на Си), которую он вызывает в своей программе. Все низкоуровневые операции осуществляются через системные вызовы.
Подсистемы ядра:
- Файловая подсистема. Обеспечивает унифицированный доступ к файлам:
- контроль прав доступа к файлу;
- чтение/запись файла;
- размещение и удаление файла;
- перенаправление запросов к периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.
- Подсистема управления процессами. Запущенная на выполнение программа порождает один или несколько процессов (задач). Подсистема контролирует:
- создание и удаление процессов
- распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами
- синхронизация процессов
- межпроцессное взаимодействие Специальная задача ядра планировщик процессов разрешает конфликты процессов в конкуренции за ресурсы.
- Подсистема ввода/вывода. Выполняет запросы файловой системы и подсистемы управления процессами для доступа к периферийным устройствам (дискам, лентам, терминалам). Обеспечивает буферизацию данных и взаимодействует с драйверами устройств.
Типы процессов
Системные процессы. Системные процессы являются частью ядра и всегда расположены в оперативной памяти. Системные процессы не имеют соответствующих им программ в виде исполняемых файлов и запускаются особым образом при инициализации ядра системы. Выполняемые инструкции и данные этих процессов находятся в ядре системы, таким образом они могут вызывать функции и обращаться к данным, недоступным для остальных процессов. Системными процессами являются: shed (диспетчер свопинга), vhand (диспетчер страничного замещения), bdfflush (диспетчер буферного кэша) и kmadaemon (диспетчер памяти ядра). К системным процессам следует отнести init, являющийся прародителем всех остальных процессов в UNIX. Хотя init не является частью ядра, и его запуск происходит из исполняемого файла (/etc/init), его работа жизненно важна для функционирования всей системы в целом.
Демоны. Демоны — это неинтерактивные процессы, которые запускаются обычным образом — путем загрузки в память соответствующих им программ (исполняемых файлов), и выполняются в фоновом режиме. Обычно демоны запускаются при инициализации системы (но после инициализации ядра,) и обеспечивают работу различных подсистем UNIX: системы терминального доступа, системы печати, системы сетевого доступа и сетевых услуг и т. п. Демоны не связаны ни с одним пользовательским сеансом работы и не могут непосредственно управляться пользователем. Большую часть времени демоны ожидают пока тот или иной процесс запросит определенную услугу, например, доступ к файловому архиву или печать документа.
Прикладные процессы. К прикладным процессам относятся все остальные процессы, выполняющиеся в системе. Как правило, это процессы, порожденные в рамках пользовательского сеанса работы. С такими процессами вы будете сталкиваться чаще всего. Например, запуск команды ls(l) породит соответствующий процесс этого типа. Важнейшим пользовательским процессом является основной командный интерпретатор (login shell), который обеспечивает вашу работу в UNIX. Он запускается сразу же после вашей регистрации в системе, а завершение работы login shell приводит к отключению от системы.
Пользовательские процессы могут выполняться как в интерактивном, так и в фоновом режиме, но в любом случае время их жизни (и выполнения) ограничено сеансом работы пользователя. При выходе из системы все пользовательские процессы будут уничтожены. Интерактивные процессы монопольно владеют терминалом, и пока такой процесс не завершит свое выполнение, пользователь не сможет работать другими приложениями. Вы сможете работать с другими приложениями, если в функции интерактивного процесса входит запуск на выполнение других программ. Примером такой задачи является командный интерпретатор shell, который считывает пользовательский ввод и запускает соответствующие задачи.