Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція № 4_МЗКІТ (10 ТП).docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

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);

♦ стартову адресу потоку, з якої почнеться виконання його коду;

♦ інформацію для підсистеми безпеки.

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

♦ покажчик на стек ядра;

♦ інформацію для планувальника;

♦ інформацію, необхідну для синхронізації цього потоку;

♦ покажчик на блок оточення потоку.

Інформацію для планувальника як і об’єкти синхронізації буде розглянуто пізніше.

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

♦ ідентифікатор потоку;

♦ покажчик на стек режиму користувача;

♦ покажчик на блок оточення процесу, до якого належить потік;

♦ покажчик на локальну пам’ять потоку.