М. В. Ломоносова Факультет вычислительной математики и кибернетики Н. В. Вдовикина, А. В. Казунин, И. В. Машечкин, А. Н. Терехин Системное программное обеспечение: взаимодействие процессов учебно-методическое пособие

Вид материалаУчебно-методическое пособие

Содержание


Часть II. реализация процессов.
4Реализация процессов в ОС UNIX 4.1Понятие процесса в UNIX.
4.1.1Контекст процесса.
4.1.2Тело процесса.
Сегмент данных
Рис. 7 Разделение сегмента кода разными экземплярами программы
4.1.3Аппаратный контекст.
4.1.4Системный контекст.
Подобный материал:
1   2   3   4   5   6   7   8   9   10   ...   25

Часть II. реализация процессов.


В этой части пособия мы подробно рассмотрим практическое применение понятия процесса в ОС, а также реализацию механизма управления процессами на примере ОС UNIX.

4Реализация процессов в ОС UNIX

4.1Понятие процесса в UNIX.


Выше уже говорилось, что в каждой конкретной ОС существует свое системно-ориентированное определение понятия процесса. В ОС UNIX процесс можно определить, с одной стороны, как единицу управления и потребления ресурсов, с другой стороны – как объект, зарегистрированный в таблице процессов ядра UNIX. Каждому процессу в UNIX сопоставлено некое уникальное целое число, называемое идентификатором процессаPID. Это число находится в диапазоне от нуля до некоторого предельного номера, характеризующего максимально возможное количество одновременно существующих процессов в данной ОС. Некоторые значения идентификаторов являются зарезервированными и назначаются специальным процессам ОС, например, процесс с PID=0 ассоциируется с работой ядра ОС, а процесс с PID=1 – это процесс init, работа которого будет подробно рассмотрена ниже.

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


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

С точки зрения логической структуры контекст процесса в UNIX состоит из:
  • пользовательской составляющей или тела процесса (иногда используется термин «пользовательский контекст»)
  • аппаратной составляющей (иногда используется термин «аппаратный контекст»)
  • системной составляющей ОС UNIX (иногда называемой «системным контекстом» или «контекстом системного уровня»)

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

Рассмотрим подробнее каждую из составляющих контекста процесса.



Рис. 6 Контекст процесса

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


Тело процесса состоит из сегмента кода и сегмента данных3.

Сегмент кода содержит машинные команды и неизменяемые константы соответствующей процессу программы. Данные в этом сегменте не подлежат изменению.

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

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



Рис. 7 Разделение сегмента кода разными экземплярами программы

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

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


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

4.1.4Системный контекст.


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

Поясним сказанное выше.

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



Рис. 8 Формирование контекста процесса.