Управление процессами. Переход процесса из состояния в состояние. Операции над процессами, страница 5

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

2.   Чем процесс меньше чем программа? Программа может вовлекать более чем один процесс для выполнения порученного ей задания.

Поток. Последовательно выполняемый поток внутри одного процесса. Иногда называют “легкий процесс”, “нитка” (это все издержки перевода).

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

Каждый раз при инициализации процесса система создает первичный поток (primary thread). Он живет до тех пор, пока процесс не завершится. Большинство приложений обходятся одним единственным, первичным потоком. Однако процессы способны создавать дополнительные потоки, что позволяет добиться минимального простоя процессора, а значит - работать более эффективно.

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

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

Следующий пример касается параллельного программирования (мы еще вернемся к рассмотрению этого понятия более подробно). Windows NT способна в полной мере использоватьвозможности машин с несколькими процессорами. Например, фирма Sequent разработала  компьютерную систему с 30 процессорами Intel. Windows NT может закрепить каждый поток за отдельным процессором, и тогда 30 потоков будут выполняться действительно одновременно (безо всяких иронических кавычек). Причем ОС умеет (правда, в ограниченных пределах), принимать решение о распараллеливании потоков. Как мы увидим чуть позже, параллельное программирование заставляет решать множество проблем, с которыми в однопроцессорных системах нам сталкиваться на приходилось.

То, что потоки выполняются в едином адресном пространстве, значительно облегчает обмен информацией в рамках одного процесса между различными потоками. Потоки могут разделять (share) области памяти (глобальные переменные, “куча”); могут иметь свое личное (private)  пространство в рамках адресного пространства процесса: регистры, стек.

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

Процессы, как мы уже упоминали ранее, имеют непересекающееся “защищенное” адресное пространство. С одной стороны, это позволяет защитить работу одного процесса от некорректного поведения другого процесса. Но с другой стороны, обмен информацией между процессами является вовсе не простым делом. В Win32 предусмотрено несколько способов обмена данными между разными процессами:

динамический обмен данными (Dynamic Data Exchange, DDE);

связь и внедрение объектов (Object linking and Emmbedding, OLE);

каналы (Pipes);

“почтовые ящики” (Mail Slots);

файлы, проецируемые в память (memory mapped files).

Обработка прерываний. Типы прерываний. Переключение контекста.

Ядро операционной системы. Основные функции ядра.

Асинхронные параллельные процессы.

Взаимоисключения.

Критические участки.

Примитивы взаимоисключения.