Перейти к содержимому

Нафиг надо знание Юникса

Диалог из ICQ:

— Девушка на собеседовании будет. Ну ты, в общем, смотри там... Если размер меньше третьего - то нафиг.

— Даже если хороший английский и знание Юникса?

— Да кому это нафиг надо? Третий размер — и не волнует! Ну сам глянь: сколько у нас народа с «хороший английский и знание Юникса»... и сколько с третьим размером?!

Третий размер - и не волнует знание Юникса

ДЛЯ СПРАВКИ

Операционная система UNIX

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

Первой целью при разработке этой системы было стремление сохранить простоту и обойтись минимальным количеством функций. Все реальные сложности оставлялись пользовательским программам.

Второй целью была общность. Одни и те же методы и механизмы должны были использоваться во многих случаях. Поэтому общность в UNIX-системах проявляется во многих аспектах, и в частности:

  • обращения к файлам, устройствам ввода/вывода и буферам межпроцессных сообщений выполняются с помощью одних и тех же примитивов;
  • одни и те же механизмы именования, присвоения альтернативных имен и защиты от несанкционированного доступа применяются к файлам с данными и директориями и устройствам;
  • одни и те же механизмы работают в отношении программно и аппаратно инициируемых прерываний.

Наконец, третья цель заключалась в создании операционной среды, в которой большие задачи можно было бы решать, комбинируя существующие небольшие программы, а не разрабатывая программы заново.
Важным, хотя и простым с позиций его реализации, является тот факт, что система UNIX предоставляет пользователям возможность направить выход одной программы непосредственно на вход другой (речь идет о программных каналах (pipe). См. об этом ниже и в разделе "Конвейеры и очереди сообщений", глава 6). В результате большие программные системы можно создавать путем композиции имеющихся небольших программ, а не путем написания новых, что в большинстве случаев упрощает задачу.

Блок-схема системного ядра ОС UNIX

Резедентная в ОП часть системы называется ядром. На диске ядро оформлено как выполняемый файл, считываемый начальным загрузчиком в ОП, начиная с нулевого адреса. После загрузки ядро получает управление и в дальнейшем постоянно присутствует в ОП, работая в режиме "Система".
На рисунке 17.1 показана блок-схема ядра операционной системы UNIX.


Рис.17.1. Блок-схема ядра операционной системы UNIX.

На рисунке 17.1 показана блок-схема ядра операционной системы UNIX. Ядро содержит системные программы, которые выполняют диспетчерские функции, и управляющие структуры данных, используемые этими программами. Все работы, выполняемые вне ядра, оформлены в виде процессов, работающих режиме "Пользователь"

Отличия ОС UNIX от других систем

ОС UNIXсостоит из ядра с включенными в него драйверами и из утилит. Если надо изменить конфигурацию ОС UNIX, то ядро пересобирают (перелинковывают) из объектных кодов или из исходных текстов. В Windows и OS/2 при загрузке прилинковывают драйверы, при этом компактность собранного ядра и повторное использование общего кода на порядок ниже, чем у UNIX. Компактность кода особенно важна, т.к. ядро и драйверы никогда не свопируются на диск. UNIX - это ОС, которая на данный момент поддерживает наибольшее число платформ.
ОС UNIX предназначена для квалифицированного администратора, т.к. требует знаний принципов функционирования происходящих в ней процессов. ОС UNIX отличается высокой надежностью функционирования, это обеспеченно за счет жесткого разделения памяти и реальной многозадачности.
Практически все протоколы, на которых основан Internet, ориентированы под ОС UNIX (TCP/IP).

Функции ОС UNIX, особенности её построения - принцип иерархии

К основным функциям операционной системы UNIX можно отнести следующее:

  1. Обработка прерываний.
  2. Создание и уничтожение процессов.
  3. Переключение процессов из одного состояния в другое.
  4. Диспетчеризация.
  5. Приостановка и активизация процессов.
  6. Синхронизация процессов.
  7. Организация взаимодействия между процессами.
  8. Манипулирование блоками управления процессами.
  9. Поддержка операции ввода-вывода.
  10. Поддержка операции распределения и перераспределения памяти.
  11. Поддержка работы файловых систем.
  12. Поддержка механизма вызова-возврата по обращению к процедурам.

