Основы операционной системы UNIX

       

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


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

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

  • Адресное пространство процесса в пользовательском режиме

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

  • Управляющая информация

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

  • Среда процесса

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

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

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

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

    Контекст переключается в четырех случаях:

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

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



    Содержание раздела