Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_OS.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
296.45 Кб
Скачать

23. Етапи створення потоків, структури даних, змінні ядра і об’єкти.

Етапи створення потоків

Життєвий цикл потоку починається при його створенні програмою. Запит на його створення в кінцевому рахунку надходить виконавчій системі Windows, де диспетчер процесів виділяє пам'ять для об'єкта «потік» і викликають ядро ​​для ініціалізації блоку потоку ядра. Нижче перераховані основні етапи створення потоку Windows функцією CreateThread (яка знаходиться в Kernel32.dll).

1. CreateThread створює стек користувацького режиму в адресному просторі процесу.

2. CreateThread ініціалізує апаратний контекст потоку, специфичний для конкретної архітектури процесора.

3. Для створення об'єкта «потік» виконавчої системи викликається NtCreateThread. Він створюється в загальмованому стані. Опис операцій, які виконуються NtCreateThread.

4. CreateThread повідомляє підсистему Windows про створення нового потоку, і та виконує деякі підготовчі операції.

5. Викликав коду повертаються описувач та ідентифікатор потоку.

6. Виконання потоку відновлюється, і йому може бути виділено процес бур'янисте час, якщо тільки він не був створений з прапором CREATE_SUSPENDED.

Структури даних

На рівні ос поток представляється блоком потока, який належить виконавчій системі (ETHREAD).

Блок ETHREAD і всі структури даних, на яких він вказує, існують в системному адресному просторі, крім блоку змінних потоку він розміщується в адресному просторі процеса. Крім цього, процес підсистеми Windows (Csrss) підтримує паралельну структуру для кожного потому, створеного в Windows процесі. Частина підсистеми Windows працююча в режимі ядра ядра (Win32k.sys), також підтримує для кожного потока, викликаючого USER або GDI функцію, структуру W32THREAD, на яку вказує блок ETHREAD.

Змінні ядра

PspCreateThread_ NotifyRoutine - масив вказівник на процедури (максимум 8) викликаний при створенні і видаленні потоку.

PspCreateThread_ NotifyRoutineCount – лічильник зареєстрований процедур повідомлення потока.

PspCreateProcess_ NotifyRoutine - масив вказівник на процедури (максимум 8) викликаний при створенні і видаленні процесу.

24. Управління потоками, основні функції.

Перераховані функції , що дозволяють створювати потоки і маніпулювати ними.

CreateThread Створює новий потік

CreateRemoteThread Створює потік в іншому процесі

ExitThread Нормально завершує потік

TerminateThread Аварійно завершує потік

GetExitCodeThread Отримує код завершення іншого потоку

GetThreadTimes Повертає тимчасові характеристики іншого потоку

GetCurrentThread Повертає псевдоописувач поточного потоку

GetCurrentThreadId Повертає ідентифікатор поточного потоку

GetThreadId Повертає ідентифікатор зазначеного потоку

GetThreadContext Повертає або змінює регістри процесора

SetThreadContext для даного потоку

GetThreadSelectorEntry Повертає елемент таблиці дескрипторів іншого потоку (тільки для систем типу x86)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]