Общие сведения о процессах и потоках в ОС Windows. Понятие объекта ядра. Типы объектов ядра

Управление процессами и потоками в мультипрограммных ОС.

Общие сведения о процессах и потоках в ОС Windows. Понятие объекта ядра. Типы объектов ядра.

Любой процесс в ОС Windows определяется как основа выполняемой программы, состоящая из двух компонентов:

1. Объект ядра – это та её часть, которая включает служебные структуры данных, с помощью которых, при вызове системных функций, осуществляется управление выполнением программ потоков процесса;

2. Адресное пространство памяти (область памяти), в котором представляются программные коды и данные всех .exe и .dll модулей программ потоков.

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

1. Процессы – Process objects;

2. Файлы – Files;

3. Проекции файлов – Files mapping;

4. Задания – Job;

5. Мьютексы – Mutex;

6. Семафоры – Semaphore;

7. Почтовые ящики – Mails;

8. Каналы – Pipe.

5, 6 – объекты синхронизации. 7, 8 – объект обмена данными.

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

В ОС, кроме объектов ядра, существуют и могут использоваться объекты других типов, например: окна, меню, шрифты, курсоры мыши, и рад других. Перечисленные объекты относятся к GDI – объектам пользовательского интерфейса.

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

Любой процесс может иметь несколько потоков. Каждому потоку при его создании предоставляется возможность использования индивидуального набора регистров процессора, и собственного стека. Совокупность состояний регистров и области памяти, отводимой под стек, образует контекст потока.

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

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

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

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

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

· main ();

· wmain ();

· Winmain ();

· wWinmain ().

w – использование Юникода.

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

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

1. Считывает из памяти указатель на полную командную строку запускаемого процесса;

2. Инициализирует глобальные переменные из библиотеки системы программирования;

3. Считывает указатель на переменные системного окружения процесса;

4. Инициализирует динамически используемую область памяти, отводимую для программы потока;

5. Вызывает конструкторы всех глобальных и статических объектов для соответствующих классов объектно-ориентированной системы программирования;

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

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

Если к этому моменту все другие потоки процесса завершились, стартовая функция вызывает функцию завершения процесса ExitProcess (). Эта функция уничтожает процесс (его объект ядра) и устанавливает код его завершения.