Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы по конспектам 2011.docx
Скачиваний:
13
Добавлен:
21.04.2019
Размер:
967.53 Кб
Скачать

33. Управление процессами

Процесс – программа в стадии выполнения при условии, что в процесс включены необходимые данные операционной среды и переменные окружения (динамический объект).

Процесс – единица работы, связанная с обработкой заявки на ресурсы ВС.

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

Потоки

Процесс может состоять из нескольких потоков. Хотя бы один поток будет в процессе всегда. В таком случае «поток»=«процесс».

Все потоки процесса разделяют его адресное пространство и множество переменных среды.

Процесс представляет собой изолированное пространство + ряд ресурсов ВС, которые даны ему в соответствии с правами. Изолированность позволяет сохранить целостность самих процессов и ОС в целом. Это не позволяет процессам непосредственно обращаться друг к другу – это происходит через ядро. Используются средства IPC.

Подсистема управления процессами занимается:

  • Планирование взаимодействия процессов

  • Порождение/уничтожение процессов

  • Обеспечение необходимыми ресурсами

Жизненный цикл процесса:

  • Готовность – пассивное состояние – процесс имеет все необходимые ресурсы, но нет процессорного времени.

  • Выполнение – активное состояние процесса, когда процессорный ресурс предоставлен процессу.

  • Ожидание – пассивное состояние – процесс не имеет любого другого ресурса, кроме процессора.

Очереди: готовности (по приоритетам – prio 0 .. prio n) и ожидания (по типу ресурсов – res0 ... res m)

8->3 если есть место в ОЗУ, если нет, то 8->5

4, 6 – ожидание

1, 2 – выполнение

3, 5, 7 - готовность

Образ процесса – совокупность его кодов и данных и ресурсов.

Управление процессом в режиме задач возможно, если мы сами создаем процесс с помощью специальных системных вызовов (напр. fork()). Момент возвращения из ядра определяется только ОС.

1 <-> 2 может быть много переходов, это связано с внутренними прерываниями и событиями.

4 – ждем предоставления ресурса.

5 – swapping – если нужно освободить ОЗУ.

7 – если есть место в ОЗУ. Процесс возвращен из привилегированного режима в непривилегированный режим. Ядро резервирует его и переключается на другой процесс такая ситуация возможна при прерывании.

Жизненный цикл процесса в UNIX-подобных ОС: создание нового процесса (fork(), выделение ресурсов) -> готовность в ОЗУ (завершение fork(), exec()) -> выполнение в режиме ядра (runnable) -> завершение процесса (exit(), defunct zombie) -> полный возврат ресурсов. Если ресурсы заняты, то после fork() переход в готовность вне ОЗУ.

34. Контекст и дескриптор

Для возобновления выполнения процесса необходимо сохранить информацию о состоянии ОС:

Контекст – информация, которая отражает состояние операционной среды, та информация, которая необходима для выполнения процесса:

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

  • Режим работы процессора

  • Указатели на открытые файлы

  • Информация о незавершенных операциях ввода/вывода

  • Коды ошибок, выполняемых системных вызовов

Дескриптор процесса – информация, необходимая для планирования:

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

  • Состояние процесса

  • Данные о степени его привилегированности

  • Место нахождения сегмента кода

  • Права доступа

  • Информация о соседних дескрипторах в очереди

В дескрипторе хранится более оперативная информация, которая должна быть доступна извне => дескриптор всегда в ОЗУ, в отличие от контекста, который может быть вынесен в область swapping’a.

Очереди процессов представляются как списки дескрипторов, т.е. дескриптор содержит ссылку на соседей в очереди дескрипторах. Управление очередями = управление списками.

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

Создать процесс – значит создать информационную структуру (контекст/дескриптор).

Необходимо:

  1. Создать структуру данных, описывающих данный процесс.

  2. Включить дескриптор в очередь готовых процессов.

  3. Загрузить кодовый сегмент в ОЗУ или область swapping’a.