В структуре можно выделить три основные части:

  1. Самая низкоуровневая часть ОС - специальные средства для управления конкретными аппаратными и программными ресурсами, специфичными для данной конкретной платформы.
  2. Более высокий уровень - уровень конкретных служебных программ и языков программирования. На этом уровне система получает ресурсы через обращение к ядру ОС (т.е. по прерываниям).
  3. Уровень вспомогательных процедур, интерпретаторов, компиляторов. На данной основе строятся пользовательские приложения (текстовые редакторы, графические интерфейсы и собственно приложения).

На рисунке 17.2 представлена структура ОС UNIX.

Рис.17.2. Структура ОС UNIX.

cpp - компилятор языка Си;

sh - уровень интерпретатора языка Shell;

vi - текстовый редактор;

who - команда для просмотра списка зарегистрированных в системе пользователей и исполнения их программ;

grep - команда, позволяющая искать файлы по их содержимому и другие.

Жизненый цикл процесса в ос UNIX.

На рисунке 12.1 представленна блок-схема жизненного цикла процесса в ОС UNIX.


Рис.12.1.Блок схема жизненного цикла процесса в ОС UNIX.

Пояснения к схеме :

1 - процесс выполняет инструкции программы (USER RUNNING);
2 - процесс выполняет системный вызов (KERNEL RUNNING);
3 - процесс готов к выполнению (READY_TO_RUN);
4 - процесс "спит" и ждет события (ASLEEP_IN_MEMORY);
5 - процесс готов к выполнению, но он находится на внешнем носителе (т.е. выгружен) (READY_TO_ RUN, SWAPPED);
6 - процесс "спит" и находится на внешнем носителе (SLEEP, SWOPPED);
7 - процесс только что создан (процесс родился) (CREATED);
8 - процесс уничтожен, завершен (ZOMBIE);
9 - процесс прерван по приоритету (PREEMPTED).

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

УПРАВЛЕНИЕ ПРОЦЕССАМИ В ОС UNIX

Схемы взаимодействия между процессами соответствуют механизму сопрограмм. Использование сопрограмм упрощает логику ядра системы и требует одного выделенного процесса, который создается нестандартным образом. С него начинается работа системы после запуска. В ОС UNIX этот процесс называется "диспетчерским" ("swapper"), он не имеет пользовательской фазы.
Все процессы в ОС UNIX, кроме диспетчерского, создаются операцией "Порождение". В этой операции участвуют два процесса: порождающий и порожденный. Порождающий выполняет системный вызов (fork), в результате появляется порожденный процесс.

Адресное пространство процесса состоит из 3 сегментов:

  • текстового сегмента (инструкции);
  • cегмент данных;
  • сегмент стека.

Управление процессами осуществляется в ОС UNIX с помощью двух структур.

1. PROC-STRUCTRE (блок управления процессом). Составляющие блока:

  • состояние процесса;
  • размер и адрес процесса;
  • кому принадлежит процесс;
  • идентификация процесса;
  • канал ожидания;
  • поле сигналов;
  • таймер и счетчик используемого времени.

2. USER-STRUCTRE (структура использования)- содержит информацию о процессе, которая должна быть доступна только на уровне исполнения. Содержание структуры:

  • параметры ввода-вывода (I/O), т.е. адреса буферов и т.д.;
  • окружение в файловой системе (текущий каталог, коренной каталог);
  • таблица открытых файлов;
  • код возврата, номера ошибок;
  • поле сигналов (информация, как надо реагировать на сигнал).

В ОС UNIX нет разницы между задачами и заданиями. Работы в системе представлены множеством конкурирующих процессов. Процесс строго последователен, нельзя выполнять асинхронные действия внутри процесса. Даже операция I/O не может быть выполнена асинхронно.
Распределением ресурсов между процессами занимается ядро ОС. Программы ядра выполняются от имени процесса. Процесс может находится: в режиме пользователя или в режиме системы.
На рисунке 12.2 приведена таблица связи между структурами.

Рис.12.2. Таблица связи между структурами.