Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ОС мои.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.82 Mб
Скачать
  1. Потоки. Состояния потоков. Свойства потоков. Объект ядра поток. Функции для работы с потоками.

Потоки отвечают за исполнение программного кода. При создании процесса всегда создаётся первичный поток. По желанию программиста создаются дополнительные потоки. CreateThread(…). Для чего создаются потоки?

Выделив различные задачи, выполняемые процессом в отдельном потоке позволяет избежать цикла опросов.

Поток может находится в одном из 3-х состояний:

  1. Поток фактически работает, при этом в регистре процессора переписывается содержимое структуры CONTEXT. Все остальные потоки процесса приостанавливаются в случае одного процессора в системе.

  2. Поток готов к выполнению. Отсутствуют все причины, препятствующие работе потока, за исключением того, что процессор занят выполнением другого потока.

  3. Заблокированное состояние. Поток ожидает некоторого события, например, ожидание завершения работы другого потока или какого-либо процесса. До наступление этого события планировщик не позволит этому процессу выполнится.

Объектами синхронизации являются потоки процессы, критические секции, семафоры, события, мьютексы.

Потоки владеют набором регистров.

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

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

Поток может завладеть или освободить синхронизирующими объектами процесса. Дескриптор потока – это индекс в таблице дескрипторов процесса. Идентификатор потока – это закодированный указатель на базу данных потока (PDB).

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

  1. CreateThread(…). Создаёт новый поток в текущем процессе.

  2. CreateRemoteThread(…).Создаёт новый поток в другом процессе.

  3. ExitThread(…). Нормальное завершение потока.

  4. TerminateThread(…). Аварийное завершение потока, завершение потока из другого потока.

  5. GetExitCodeThread(…). Получение кода завершения любого потока.

  6. GetThreadTimes(…). Возвращает временные характеристики другого потока, то есть время работы другого потока в пользовательском режиме и режиме ядра. В Windows 95 и Windows 98 не используются.

  7. GetThreadContext(…). Возвращает регистры процессора для данного потока.

SetThreadContext(…). Изменяет регистры процессора для данного потока.

  1. GetCurrentThread(…). Получить дескриптор текущего потока.

SetCurrentThreadId(…). Получить идентификатор текущего потока.

Структура оя «поток».

  1. TDB (ETHREAD). Начинается со стандартного заголовка, который содержит идентификатор объекта (от 0 до 27) и счётчик числа обращений к данному объекту. Далее следует указатель на структуру KTHREAD – блок потока ядра, указатель на PDB (EPROCESS), откуда поток может извлекать, структура CONTEXT – содержит описание регистров, время создания и завершения потока, стартовый адрес потока, и так далее.

  2. KTHREAD. Содержит информацию необходимую ядру Windows для планирования и синхронизации одних потоков с другими.

  • суммарное время работы в пользовательском режиме,

  • суммарное время работы в режиме ядра,

  • базовый и текущий приоритеты потока,

  • значение кванта (для Windows 2000),

  • маска привязки к процессорам, то есть в многопроц. системе - информация, на каких процессорах выполняется данный поток.

  • список объектов, ожидаемых данным потоком, например, поток ждёт завершения какого-либо другого потока.

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

  1. TEB. В нём содержится информация о стеке потока, базовый адрес.

заполненная часть стека

старший адрес

текущий адрес стека

базовый адрес стека младший адрес

В блоке TEB содержится локальная память потока TLS, значение кода последней ошибки, то есть LastError. Даные необходимые для работы модулей user32.dll и GDI32. В том случае, если поток работает в сети в TEB содержится указатель на данные WinSock.

  1. W32THREAD. Дублирует данные, необходимые для работы user32 и gdi32.

Алгоритм работы функции CreateThread(…) (kernel32.dll).

  1. Создаёт стек пользовательского режима в адресном пространстве процесса.

  2. Инициализирует аппаратный процесс потока, то есть структуру CONTEXT.

  3. Вызывает функцию ядра NtCreateThread(…), которая создаёт все упр. структуры, которые находятся в сист-ой части адр. пр-ва.

  4. Создаёт блок TEB.

  5. Уведомляется подсистема Win32, которая создаёт блок W32THREAD.

  6. Возвращает дескриптор и идентификатор вызывающей программе вновь созданного потока.

  7. Вновь созданный поток ставится в очередь на выполнение.

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