Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гл.3 ОС буклет.doc
Скачиваний:
9
Добавлен:
11.11.2018
Размер:
353.79 Кб
Скачать

3.7.2. Структуры данных процесса

Рассмотрим структуры данных, связанные с процессом в Windows ХР. Укажем, что в работе с этими структурами система использует объектную модель. Для исполнительной системы Windows ХР каждый процесс изображает объектом-процессом исполнительной системы (executive process object); его также называют управляющим блоком процеса (ехесutive process block, EPROCESS). Для ядра системы процесс изображают объектом-процессом ядра (kernel process object), который называют блоком процеса ядра (process kernel block, KPROCESS).

В режиме пользователя доступным является блок окружения процеса (process environment block, PEB), который находится в адресном пространстве этого процесса.

Рассмотрим структуры данных процесса подробнее. Укажем, что EPROCESS и KPROCESS, в отличие от РЕВ, доступные только из привилегированного режима.

Управляющий блок процесса содержит такие основные элементы:

  • блок процесса ядра (КРROCESS);

  • идентификационную информацию;

  • информацию об адресном пространстве процесса;

  • информацию о ресурсах, доступных процессу, и ограничение на использование этих ресурсов;

  • блок окружения процесса (РЕВ);

  • информацию для подсистемы безопасности.

К идентификационной информации принадлежат:

  • идентификатор процесса (ріd);

  • идентификатор процесса, который создал этот процесс (несмотря на то, что Windows ХР не поддерживает отношения «предок-потомок» автоматически, они могут быть заданы программным путем, т.е. потомок может сам назначить себе предка, задав этот идентификатор);

  • имя загруженного программного файла.

Блок процесса ядра содержит всю информацию, которая принадлежит к потокам этого процесса:

  • указатель на цепочку блоков потоков ядра, где каждый блок отвечает потоку;

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

Блок окружение процесса содержит информацию о процессе, которая предназначена для доступа из режима пользователя:

  • начальный адрес участка памяти, куда загрузился программный файл;

  • указатель на динамический участок памяти, доступный процессу.

Эту информацию может использовать загрузчик программ или процесс подсистемы Win32.

3.7.3. Создание процессов

В Win32 АРI принята модель запуска приложения с помощью одного вызова, который создает адресное пространство процесса и загружает у него выполняемый файл.

Отдельно функциональность exec() и fork() в этом АРI не реализована.

Такой вызов реализует функция CreateProcess(). Она не является системным вызовом ОС - это библиотечная функция Win32 АРI, реализованная во всех Win32-совместных системах.

Укажем, что системные вызовы UNIX/POSIX нуждаются в меньшем количестве параметров (как уже отмечалось, folk() не использует ни одного параметра, а exec() - использует три параметра).

Приведем основные шаги создания нового процесса с использованием функции CreateProcess().

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

2. Создают объект-процесс в исполнительной системе Windows ХР. При этом выполняют такие действия:

а) создают и инициализируют структуры данных процесса (блоки EPROCESS, KPROCESS, РЕВ);

б) создают начальное адресное пространство процесса;

в) блок процесса помещают в конец списка активных процессов, которые поддерживает система.

  1. Создают начальный поток процесса.

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

  3. После посылки сообщения начинают выполнение начального потока (если он не был задан с флажком отложенного выполнения).

  4. Завершают инициализацию адресного пространства процесса (например, загружают необходимые динамические библиотеки), после чего начинают выполнения загруженного программного кода.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]