- •9.3. Створення процесів
- •Базові поняття процесів і потоків
- •1.1. Процеси і потоки в сучасних ос
- •1.2. Моделі процесів і потоків
- •1.3. Складові елементи процесів і потоків
- •2. Багатопотоковість та її реалізація
- •2.1. Поняття паралелізму
- •2.2. Види паралелізму
- •2.4. Способи реалізації моделі потоків
- •2.3. Переваги і недоліки багато потоковості
- •3. Стани процесів і потоків
- •4. Опис процесів і потоків
- •4.1. Керуючі блоки процесів і потоків
- •4.2. Образи процесу і потоку
- •5. Перемикання контексту й обробка переривань
- •5.1. Організація перемикання контексту
- •5.2. Обробка переривань
- •6. Створення і завершення процесів і потоків
- •6.1. Створення процесів
- •6.2. Ієрархія процесів
- •6.3. Керування адресним простором під час створення процесів
- •6.4. Особливості завершення процесів
- •6.5. Синхронне й асинхронне виконання процесів
- •6.6. Створення і завершення потоків
- •7. Керування процесами в unix і Linux
- •7.1. Образ процесу
- •7.2. Ідентифікаційна інформація та атрибути безпеки процесу
- •7.3. Керуючий блок процесу
- •7.5. Завершення процесу
- •7.7. Запуск програми
- •7.8. Очікування завершення процесу
- •7.9. Сигнали
- •8. Керування потоками в Linux
- •8.1. Базова підтримка багато потоковості
- •8.2. Особливості нової реалізації багато потоковості в ядрі Linux
- •8.3. Потоки ядра Linux
- •8.4. Програмний інтерфейс керування потоками posix
- •9. Керування процесами у Windows хр
- •9.1. Складові елементи процесу
- •9.2. Структури даних процесу
- •9.3. Створення процесів
- •9.4. Завершення процесів
- •9.5. Процеси і ресурси. Таблиця об’єктів процесу
- •9.6. Програмний інтерфейс керування процесами Win32 арі
- •10. Керування потоками у Windows хр
- •10.1. Складові елементи потоку
- •10.2. Структури даних потоку
- •10.3. Створення потоків
- •10.4. Особливості програмного інтерфейсу потоків
- •Висновки
- •Контрольні запитання та завдання
10. Керування потоками у Windows хр
Для того щоб виконувати код, у рамках процесу обов’язково необхідно створити потік. У системі Windows ХР реалізована модель потоків «у чистому вигляді». Процеси і потоки є різними сутностями в системі, що перебувають у чітко визначеному взаємозв’язку один з одним; для роботи з ними використовують різні системні виклики. У Windows ХР ніколи не використовували модель процесів, подібну до традиційної моделі UNIX.
Багатопотоковість Windows ХР базується на схемі 1:1. Кожному потоку користувача відповідає сутність у ядрі, при цьому ядро відповідає за планування потоків. Процеси не плануються.
10.1. Складові елементи потоку
Потік у Windows ХР складається з таких елементів:
♦ вмісту набору регістрів, який визначає стан процесора;
♦ двох стеків — один використовують для роботи в режимі користувача, інший — у режимі ядра; ці стеки розміщені в адресному просторі процесу, що створив цей потік;
♦ локальної пам’яті потоку (TLS);
♦ унікального ідентифікатора потоку (thread id, tid), який вибирають із того самого простору імен, що й ідентифікатори процесів.
Сукупність стану процесора, стеків і локальної пам’яті потоку становить контекст потоку. Кожний потік має власний контекст. Усі інші ресурси процесу (його адресний простір, відкриті файли тощо) спільно використовуються потоками.
Розрізняють два види потоків: потоки користувача і потоки ядра, які у Windows ХР називають системними робочими потоками - system worker threads. Перші з них створюють у режимі користувача й тільки за необхідності перемикають у режим ядра. Інші створюють в ядрі під час його ініціалізації і виконують у режимі ядра протягом усього часу їхнього існування.
10.2. Структури даних потоку
Відображення потоків у системі, як і відображення процесів, засноване на об’єктній моделі Windows ХР. Для виконавчої системи Windows ХР кожен потік відображається об’єктом-потоком виконавчої системи (executive thread object), який також називають керуючим блоком потоку (executive thread block, ETHREAD). Для ядра системи потік відображається об’єктом-потоком ядра (kernel thread object), який також називають блоком потоку ядра (thread kernel block, KTHREAD).
У режимі користувача доступним є блок оточення потоку (thread environment block, ТЕВ), який перебуває в адресному просторі процесу, що створив потік.
Неважко помітити, що кожній структурі даних потоку відповідає структура даних процесу (блоки EPROCESS, KPR0CESS і РЕВ).
Керуючий блок потоку містить базову інформацію про потік, зокрема:
♦ блок потоку ядра;
♦ ідентифікатор процесу, до якого належить потік, і покажчик на керуючий блок цього процесу (EPROCESS);
♦ стартову адресу потоку, з якої почнеться виконання його коду;
♦ інформацію для підсистеми безпеки.
Блок потоку ядра, у свою чергу, містить інформацію, необхідну ядру для організації планування і синхронізації потоків, зокрема:
♦ покажчик на стек ядра;
♦ інформацію для планувальника;
♦ інформацію, необхідну для синхронізації цього потоку;
♦ покажчик на блок оточення потоку.
Інформацію для планувальника як і об’єкти синхронізації буде розглянуто пізніше.
Блок оточення потоку містить інформацію про потік, доступну для застосувань режиму користувача. До неї належать:
♦ ідентифікатор потоку;
♦ покажчик на стек режиму користувача;
♦ покажчик на блок оточення процесу, до якого належить потік;
♦ покажчик на локальну пам’ять потоку.
