- •26. Синхронизация
- •27. Оповещения и асинхронные вызовы процедур
- •28. Структура процессов
- •Требования подсистем среды
- •29. Базовая структура процессов
- •Управление клиентскими процессами
- •Как предотвратить неправильное использование
- •52. База данных страничных фреймов
- •53. Дескрипторы виртуальных адресов
- •Соображения мультипроцессорной обработки
- •Соображения переносимости
- •Общие сведения
- •Планирование потоков
- •55. Объекты процесс ядра и поток ядра
- •56. Приоритеты планирования
- •Переключение контекста
- •57. Обработка прерываний и исключений
- •Обработчик ловушки
- •Распределение прерываний
- •58. Таблица распределения прерываний. Программные прерывания. Прерывания асинхронного вызова процедур (apc).
- •Прерывания асинхронного вызова процедуры (арс)
- •59. Распределение исключений
- •60. Многопроцессорная синхронизация
- •Синхронизация на уровне ядра
- •61. Синхронизация на уровне исполнительной системы
- •Восстановление после сбоя питания
28. Структура процессов
Процессы — это динамические сущности, создаваемые и уничтожаемые при работе ОС. Один процесс создает другой, который, в свою очередь, также может создавать процессы. Структура процессов (process structure) определяет, каким образом ОС создает, использует и уничтожает процессы и потоки и какие отношения существуют между данным процессом и другими процессами.
Программисты, пишущие приложения Win32, MS-DOS, OS/2 или POSIX, никогда не имеют дела с базовыми процессами и потоками NT. Win32 и другие подсистемы изолируют программиста от них, создавая собственные среды, в которых программист Win32 видит только процессы Win32, программист POSIX — только процессы POSIX и т. д. Однако, в первую очередь благодаря нижележащим средствам структуры процессов исполнительной системы NT, эти непохожие среды и могут сосуществовать в одной ОС.
Требования подсистем среды
Одной из основных задач подсистемы среды Windows NT является эмуляция API, для которого написаны ее клиентские приложения (например, API Win32 или POSIX). Другая ее основная функция — реализация структуры процессов, требуемой этими клиентами. Ниже приводятся (относящиеся к процессам) средства, необходимые для типичной среды:
• Создание и завершение процессов и потоков.
• Протоколирование и поддержка взаимоотношений между процессами.
• Выполнение операций (как локальных, так и сетевых) от имени клиентского процесса.
• Чтение и запись и другие манипуляции с адресным пространством клиентского процесса.
• Остановка клиентского потока, возможно, изменение его контекста и запуск вновь.
• Перехват и обработка исключений, генерируемых клиентскими процессами.
Создание процесса, стоящее первым пунктом в списке, — это самая обычная операция для подсистемы, и она хорошо иллюстрирует использование подсистемами среды базовых сервисов процесса для выполнения своих задач. На рис. 4-11 показано, как соотносятся создание процесса из прикладной программы и создание процесса исполнительной системы NT.
Клиентское приложение, в данном примере приложение Win32, POSIX или OS/2, создает процесс с помощью соответствующих API своей среды. Запрос на создание процесса передается через средство передачи сообщений исполнительной системы NT соответствующему серверу, который обращается к диспетчеру процессов NT для создания базового процесса.
После создания базового процесса NT диспетчер процессов возвращает описатель объекта-процесса. Подсистемы среды принимают этот описатель и создают подходящие возвращаемые значения для клиентских приложений. На рис. 4-12 показано, что именно возвращают различные подсистемы.
Между получением описателя от диспетчера
процессов и возвратом результата
клиентскому приложению подсистема
среды должна проделать некоторую
дополнительную работу. В частности,
подсистемы снова обращаются к
диспетчеру процессов, чтобы создать
поток для нового процесса.
Рис. 4-11. Создание процесса.
Как показано на рис. 4—12, разные среды ОС возвращают при создании процесса разные результаты. Кроме того, ОС различаются принятыми в них правилами и соглашениями по управлению процессами. Одно из фундаментальных различий между поддерживаемыми в Windows NT средами ОС связано с тем, поддерживают ли они многопоточные процессы. Win32 и OS/2, например, допускают многопоточные процессы, тогда как POSIX, MS-DOS и 16-разрядная Windows — нет.
Подсистемы среды различаются и тем, какие существуют в них отношения между процессами. Например, POSIX и OS/2 объединяют свои процессы в иерархии, или деревья процессов (process trees). И та и другая создают начальный процесс, который порождает так называемые дочерние процессы, (child process). Дочерний процесс, в свою очередь, может создать собственные дочерние процессы. Все процессы, кроме начального, имеют родителя, от которого наследуют некоторые ресурсы и характеристики.
Как POSIX, так и OS/2 используют соотношения между клиентскими процессами для управления последними. Например, при завершении процесса POSIX или OS/2 система завершает все его дочерние процессы. Более того, совместимая с POSIX ОС поддерживает другие типы соотношений между процессами, включая группы процессов (process groups) — объединения взаимосвязанных процессов и сессии (sessions) — объединения групп процессов. Для сессий и групп процессов системы POSIX обеспечивается детализированная се-
Рис. 4-12. Возврат после создания процесса.
мантика управления процессами, не имеющая точных эквивалентов в других ОС Исполнительная система NT должна обеспечить подсистеме среды возможность поддержки любых необходимых ей соотношений между процессами.
Помимо различий в группировании процессов и в поддержке многопоточности, подсистемы среды различаются правилами создания новых процессов. В табл. 4-4 показаны некоторые различия между структурами процессов для трех сред ОС, поддерживаемых Windows NT.
Таблица 4-4. Семантика создания процессов
|
Windows (32-разрядная) |
POSIX |
OS/2 |
Функция API |
CreateProcess() |
Fork() |
DosExecPgm()- |
Иерархия |
Не поддерживает |
Новый процесс |
Новый процесс со |
процессов |
формального соотно |
создается как по |
здается как пото |
|
шения родитель-по |
томок вызываю |
мок вызывающего |
|
томок |
щего процесса |
процесса |
Наследование |
Копирует для дочер |
Копирует для по |
Копирует для по |
|
него процесса все опи |
томка файловые |
томка все описате |
|
сатели объектов,от |
дескрипторы |
ли файлов, каналов |
|
крытые с атрибутом |
родителя |
и семафоров роди |
|
наследования |
|
теля, которые были |
|
|
|
открыты с правами |
|
|
|
наследования |
Инициализация |
Инициализирует |
Инициализирует |
Инициализирует |
адресного |
адресное простран |
адресное простран |
адресное простран |
пространства |
ство процесса испол |
ство потомка, копи |
ство потомка |
|
няемой программой |
руя адресное прост |
исполняемой |
|
|
ранство родителя |
программой |
Идентифика |
Возвращает описатель |
Возвращает иденти |
Возвращает иденти |
ция процесса |
нового процесса |
фикатор процесса |
фикатор процесса |
|
|
нового потомка |
нового потомка |
|
|
|
(если потомок |
|
|
|
выполняется |
|
|
|
асинхронно) |
Потоки |
Создает один поток |
Создает один поток, |
Создает один поток |
|
и поддерживает |
но не поддерживает |
и поддерживает |
|
многопоточность |
многопоточность |
многопоточность |
Иерархии процессов, инициализация адресного пространства и идентификация процессов различны в разных средах. Хотя некоторые различия кажутся небольшими, диспетчер процессов должен поддерживать все среды одинаково хорошо и обеспечить существование различных структур процессов без конфликтов между ними.
