Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог / +Раздел VIII. Операционные системы.doc
Скачиваний:
99
Добавлен:
23.03.2015
Размер:
278.53 Кб
Скачать

42. Процессы. Концепция состояний. Реализация процессов и основные структуры данных. Контекст процесса. Нити.

Процесс – программа на стадии выполнения + выделенные ей ресурсы. (На самом деле прямого соответствия нет. Для одной программы может быть выполнено несколько процессов или в одном процессе может выполняться несколько программ.

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

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

Принципы приостановки:

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

• истек временной интервал, отведенный операционной системой для работы этого процесса, ОС насильственно отбирает процессор у процесса и переключает управление

Принципы планирования:

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

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

Рассмотренная модель описывает поведение процессов во время их жизни, но она не акцентирует внимания на появлении процесса в системе и его исчезновении из системы. В связи с этим модель состояний процесса целесообразно дополнить еще двумя состояниями: «Создание» и «Завершение». Для появления в вычислительной системе процесс должен пройти через состояние – «Создание». В этом состоянии процесс получает в свое распоряжение адресное пространство, в которое загружается программный код процесса, ему выделяются стек и системные ресурсы, устанавливается начальное значение программного счетчика этого процесса и т. д. Созданный процесс переводится в состояние «Готов». При завершении своей деятельности процесс из состояния – «Выполняется» попадает в состояние «Завершение». В этом состоянии операционная система освобождает ресурсы, которые были выделены процессу.

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

Реализация процессов и основные структуры данных.

Блок управления процессом. ОС должна хранить сведения о процессе, достаточно полные для работы системы. PCBProcess Control Block – блок управления , включающий в себя данные о процессах. Т.е. это такое подмножество данных, которое регулирует процессы и должно быть доступно ОС независимо от того, в каком состоянии процесс пребывает. Данные в PCB формируют некоторую модель процесса.

PCB включает в себя данные которого распределены между таблицей процессов и специальной областью памяти, называемой пространством процесса (U-областью для Unix-систем). Каждому процессу соответствует запись с данными для ядра ОС для постоянного доступа. Остальные данные требуются ОС если процесс находится в состоянии выполнения. В области памяти, размещаемой в области памяти ядра для всех выполняемых процессов выделяется пространство процесса.

Таблица процессов. Таблица процессов содержит сведения, идентифицирующие процесс, в частности сведения, которые изменяются асинхронно, например, процесс остановлен, а сведения изменяются. Для любого процесса ОС создает PIOProcess Identifier – идентификатор, целое число, генерируемое ядром при создании процесса. Он обязательно сохраняется в таблице. В зависимости от реализации ОС процессор может сохранять другие данные, такие как:

- Parent PID (PPID) – идентификатор родительского процесса

- идентификаторы пользователя (UID), запустившего процесс – определяет привилегии процесса

- указание текущего состояния процесса

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

- счетчики сигналов, посланных ОС и не обработанных. На каждый сигнал свой счетчик

- дескриптор события – устанавливается, если процесс ожидает события, указывает на изменения

- поля, используемые ядром при размещении процесса в основной или внешней памяти.

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

-указатель на таблицу процессов, идентифицирующий запись, соответствующую процессу.

- сведения о выделенной для выполнения программы памяти

- таблица дескрипторов открытых файлов (не доступна напрямую процессу)

-вектор, содержащий адреса обработчиков сигналов и описывающий реакцию процесса на сигналы.

В зависимости от реализации ОС могут присутствовать

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

-поле ошибок, содержащее ошибки, имевшие место при выполнении системного вызова.

-поле возвращенного значения, хранящее результат выполнения системного вызова.

-имена текущего каталога и текущего корня.

-поле маски создания файлов.

- использованное время процессора

- вспомогательные данные (завися от реализации, например, таймеры)

Контекст процесса: Так как процесс должен переходить из одного состояния в другое и не все время пребывать в состоянии «Выполняется», то ОС должна сохранять данные, по которым можно восстановить работу с процессом – контекст процесса, который содержит множество данных, которые позволяют охарактеризовать работу процесса

Его разновидности:

Регистровый контекст – сохранение текущего состояния процесса

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

-регистр состояния процессора (PSW);

-содержимое общих регистров процессора;

-указатель стека (ядра или задачи в зависимости от режима выполнения процесса).

Хранение данных организуется в виде стека. Место под хранение этой информации выделяется в пространстве процесса

Системный контекст процесса:

- учетные данные, такие как идентификатор процесса (PID), идентификатор пользователя (UID), и т. д.;

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

- данные, необходимые для управления памятью (размер и расположение адресного пространства и т. д.);

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

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

Знание регистрового и системного контекстов процесса достаточно для того, чтобы управлять его поведением в операционной системе, совершая над ним операции.

Пользовательский контекст процесса:

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

Переключение контекста Осуществляется по принципу: A->B->C->B (в действительности выполняется несколько процедур параллельно) – сохранить сведения о процессе А, сохранить, а затем восстановить сведения о процессе В и т.д.

Переключение контекста происходит кода:

  1. процесс завершил свою работу

  2. выполнение системного вызова и блокирование работы

  3. данный процесс не является наиболее подходящим для выполнения (после системного вызова и обработки прерываний)

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

Если не хочется переключать контекст процесса, то требуется иметь в рамках одного процесса нелинейную обработку данных. Для реализации псевдопараллелизма без создания нового процесса требуется создать дополнительные управляющие потоки в рамках одного процесса. Такие потоки называются нитями исполнения или просто нитями (threads). Под процессом мы понимаем программу на стадии исполнения в совокупности с ресурсами, которые ей выделены. Разделим понятие программы и ресурсов. Часть процесса, отвечающая за управление – программа. После окончания выполнения всех команд программы процесс выполнит какую-то задачу. Программа по отношению к вычислительной системе играет управляющую роль – управляющий поток. К потоку добавлены ресурсы для его нормального выполнения. Потоки- некоторые операции, поочередно выполняемые на процессоре.

Характеристика управляющего потока:

1) -содержимое регистров процессор

