Понятие информационных потоков

Автор работы: Пользователь скрыл имя, 31 Марта 2013 в 10:40, контрольная работа

Краткое описание

Преимущества использования потоков
1. Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
2. Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.
3. Повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.

Содержание работы

1. Общие характеристики потоков……………………………………….….3
2. Реализация потоков.………………………………………………………..5
3. Создание потоков………………………………………………………..…7
4. Завершение потока………………………………………………………..11
5. Заключение……………………………………………………………..…15
6. Список использованной литературы и источников………………...…..17

Содержимое работы - 1 файл

моя работа в 2007.docx

— 38.77 Кб (Скачать файл)

ПЛАН

  1. Общие характеристики потоков……………………………………….….3
  2. Реализация потоков.………………………………………………………..5
  3. Создание потоков………………………………………………………..…7
  4. Завершение потока………………………………………………………..11
  5. Заключение……………………………………………………………..…15
  6. Список использованной литературы и источников………………...…..17

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. ОБЩИЕ   ХАРАКТЕРИСТИКИ ПОТОКОВ

 

Существуют разные определения  термина «поток», в том числе «единица исполнения», «отдельный счетчик команд» или «подлежащая планированию сущность внутри процесса». Хотя каждое из этих определений по сути своей правильно, ни одно из них не является удовлетворительным. Что в точности подразумевается под «единицей исполнения»? Просто нечто, исполняемое процессором?

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

В то время как процесс - это логическое представление работы, которую должна выполнить ОС, поток отображает одну из, возможно, многих необходимых подзадач.

Потоки делят между  собой элементы своего процесса:

  1. Адресное пространство
  2. Глобальные переменные
  3. Открытые файлы
  4. Таймеры
  5. Семафоры
  6. Статистическую информацию.

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

Преимущества использования  потоков

1. Упрощение программы  в некоторых случаях, за счет  использования общего адресного  пространства.

2. Быстрота создания потока, по сравнению с процессом, примерно  в 100 раз.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. РЕАЛИЗАЦИЯ ПОТОКОВ 

 

Реализация потоков в  пространстве пользователя и ядра. В случае А ядро о потоках ничего не знает. Каждому процессу необходима таблица потоков, аналогичная таблице процессов.

Преимущества случая А:

  1. Такую многопоточность можно реализовать на ядре не поддерживающим многопоточность
  2. Более быстрое переключение, создание и завершение потоков
  3. Процесс может иметь собственный алгоритм планирования.

Недостатки случая А:

  1. Отсутствие прерывания по таймеру внутри одного процесса
  2. При использовании блокирующего (процесс переводится в режим ожидания, например: чтение с клавиатуры, а данные не поступают) системного запроса все остальные потоки блокируются.
  3. Сложность реализации.

Особенности реализации Windows. Используется четыре понятия:

1. Задание - набор процессов  с общими квотами и лимитами

2. Процесс

3. Поток

4. Волокно - облегченный  поток, управляемый полностью  в пространстве пользователя.

В исходном состоянии поток  находится в приостановленном состоянии.

Основные составляющие потока в исполнительной системе таковы:

  1. Уникальный указатель, называемый хэндлом потока.
  2. Содержимое набора регистров, отображающее состояние процессора.
  3. Два стека: один используется потоком при работе в пользовательском режиме, а другой - в режиме ядра.
  4. Собственная область памяти, предназначенная для использования подсистемами, библиотеками периода выполнения и динамически подключаемыми библиотеками (DLL).

Регистры, стек и собственная  область памяти называются контекстом (context) потока. Фактические данные, составляющие контекст потока, зависят от типа процессора.

Процесс Windows остается безжизненным, пока у него нет потока, который  можно направить на выполнение. Если у процесса есть поток, последний  может создать дополнительные потоки.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.             СОЗДАНИЕ ПОТОКОВ

 

При создании потока так  же, как и при создании процесса, операционная система генерирует специальную информационную структуру - объект-поток, который содержит:

  1. Идентификатор потока,
  2. Данные о правах доступа и приоритете,
  3. Данные о состоянии потока и др.

Создаются и уничтожаются потоки исполнительной системы Windows диспетчером  объектов. Диспетчер процессов определяет тело объекта-потока и сервисы, используемые для работы с потоками после их создания. В табл. 1 описаны атрибуты потока.

Как можно заметить, некоторые  атрибуты потока напоминают атрибуты объекта. Одни атрибуты, такие как  процессорное средство потока и динамический приоритет, фактически усиливают, или ослабляют ограничения, заданные для процесса в целом. Например, процессорное средство каждого потока - это неполное подмножество (равно или меньше) процессорного средства процесса. Следовательно, можно заставить разные потоки процесса выполняться на разных группах процессоров.

Таблица 1 Атрибуты объекта-потока

Атрибут

Назначение

Идентификатор клиента

Уникальное значение, идентифицирующее поток при вызове им сервера

Контекст потока

Набор значений регистров  и других непостоянных данных, определяющих состояние выполнения потока

Базовый приоритет

Нижний предел динамического  приоритета потока

Динамический приоритет

Приоритет потока на данный момент

Процессорное сродство потока

Набор процессоров, на которых  может исполняться поток, (неполное) подмножество процессорного сродства процесса потока

Время выполнения потока

Общее время выполнения потока в пользовательском режиме и режиме ядра

