Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_Unix.doc
Скачиваний:
4
Добавлен:
26.11.2019
Размер:
2.41 Mб
Скачать

3.4 Реализация процессов

3.4.1 Состав процесса

Процесс состоит из:

  • Инструкций (сегмент кода);

  • Данных (сегмент данных);

  • Адресного пространства;

  • Информации о процессе (элемент таблицы процессов ядра).

Тело процесса

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

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

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

Рисунок 3.2 – Структура тела процесса

Если k пользователей вызывают один текстовой редактор, то в системе находится одна копия этого редактора и k копий сегмента данных и контекстов (копии, надо заметить, не идентичные).

Контекст процесса

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

Контекст процесса в ОС UNIX состоит из нескольких частей:

1) Адресное пространство (образ) процесса.

2) Управляющая информация:

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

  • указатель на индексный дескриптор текущего каталога;

  • информация об открытых в процессе файлах,

  • информация о текущем состоянии процесса на случай его приостановки,

  • состояние регистров,

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

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

4) Аппаратный контекст.

Адресное пространство

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

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

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

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

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

Аппаратный контекст

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

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

Программный счетчик (program counter, PC). Хранит адрес следующей выполняемой инструкции.

Указатель стека (stack pointer, SP). Содержит адрес верхнего элемента стека.

Слово состояния процессора (processor status word, PSW). Содержит несколько битов с информацией о состоянии системы, в том числе о текущем и предыдущем режимах выполнения, текущем и предыдущем уровнях приоритетов прерываний, а также биты переполнения и переноса.

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

Регистры сопроцессора (Floating point unit, FPU).

Машинные регистры содержат аппаратный контекст текущего выполняемого процесса. Когда происходит переключение контекста эти регистры в блоке управления процессом (process control block, PCB). Ядро выбирает следующий процесс для выполнения и загружает его аппаратный контекст из блока РСВ.