35484

Процесcы в Windows

Доклад

Информатика, кибернетика и программирование

Потоки Процессы инертны. Отвечают же за исполнение кода содержащегося в адресном пространстве процесса потоки. Поток thread некая сущность внутри процесса получающая процессорное время для выполнения. В каждом процессе есть минимум один поток.

Русский

2013-09-15

143.5 KB

0 чел.

Процесcы в Windows

Процессы

Процессом обычно называют экземпляр выполняемой программы.

Процесс в Windows состоит из следующих компонентов:

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

- Адресное пространство - диапазон адресов виртуальной памяти, которым может пользоваться процесс;

- Исполняемая программа и данные, проецируемые на виртуальное адресное пространство процесса.

Потоки

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

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

Каждый поток имеет:

- Уникальный идентификатор потока;

- Содержимое набора регистров процессора, отражающих состояние процессора;

- Два стека, один из которых используется потоком при выполнении в режиме ядра, а другой - в пользовательском режиме;

- Закрытую область памяти, называемую локальной памятью потока (thread local storage, TLS) и используемую подсистемами, run-time библиотеками и DLL.

Планирование потоков

Чтобы все потоки работали, операционная система отводит каждому из них определенное процессорное время. Тем самым создается иллюзия одновременного выполнения потоков (разумеется, для многопроцессорных компьютеров возможен истинный параллелизм).

В Windows реализована система вытесняющего планирования на основе приоритетов, в которой всегда выполняется поток с наибольшим приоритетом, готовый к выполнению. Выбранный для выполнения поток работает в течение некоторого периода, называемого квантом. Квант определяет, сколько времени будет выполняться поток, пока операционная система не прервет его. По окончании кванта операционная система проверяет, готов ли к выполнению другой поток с таким же (или большим) уровнем приоритета. Если таких потоков не оказалось, текущему потоку выделяется еще один квант. Однако поток может не полностью использовать свой квант. Как только другой поток с более высоким приоритетом готов к выполнению, текущий поток вытесняется, даже если его квант еще не истек.

Квант не измеряется в каких бы то ни было единицах времени, а выражается целым числом. Для каждого потока хранится текущее значение его кванта. Когда потоку выделяется квант процессорного времени, это значит, что его квант устанавливается в начальное значение. Оно зависит от операционной системы. Например, для Win2000 Professional начальное значение кванта равно 6, а для Win2000 Server - 36.

Это значение можно изменить вызвав Control Panel - > System -> Advanced -> Performance options. Значение "Applications" - как для Win2000 Professional; "Background Services" - как для Win2000 Server.

Или напрямую в ключе реестра HKLM Win32PrioritySeparation.

Всякий раз, когда возникает прерывание от таймера, из кванта потока вычитается 3, и так до тех пор, пока он не достигнет нуля. Частота срабатывания таймера зависит от аппаратной платформы. Например, для большинства однопроцессорных x86 систем он составляет 10мс, а на большинстве многопроцессорных x86 систем - 15мс.

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

Планирование в Windows осуществляется на уровне потоков, а не процессов. Это кажется понятным, так как сами процессы не выполняются, а лишь предоставляют ресурсы и контекст для выполнения потоков. Поэтому при планировании потоков, система не обращает внимания на то, какому процессу они принадлежат. Например, если процесс А имеет 10 готовых к выполнению потоков, а процесс Б - два, и все 12 потоков имеют одинаковый приоритет, каждый из потоков получит 1/12 процессорного времени.

Приоритеты

В Windows существует 32 уровня приоритета, от 0 до 31. Они группируются так: 31 - 16 уровни реального времени; 15 - 1 динамические уровни; 0 - системный уровень, зарезервированный для потока обнуления страниц (zero-page thread).

Привязка к процессорам

Если операционная система выполняется на машине, где установлено более одного процессора, то по умолчанию, поток выполняется на любом доступном процессоре. Однако в некоторых случаях, набор процессоров, на которых поток может работать, может быть ограничен. Это явление называется привязкой к процессорам (processor affinity). Можно изменить привязку к процессорам программно, через Win32-функции планирования.

Память

Каждому процессу в Win32 доступно линейное 4-гигабайтное (2^32 = 4 294 967 296) виртуальное адресное пространство. Обычно верхняя половина этого пространства резервируется за операционной системой, а вторая половина доступна процессу.

Виртуальное адресное пространство процесса доступно всем потокам этого процесса. Иными словами, все потоки одного процесса выполняются в едином адресном пространстве.

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

Виртуальная память может вовсе не соответствовать структуре физической памяти. Диспетчер памяти транслирует виртуальные адреса на физические, по которым реально хранятся данные. Поскольку далеко не всякий компьютер в состоянии выделить по 4 Гбайт физической памяти на каждый процесс, используется механизм подкачки (swapping). Когда оперативной памяти не хватает, операционная система перемещает часть содержимого памяти на диск, в файл (swap file или page file), освобождая, таким образом, физическую память для других процессов. Когда поток обращается к странице виртуальной памяти, записанной на диск, диспетчер виртуальной памяти загружает эту информацию с диска обратно в память.