Статус оповещения

Флаг, указывающий на необходимость  отработки потоком асинхронного вызова процедуры (АРС)

Счетчик приостановок

Количество приостановок выполнения потока без последующего возобновления

Маркер имперсонации

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

Порт завершения

Канал коммуникации между  процессами, в который диспетчер  процессов посылает сообщение при  завершении потока (используется подсистемами)

Код завершения потока

Причина завершения потока


 

 
     
     
     

Аналогично, каждый поток  имеет базовый уровень приоритета, который лежит в диапазоне  от двух уровней ниже базового приоритета процесса до двух уровней выше этого  приоритета. Динамический приоритет потока, нижней границей которого является базовый приоритет потока, а верхняя зависит от вида работ, исполняемых потоком. Например, если поток обрабатывает пользовательский ввод, то ядро Windows поднимает его динамический приоритет; если же он выполняет вычисления, то ядро постепенно снижает его приоритет до базового. Снижая приоритет одного процесса и поднимая приоритет другого, подсистемы могут управлять относительной приоритетностью потоков внутри процесса. Базовый приоритет процесса определяет, сколь сильно могут различаться приоритеты потоков процесса и как они соотносятся с приоритетами потоков других процессов. Таким образом, каждый процесс должен иметь, по меньшей мере, один поток.

Создание потока в большей  степени напоминает программу для Windows, чем создание процесса. Дело в  том, что для создания потока используется функция CreateThread() (аналог WinMain()), одним  из аргументов которой является указатель  на функцию потока (аналог оконной  функции). Для создания потока требуется  следующая информация:

  1. Размер стека потока.
  2. Атрибуты защиты потока. Для указания установленной по умолчанию защиты в NT/XP/2000 либо в среде Windows 9.x, где защита не поддерживается, можно использовано значение NULL.
  3. Адрес процедуры, с которой начинается выполнение. Это должна быть функция, которая получает в качестве единственного параметра 32-разрядное значение.
  4. Дополнительное 32-разрядное значение, которое передается в процедуру потока.
  5. Флаги, которые, помимо прочего, допускают установку уровня приоритета потока.
  6. Адрес для хранения идентификатора потока. Идентификатор потока представляет собой уникальное системное значение.

Функция CreateThread(). При вызове этой функции происходит следующее:

  1. В памяти создаются все необходимые для управления потоком структуры (назовем их объектом «поток»);
  2. Код завершения потока инициализируется значением STILL_ACTIVE;
  3. Создается структура типа CONTEXT для потока;
  4. Создается стек потока;
  5. Инициализируется регистр - указатель стека в структуре типа CONTEXT так, чтобы он указывал на верхнюю границу стека, а регистр -указатель команд - на точку входа функции потока.

Синтаксис функции следующий:

  1. HANDLE CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes,
  2. DWORD dwStackSize,
  3. LPTHREAD_START_ROUTINE lpStartAddress,
  4. LPVOID lpParameter,
  5. DWORD dwCreationFlags,
  6. LPDWORD lpThreadld);

Параметры:

  1. lpThreadAttributes - является указателем на структуру типа SECURITY_ATTRIBUTES. В Windows 9x атрибуты безопасности не используются, то обычно этот аргумент равен NULL.
  2. dwStackSize - определяет размер выделяемого потоку стека. Если в качестве этого параметра указан 0, то поток будет иметь стек такого же размера, как и у породившего его потока.
  3. lpStartAddress - собственно и определяет поток, так как является адресом точки входа функции потока. Функция потока может иметь имя, определяемое программистом, но должна иметь следующий синтаксис
  4. DWORD WINAPI ThreadFunction(LPVOID lpParameter);
  5. Четвертый аргумент - lpParameter - это параметр, передаваемый функции потока. Что и каким образом передается в этом параметре, совершенно неважно. Это могут быть всевозможные данные, которые функция потока может использовать для своей работы.
  6. Если пятый аргумент - dwCreationFlags - равен нулю, то выполнение потока начнется немедленно. Если этот аргумент будет равен CREATE_SUSPENDED, то начало выполнение потока будет задержано до определенных событий, например, до вызова функции ResumeThread().
  7. В значение, определяемое последним параметром - lpThreadId - записывается идентификатор созданного потока.
  8. Возвращаемое значение: если выполнение функции выполнено успешно, то возвращается хэндл нового объекта потока.

 

 

 

 

 

 

 

  1. ЗАВЕРШЕНИЕ ПОТОКА

Как и процесс, поток может  быть завершен двумя способами - вызовом  функции ExitThread() и обращением к функции TerminateThread(). Отличаются они друг от друга  примерно тем же, что и функции ExitProcess() и TerminateProcess().

Функция ExitThread() используется для нормального завершения потока. Естественно, что она вызывается изнутри потока. Она описана в  файле winbase.h следующим образом

VOID ExitThread(DWORD dwExitCode)

Параметр: dwExitCode - код завершения этой функции. Функцию TerminateThread() следует вызывать только в крайних случаях, когда поток завис, и ни на какие действия пользователя не реагирует. Функция вызывается из какого-либо внешнего (по отношению к завершаемому) потока, a ее аргументами являются хэндл завершаемого потока и двойное слово, в которое будет записан код завершения потока. Описание функции в файле winbase.h выглядит следующим образом,

Информация о работе Понятие информационных потоков