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

Основные характеристики unix-подобных операционных систем

Структура ОС UNIX

Ядро ОС UNIX состоит из двух секций:

  • секция управляющих структур

  • программная секция.

В секции управляющих структур располагаются таблицы ядра. К ним относятся:

  • таблицы процессов (включает блоки управления);

  • таблицы индексных дескрипторов файлов;

  • таблицы файлов;

  • таблицы связи драйверов;

  • таблица программного текста;

  • таблицы сообщений, семафоров и т.д.

Программная секция состоит из двух частей:

  • диспетчер процессов;

  • диспетчер устройств ввода / вывода.

Функции диспетчера процессов:

  • определение последовательности процессов;

  • обработка системных вызовов;

  • распределение ОП между процессами;

  • обработка сигналов;

  • распределение ресурсов системы.

Эта часть ядра является машинно-независимой и практически не изменяется при переносе с машины на машину. Диспетчер внешних устройств контролирует и обеспечивает передачу информации между основной памятью и внешними устройствами. Эта часть ядра является машинно-зависимой.

В каждый момент времени процессор ЭВМ может находится в одном из трех состояний: 1)система (если выполняет команды ядра); 2)процесс (выполняет команды пользовательского процесса); 3)состояние ожидания (в системе нет процессов, готовых к выполнению).

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

  2. прерывания в/в (Прерывания от устройств ввода / вывода возникает во время окончания обмена информацией между ОП и периферийным устройством, т.е. когда устройство сообщает системе о завершении ввода/ вывода.);

  3. системный вызов.

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

Из состояния «система» в состояние «процесс» система переходит при запуске нового очередного процесса, или когда завершается выполнение системного вызова.

Из состояния «процесс» в состояние «ожидание» - когда заканчивается последний процесс. Из состояния «ожидание» в состояние «система» - когда появляется новый процесс. Из состояния «система» в состояние «ожидание» - нечего выполнять.

Часто объем основной памяти не позволяет разместить в ней все процессы одновременно. Часть процессов располагается во внешней памяти (области свопинга). Свопинг осуществляется диспетчером процессов и состоит в выгрузке процессов на диск и их загрузке в ОП.

Процессы ОС UNIX

Структуру процесса ОС UNIX составляют четыре сегмента:

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

Контекст процесса содержит атрибуты:

  • машинные регистры (область сохранения регистров);

  • состояние системного вызова - информация о текущем системном вызове, включая параметры и результаты;

  • таблица пользовательских дескрипторов файлов;

  • учетная информация - указатель на таблицу, учитывающую процессное время;

  • стек ядра - фиксированный стек для работы процесса в режиме «ядра».

Кроме контекста процесса ядро ОС отслеживает также таблицу процессов, являющихся резидентными (постоянно находящихся в ОП), в которой отслеживаются все активные процессы. Некоторые из них инициируются ядром и являются системными процессами, остальные связаны с пользователями, называются пользовательскими процессами. В таблице процессов содержится информация о блоках управления процессами, т.е. каждая строка является отображением процесса

  1. процедурный сегмент содержит машинные команды и константы;

  2. сегмент данных содержит данные, инициируемые при компиляции, которые могут изменяться в процессе работы процесса;

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

Представителем процесса в ОС является блок управления процессом (дескриптор процесса). Это структура данных, содержащая:

  • идентификатор процесса;

  • текущее состояние;

  • идентификатор родительского процесса;

  • идентификатор пользователя и группы;

  • события, ожидаемые процессом, если они есть;

  • время до истечения интервала будильника;

  • маска, указывает какие сигналы перехватываются, заблокированы, игнорируются;

  • приоритеты;

  • количество времени эксплуатации ЦП;

  • указатели на процедурный сегмент, сегмент данных и динамический сегмент (если используется страничная организация памяти, то указателем на соответствующие им таблицы страниц);

  • указатели внешней памяти (указатели как найти части процесса на диске если его нет в ОП).

В UNIX процессы создаются следующим образом: когда выполняется системный вызов fork, вызывающий процесс обращается в ядро ОС и ищет свободную ячейку в таблице процессов, в которой может записать данные о дочернем процессе. Если свободная ячейка находится, fork копирует туда информацию из родительского процесса. Затем он выделяет память для сегментов данных и динамического сегмента, куда копируется соответствующие сегменты родительского процесса. Контекст процесса копируется вместе с динамическим сегментом. Процедурный сегмент может либо копироваться, либо использоваться совместно, если он доступен только для чтения. Дочерний процесс получает идентификатор, затем настраивается его карта памяти и регистры; ему предоставляется доступ к открытым файлам родительского процесса по средством копирования таблицы пользовательских дескрипторов файлов из контекста родительского процесса. . ,

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

