Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОперационныеСистемы, общие понятия.docx
Скачиваний:
140
Добавлен:
08.02.2015
Размер:
366.4 Кб
Скачать

Структура процесса

Структуру процесса в момент нахождения его в ОП можно представить следующим образом:

  1. Контекст процесса – таблица, в которой храниться системная информация о процессе, при его нахождении в ОП.

  2. Процедурный сегмент – машинные команды и константы.

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

  4. Динамический сегмент – выделяется при загрузке исполняемого файла в ОП и содержит данные, не инициализируемые при компиляции.

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

Дескриптор процесса в ос unix. Контекст процесса. (5-2)

Контекст процесса – таблица, в которой храниться системная информация о процессе, при его нахождении в ОП.

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

В целом контекст процесса – структура данных, включающая

  • Машинные регистры.

  • Состояние системного вызова – информация о текущем системном вызове, включающая параметры и результат.

  • Таблица пользовательских дескрипторов файлов – вся информация о файлах, открытых в данном процессе.

  • Учетная информация – указатель на таблицу, учитывающую процессорное время, использованное процессом.

  • Стек ядра – фиксированный стек для работы процесса в режиме ядра.

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

В таблице процессов содержатся дескрипторы процессов.

Дескриптор процесса в ОС UNIX содержит следующую информацию:

  • Идентификатор (PID).

  • Состояние.

  • Идентификатор родительского процесса (PPID).

  • Идентификатор пользователя (UID).

  • Идентификатор группы (GID).

  • События, ожидаемые процессом (если есть).

  • Время до истечения интервала будильника.

  • Маска сигналов, указывающая, какие сигналы 2игнорируются, какие перехватываются и какие заблокированы.

  • Приоритеты (3 поля).

  • Временной интервал, в течение которого процессу было выделено время ЦП.

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

  • Указатель внешней памяти (указатели как найти процесс во внешней памяти, если его нет в ОП).

Создание процессов в ос unix. (11-2)

Все процессы (кроме процесса с PID = 0) создаются при помощи системного вызова fork().

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

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

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

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