Процессы в Linux

В операционной системе Linux процесс, или задание, представляется структурой данных taskstruct.

В этой структуре данных информация разбита на следующие категории.

  •  Состояние. Состояние выполнения процесса (выполняющийся, готовый к выполнению, приостановленный, остановленный, зомби).
  •  Информация по планированию. Информация, которая нужна операционной системе Linux для планирования процессов. Процесс может быть обычным или выполняющимся в реальном времени; кроме того, он обладает некоторым приоритетом. Процессы, выполняющиеся в реальном времени, планируются до обычных процессов; в каждой из категорий можно использовать относительные приоритеты. Счетчик ведет отсчет времени, отведенного процессу.
  •  Идентификаторы. Каждый процесс обладает своим собственным идентификатором, а также идентификаторами пользователя и группы. Идентификатор группы используется для того, чтобы назначить группе пользователя права доступа к ресурсам.
  •  Обмен информацией между процессами. В операционной системе Linux используется такой же механизм межпроцессного взаимодействия, как и в операционной системе UNIX SVR4, описанной в главе 6, "Взаимоблокировка и голодание".
  •  Связи. Каждый процесс содержит в себе связи с параллельными ему процессами, с родственными ему процессами (с которыми он имеет общий родительский процесс) и связи со всеми своими дочерними процессами.
  •  Время и таймеры. Сюда входит время создания процесса, а также количество процессорного времени, затраченного на данный процесс. С процессом также могут быть связаны интервальные таймеры (один или несколько). Интервальный таймер задается в процессе с помощью системного вызова; после истечения периода таймера процессу отправляется соответствующий сигнал. Таймер может быть создан для одноразового или периодического использования.
  •  Файловая система. Содержит в себе указатели на все файлы, открытые данным процессом.
  •  Виртуальная память. Определяет отведенную данному процессу виртуальную память.

На рис. показаны состояния выполнения процесса.

  •  Выполняющийся. Это состояние отвечает на самом деле двум состояниям: текущий процесс либо выполняется, либо готов к выполнению.
  •  Прерываемый. Это состояние блокировки, в котором процесс ожидает наступления события, например, завершения операции ввода-вывода, освобождения ресурса или сигнала от другого процесса.
  •  Непрерываемый. Это состояние блокировки другого рода. Его отличие от предыдущего состоит в том, что в непрерываемом состоянии процесс непосредственно ожидает выполнения какого-то аппаратного условия, поэтому он не воспринимает никаких сигналов.
  •  Остановленный. Процесс был остановлен и может быть продолжен только при соответствующем воздействии другого процесса. Например, процесс, который находится в состоянии отладки, может перейти в состояние остановки.
  •  Зомби. Процесс был прекращен, но по какой-то причине его структура остается в таблице процессов.

Рис.. Модель процессов и потоков Linux

Потоки в Linux

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

Типы объектов синхронизации

Список объектов синхронизации включает следующие типы объектов:

·         процессы;

·         нити;

·         события (в узком смысле);

·         мьютексы (двоичные семафоры);

·         семафоры (недвоичные);

·         таймеры;

·         уведомления об изменениях в каталоге;

·         консольный ввод.

Нити

Что такое нить?

Точно также как многозадачная операционная система может делать несколько вещей одновременно при помощи разных процессов, один процесс может делать много вещей при помощи нескольких нитей. Каждая нить представляет собой независимо выполняющийся поток управления со своим счетчиком команд, регистровым контекстом и стеком. Понятия процесса и нити очень тесно связаны и поэтому трудноотличимы, нити даже часто называют легковесными процессами. Основные отличия процесса от нити заключаются в том, что, каждому процессу соответствует своя независимая от других область памяти, таблица открытых файлов, текущая директория и прочая информация уровня ядра. Нити же не связаны непосредственно с этими сущностями. У всех нитей принадлежащих данному процессу всё выше перечисленное общее, поскольку принадлежит этому процессу. Кроме того, процесс всегда является сущностью уровня ядра, то есть ядро знает о его существовании, в то время как нити зачастую является сущностями уровня пользователя и ядро может ничего не знать о ней. В подобных реализациях все данные о нити хранятся в пользовательской области памяти, и соответственно такие процедуры как порождение или переключение между нитями не требуют обращения к ядру и занимают на порядок меньше времени.

Что такое mutex?

Для организации взаимоисключения стандарт POSIX предлагает использовать так называемый mutex /от mutual exclusion/. Mutex можно рассматривать как изначально открытую комнату. Первая нить которая зашла под mutex, то первый человек вошедший в комнату закрывает ее. Другие нити или другие люди не могут попасть в эту комнату пока эта нить, то есть человек не откроет комнату и не выйдет из нее. То есть мы имеем взаимное исключение при доступе к общему ресурсу в чистом виде. Или модель туалетной кабинки кому, что больше нравится.

Почему mutex?

Как показывает практика правильно использовать его проще, чем другие механизмы синхронизации. На основе mutex и еще одного механизма, про который мы поговорим позже, легко построить все остальные механизмы синхронизации. Кроме того, его легко и дешево реализовывать [однако о реализации мы поговорим позже и отдельно].