-указатель команд

-содержимое РОН

2) –текущее состояние стеков (проверка вызовов подпрограмм)

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

Пример: Ввод массива А, Ввод массива В, Ввод массива С

A:=A+B, A:=A+C, Вывод А

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

1) после ввода 2-х массивов организовать новый процесс для их суммирования, для суммирования с третьим – еще один процесс, обеспечить всем процессам совместный доступ к областям памяти. Существенный недостаток такого подхода: при запуске второго процесса требуется выделить, а затем освободить ресурсы. Выигрыш по времени исчезает.

2) не привлекать ОС и не создавать новый процесс

Нить – управляющий поток внутри текущего процесса. Они позволяют перераспределить, а не выделяют новые ресурсы..

Необходимо вести учет и контроль этих дополнительных потоков и хранить ссылки на текущий контекст и текущий стек. Желательно создать отдельно таблицу нитей и таблицу процессов.

Нить должна быть идентифицирована, причем внутри и вне процесса. Вне процесса к идентификатору нити добавляется идентификатор самого процесса.

Для нити вводится понятие состояния:

- состояние «Готов» процесса – если хотя бы она нить находится в состоянии «Готов»

- процесс находится в состоянии «Ожидания» – если все нити находятся в состоянии «Ожидания»

-процесс выполняется – если хотя бы одна из нитей исполняется

Процесс создается с одной нитью. Процесс с одной нитью называется традиционным.

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

Существует два способа реализации нитей: реализация в процессе пользователя и реализация средствами ОС.

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

Создание нити нить создается путем вызова подпрограммы, но не традиционным способом, а выполняется параллельно с другими программами.

Система поддержки так же переключает выполнение с одной нити на другую.

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

Недостатки: ели ОС не знает о существовании нитей и одна из нитей вызывает блокирование процесса, то будет блокирован весь процесс. Если в ОС не предусмотрено специальных средств, то собственно нити реализовывать не имеет смысла. Таким образом в ОС должна быть предоставлена возможность неблокирующих вызовов, которые совпадают по смыслу с блокирующими вызовами, но не прекращают работу процесса в целом. Так же отсутствует возможность отобрать у нити процессор, если она сама его не освобождает. Обычно нити используются при частом блокировании ОС. А это случается при обращении к ядру. А в этом случае ОС могла бы и переключить нить.

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

Основные операции (соответствуют переходам между состояниями процесса)

-создание и завершение процесса

-блокирование и разблокирование (состояние ожидания – состояние готов

- выгрузка на диск –загрузка в память (swapping –загрузка: готов на диске –готов в памяти; выгрузка: ожидается в памяти – ожидается на диске)

Операции делятся на одноразовые и многоразовые.

К одноразовым относятся создание и завершение.

Создание будет произведено:

  1. инициализация системы; создания процесса

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

- фоновые или daemon - функции

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

  2. запрос пользователя на создание процесса (создается процессом оболочки)

процесс, инициализирующий создание процесса – родительский. Созданный процесс – дочерний, процесс-ребенок.

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

При создании процесса ОС

- вырабатывает уникальный идентификатор процесса

-выделяет процессу ресурсы

Существуют следующие варианты

- дочерний процесс получает ресурсы за счет родительского процесса – существенное ограничение числа порождаемых процессов

- процесс-ребенок получает ресурсы непосредственно от ОС

В любом случае, запись в таблице процессов так же является ограниченным ресурсом

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

- устанавливает начальное значение программного счетчика (формируется регистровый контекст). Далее процесс переходит в состояние готов. Существует два подхода заполнения областей памяти: путем копирования соответствующих областей родительского процесса, то есть создается точная копия настоящего процесса, кроме IP или происходит чтение из файла данных для загрузи, имя файла указано в системном вызове. ОС Unix – полное копирование родительского процесса ОС Windows – только вторым способом, данные считываются из файла с исполняемым кодом. При создании процесса ему выделяются ресурсы.

Завершение процесса: При завершении процесса требуется освободить ресурсы.

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

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

Многоразовые операции – выполняются неоднократно, не связаны с выделением памяти.

Выбор на выполнение – планирование процессов (переход состояний готов-выполняется)

Блокирование процесса – когда процесс не может продолжать работу, выполняется с помощью специального системного вызова.

Разблокирование – после того, как произошло требуемое событие, находится из таблицы по дескриптору.

Выгрузка процесса – копирование на диск содержимого областей памяти – ожидание на диске (выгружается пользовательский контекст).

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