Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Выполнение потоков

Читайте также:
  1. Анализ сбалансированности денежных потоков.
  2. Виды ответственности за невыполнение обязательств по договору перевозки (буксировки) и условия освобождения от ответственности.
  3. Вопрос 2. Выполнение группировки по количественному признаку
  4. Вопрос 42. Выполнение научно-исследовательских, опытно-конструкторских и технологических работ. Возмездное оказание услуг.
  5. ВОПРОС №9 ВЫПОЛНЕНИЕ СТУДЕНТАМИ НОРМАТИВА №2 ПО ОДЕВАНИЮ ПРОТИВОГАЗА НА ПОРАЖЕННОГО ЧЕЛОВЕКА.
  6. Выполнение и оценка работы индивида
  7. Выполнение измерений.
  8. Выполнение контрольной работы
  9. Выполнение курсовой работы и ее защита
  10. Выполнение манипуляции

Последовательность действий системы в момент создания и инициализации потока, предшествующий началу выполнения, можно пояснить следующей иллюстрацией:

 

В результате выполнения функции CreateThread создается объект ядра «поток». Одновременно, инициализируются основные параметры этого объекта ядра, а именно – счетчику числа пользователей присваивается 2, счетчику числа простоев – 1, коду завершения – 0x103, а состояние объекта устанавливается в «занято». Стеку потока из ВАП процесса выделяется память, и в старшие адреса записываются значения параметров P3, P4 функции создания. У любого вновь создаваемого потока имеется собственный набор используемых регистров процессора, называемый контекстом потока. Контекст отражает состояние регистров процессора на момент последнего выполнения потока. Контекст сохраняется в системной структуре данных CONTEXT, которая содержится в объекте ядра «поток». В контекст входят значения регистров указателя команд EIP и состояние указателя стека ESP. В ходе выполнения команд программы потока, в них формируются адреса памяти из области ВАП всего процесса. В момент инициализации объекта ядра «поток» указателю стека ESP присваивается адрес, по которому в стек заносится значение параметра P3, а указателю команд EIP присваивается адрес системной функции BaseThreadStart ().

Состояния этих регистров заносится в CONTEXT. После инициализации потока, система проверяет значение флага создания потока из параметра P5. Если это значение равно нулю, выполнение потока может быть начато немедленно. В этом случае, счетчик числа простоев обнуляется, в регистры процессора загружаются значения, которые хранились в структуре CONTEXT потока. После этого, поток переходит в состояние готовности к выполнению, то есть ему может быть предоставлено процессорное время, а точнее – очередной квант процессорного времени. Когда это происходит, то начинается выполнение программы потока. Так как EIP указывает на BaseThreadStart (), то выполнение потока начинается не с первой команды его программы, а именно с этой функции. Эта функция получает доступ к двум параметрам P3, P4, записанным в стеке потока, и в ходе своего выполнения реализует следующие действия:

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

2. Вызывается прикладная функция потока, и ей, в качестве параметра, передается значение P4;

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

По окончании выполнения этой функции, она снова возвращает управление в системную функцию BaseThreadStart (). Эта функция, в свою очередь, вызывает функцию завершения потока ExitThread(). В нее передается значение кода возврата, возвращаемое прикладной функцией потока. Одновременно, значение счетчика числа пользователей объекта ядра «поток» уменьшается на единицу, и выполнение потока прекращается.

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


<== предыдущая страница | следующая страница ==>
Общие сведения о потоках. Создание потоков | Завершение потоков

Дата добавления: 2014-10-10; просмотров: 366; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.003 сек.