Планирование процессов в ОС UNIX

Определение последовательности выполнения процессов предусматривает два алгоритма, которые работают независимо друг от друга:

  1. низкоуровневый - выбирает следующий процесс из набора процессов в памяти, готовых к работе;

  2. высокоуровневый (swapper) - перемещает процессы из памяти на диск и обратно, т.е. осуществляет свопинг.

В низкоуровневом алгоритме используется несколько очередей. С каждой очередью связан диапазон непересекающихся значений приоритетов. Процессы, выполняющиеся в режиме «процесс» имеют положительное значение приоритетов.

У процессов, выполняющихся в режиме система, значение приоритетов отрицательное. Отрицательное значение приоритетов считается наивысшими. Когда запускается низкоуровневый алгоритм, он ищет очередь, начиная с самого высокого приоритета, т.е. наименьшего отрицательного значения, пока не находит очередь, в которой есть хотя бы один процесс. После этого в этой очереди выбирается и запускается первый процесс. Если процесс использует весь свой квант времени (~100мкс), он помещается в конец очереди, а алгоритм планирования запускается снова. Один раз в секунду приоритет процесса пересчитывается следующим образом:

PRI=CPU+NICE+base

На основе нового приоритета каждый процесс прикрепляется к соответствующей очереди.CPU - среднее значение тиков таймера, в течении которого процесс выполнялся. При каждом тике таймера счетчик использования ЦП процессом увеличивается на 1. потом этот счетчик прибавляется к приоритету процесса, увеличивая его, что соответствует более низкому приоритету.

Пользовательская составляющая приоритета процесса NICE (можно менять самостоятельно) принимает диапазон значений от -20 до +20. С помощью системного вызова nice можно менять приоритет процесса от 0 до 20. Системный администратор может запросить обслуживание с более высоким приоритетом от -20 до 1. Это однозначно увеличивает частоту эксплуатации ЦП этим процессом.

Когда процесс эмулирует прерывание для выполнения системного вызова, он блокируется, пока системный вызов не будет выполнен и процесс не вернется в режим «процесс». Блокировка происходит и при ожидании какого-либо события (wait) и при вводе \ выводе. Когда процесс блокируется, он удаляется из очереди. Но когда происходит разблокировка процесса (наступает событие, которого он ждал или ввод \ вывод завершен и т.п.), процесс снова помещается в очередь с отрицательным значением составляющей приоритета base. Выбор очереди определяется событием, которого ждал процесс. Отрицательное значение приоритета base для дискового ввода / вывода, терминального ввода / вывода, ввод / вывод в ОС жестко заданы в ОС и могут быть изменены только путем рекомпиляции системы.

Состояние системы и виды взаимодействия ОС UNIX

Рисунок 10

Рисунок 11

Наиболее важная информация о процессах находится в таблице процессов и контексте процессов.

Таблица процессов постоянно находится в ядре (постоянно хранится в основной памяти).

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

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

Межпроцессное взаимодействие по схеме "клиент-сервер" осуществляется несколькими способами:

  1. при помощи сообщений, позволяет процессам, работающим на одном компьютере обмениваться форматированными данными;

  2. при помощи семафоров. Семафор представляет собой набор общесистемных переменных, которые могут модифицироваться и использоваться процессами, запущенными на одном компьютере для синхронизации их выполнения. Обычно используется в сочетании с разделенной памятью для управления доступом и данными, находящимися в той или иной области разделяемой памяти;

  3. при помощи разделяемой памяти. Позволяет нескольким процессам, выполняемым на одной машине совместно использовать общую область памяти;

  4. Через интерфейс транспортного уровня (sockets). Позволяет двум процессам, выполняемых на разных машинах создать прямой, двусторонний канал связи.

Пример: конвейер - pipe(труба)

argv[0]="echo";

argv[l]="Лекция ";

main(argc, argv)

int argc;

char *argv[];

main(argc, argv)

int argv; execl("/usr/home/a. exe/", a. exe, 0); char *argv[J; {int i; for(i=1; i< argc; i+ +)

printf("%S%c", argv[i]);

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