Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
46
Добавлен:
10.05.2014
Размер:
919.55 Кб
Скачать

Функционирование ос unix.

ОС UNIX функционирует как система разделения времени, предусматривающая одновременную работу нескольких пользователей, каждый из которых обладает терминальным устройством. Через терминал пользователь общается с системой, передает запросы на выполнение требуемых функций, получает результаты их работы. С терминалом связанны се процессы запущенные пользователем. Пользовательский терминал по умолчанию считается стандартным вводом/выводом. При взаимодействии с ОС UNIX пользователь может обращаться к большому количеству файлов. Настройка среды при входе в систему обеспечивает установку, в качестве текущего, начального каталога пользователя. Начальный каталог как бы определяет поддерево файловой системы, непосредственно доступное пользователю, как его владельцу или члену группы. Тем самым ограничивается набор файлов файловой системы, непосредственно доступных пользователю.

pwd - определение текущего каталога

ls - получение файлов текущего каталога.

Диалог в ОС UNIX обеспечивается специальной программой-интерпретатором shell, которая составляет неотъемлемую часть среды выполнения каждого пользователя. Интерпретатор shell воспринимает команды, посылаемые с терминала, контролирует их и затем, если не обнаруживает ошибок, выполняет. Выполнение отдельной команды может рассматриваться как инициация определенной программы или группы взаимосвязанных программ, обеспечивающих ее реализацию.

Начальная загрузка и выход на интерактивный режим в ОС UNIX

Для выполнения начальной загрузки необходим диск, содержащий в первом блоке программу загрузчик. Эта программа, при соответствующей инициации (обычно аппаратными средствами), считывается в память. Работа этой программы заключается в отыскании и чтении в ОП ядра ОС. Сначала загрузчик копирует в себя фиксированный адрес памяти в старших адресах, чтобы освободить нижнюю память для ОС. Загрузившись, он считывает корневой каталог с диска. Затем считывает ядро ОС и передает ему управление. Начальная программа ядра устанавливает указатель стека, определяет тип ЦП, вычисляет количество имеющейся в наличии ОП, запрещает прерывания, разрешает работу диспетчера процессов и запускает основную процедуру инициации (генерации ОС). Далее процесс инициализации разбивается на две фазы:

  • инициализация ядра;

  • инициализация системы.

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

Процесс 0 является системным процессом т.к. он постоянно находится в основной памяти и активен только тогда, когда процессор находится в состоянии «система» (всего три состояния: «ожидание», «процесс», «система»). Процесс 0 продолжает инициализацию, осуществляя монтирование основной файловой системы. После образования процесса 0 ядро создает процесс с идентификатором 1 и идентификатором 2 (страничный демон). Процесс 1 создается по упрощенной схеме, т.е. использованием fork, и служит для загрузки в основную память программы из файла /etc/init. Ядро по системному вызову exec считывает в процедурный сегмент процесса 1 программу, которая в будущем обеспечит активизацию из файла /etc/init. На этом инициализация ядра завершается.

Инициализация системы начинается с передачи управления диспетчеру процессов, который выбирает единственный активный процесс с идентификатором 1 и передает управление программе, размещенной в его процедурном сегменте. Процесс 1 по системному вызову exec на место своего процедурного сегмента считывает программу init. Она может создавать 2 типа режимов организации процессов:

1) однопользовательский;

2) многопользовательский.

Процесс init прежде всего инициирует начало работы интерпретатора shell для привелигированного пользователя. При выходе из однопользовательского режима создается многопользовательская среда. Активизация shell делает его доступным для всех пользователей системы. Для каждого активного канала связи порождается процесс getty. При вводе в систему по какому-либо каналу он выдает сообщение: Имя (login) и пароль (password)

Интерактивный режим работы в ОС UNIX.

Рассмотрим, как система обрабатывает команды.

Для простоты пусть в системе работает один пользователь. Ввод происходит в режиме накопления.

Рисунок 21

1) Входим в систему и набираем ls имя команды + enter;

2) Далее управление передается интерпретатору shell, который анализирует введенный текст. Если в этот момент будет зафиксирована ошибка (неправильно набрана команда), то интерпретатор проинформирует об этом пользователя, выдав соответствующее сообщение, и снова вернет приглашение для ввода командной строки;

3) Если команда была задана корректно, то shell по средствам системного вызова fork (fork не осуществляется для встроенных вызовов) порождает новый процесс. Ядром системы выполняются стандартные действия, в том числе в таблицу процессов заносится запись о новом процессе;

4) Затем из shell выполняется системный вызов exec;

5) В каталоге /bin/ отыскивается файл с именем Is и загружается в основную память;

6) Сразу после порождения нового процесса (4) оба они: и процесс-отец (shell) и процесс-сын (Is) - начинают конкурентную борьбу за ресурсы системы. Но shell, будучи особым процессом, порождает другие процессы с меньшим приоритетом. Поэтому после порождения процесса управление вернется в shell, и он сможет выполнить системный вызов exec. После его выполнения уже нельзя с определенностью сказать, какой процесс shell или ls получит управление. Если окажется, что shell, то его необходимо приостановить, чтобы дать возможность выполниться процессу ls(в рамках системы производится манипуляция идентификаторами);

7) Приостановка shell достигается с помощью системного вызова wait. В этой точке выполнение процесса shell прекратится, и он будет ожидать завершения работы процесса ls. После остановки shell начинает работу ядро ОС. Диспетчер процессов определяет процесс, который надо активизировать следующим. Т.к. в нашем случае других готовых к выполнению процессов кроме ls нет, ему и будет передано управление;

8) Процесс ls начинает работу по выполнению своих функций;

9) В то время процесс shell будет находиться в состоянии ожидания.

10) При выполнении процесса ls ему надо будет вводить результаты свой работы на экран терминала. Т.к. в ОС UNIX все программы выполняются последовательно, для их параллельного выполнения требуется создание новых процессов;

11) Т.е. программа вывода должна выполняться параллельно. Выполнение процесса ls завершается системным вызовом exit;

12) Ядро системы по взаимодействию пары системных вызовов wait, exit переводит процесс shell в состояние готовности. Ввиду отсутствия других готовых процессов активирует его;

13) Интерпретатор shell выполняет завершающее действие по обработке ts;

14) Shell выдает на экран терминала приглашение для ввода следующей команды;