Рассмотрим еще раз как работает механизм mutex на следующем примере:

Взаимоисключения

Объекты-взаимоисключения (мьютексы, mutex - от MUTual EXclusion) позволяют координировать взаимное исключение доступа к разделяемому ресурсу. Сигнальное состояние объекта (т.е. состояние "установлен") соответствует моменту времени, когда объект не принадлежит ни одному потоку и его можно "захватить". И наоборот, состояние "сброшен" (не сигнальное) соответствует моменту, когда какой-либо поток уже владеет этим объектом. Доступ к объекту разрешается, когда поток, владеющий объектом, освободит его.

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

События

Объекты-события используются для уведомления ожидающих потоков о наступлении какого-либо события. Различают два вида событий - с ручным и автоматическим сбросом. Ручной сброс осуществляется функцией ResetEvent. События с ручным сбросом используются для уведомления сразу нескольких потоков. При использовании события с автосбросом уведомление получит и продолжит свое выполнение только один ожидающий поток, остальные будут ожидать дальше.

Функция CreateEvent создает объект-событие, SetEvent - устанавливает событие в сигнальное состояние, ResetEvent-сбрасывает событие. Функция PulseEvent устанавливает событие, а после возобновления ожидающих это событие потоков (всех при ручном сбросе и только одного при автоматическом), сбрасывает его. Если ожидающих потоков нет, PulseEvent просто сбрасывает событие.

Семафоры

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

Критические секции

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


 

А также другие работы, которые могут Вас заинтересовать

80281. ПРОЕКТУВАННЯ ВІРТУАЛЬНОГО ПРИЛАДУ ДОСДІДЖЕННЯ ТЕМПЕРАТУРИ 395 KB
  Усі середовища складаються з атомів і молекул. Молекули знаходяться у хаотичному русі. При великій кількості часток у системі (вуглеводневі енергоносії, гірські породи, водні середовища) нема змоги детально описати поведінку кожної окремої часточки. Однак загальні риси поведінки системи в цілому є опосередкованим відображенням руху окремих часточок
80282. Методи оцінки і аналізу тіньової економічної діяльності в сфері підприємництва 123.5 KB
  Однією з причин перманентної економічної кризи в якій перебуває Україна є безпрецедентні розміри тінізації та криміналізації її економіки. Необхідно виробити нові підходи у протидії тонізації та криміналізації економіки. Безпосередні фрагментарні дослідження іллегального сектору полягають у визначенні розмірів тіньової економіки у конкретному секторі наприклад у виробництві товарів і послуг у розрізі асортиментних позицій у обміні валюти з урахуванням кількості офіційних пунктів обміну банків туристичних агентств реального курсу...
80283. Удосконалення управління процесами детінізації економічної діяльності 140.5 KB
  Роль і функції держави у зниженні тіньової економічної діяльності в Україні. Механізми запобігання розвитку тіньової економічної діяльності у сфері фінансово грошових відносин. Основні принципи розроблення комплексу заходів запобіжного характеру спрямованих на зниження рівня тіньової економічної діяльності. Методологічні підходи до визначення послідовності реалізації заходів спрямованих на запобігання розвитку тіньової економіки.
80284. Особливості розвитку тіньової економіки в України 65.5 KB
  Тіньовий ринок тіньова економіка істотно впливають на всі сторони економічної діяльності на політичне і суспільне життя кожної країни. Вже на такому рівні вплив державно нерегульованих факторів стає настільки відчутним що суперечності між легальним і тіньовим секторами спостерігаються практично в усіх сферах життєдіяльності суспільства. Труднощі які виникають в результаті внутрішньої неузгодженості регуляторноправового механізму та безсистемної беззмістовної зміни концептуальних орієнтирів розвитку економіки створюють необґрунтовані...
80285. Соціально-економічна сутність тіньової економічної діяльності 86.5 KB
  Соціальноекономічні причини виникнення та джерела походження тіньової економіки. Основні складові тіньової економіки. Класифікація форм і видів прояву тіньової економіки. Тому кожна держава розробляє стратегію форми і методи протистояння тіньовій економічній діяльності упроваджує механізми зниження її негативного впливу на розвиток національної економіки.
80286. Міжнародні організації з боротьби з легалізацією тіньових доходів 128.5 KB
  Створення структура і основні принципи діяльності Групи з розробки фінансових заходів з боротьби з відмиванням грошей FTF. Група з розробки фінансових заходів з боротьби з відмиванням грошей FTF застосувала до України контрзаходи і в кінці року ми були занесені в чорний список країн де відмиваються злочинні кошти. Основні міжнародні вимоги які необхідно враховувати при побудові національно системи боротьби з відмиванням грошей є такі: Адаптація Сорока рекомендацій FTF; Адаптація рекомендацій Базельського комітету Знай...
80287. Збитки від надзвичайних ситуацій та методи їх визначення 263.5 KB
  Класифікація збитків від наслідків надзвичайних ситуацій природного і техногенного характеру. Розрахунок збитків від різних видів наслідків надзвичайних ситуацій природного і техногенного характеру.