Cинхронизация Windows. Процессы, потоки и методы синхронизации

Автор работы: Пользователь скрыл имя, 03 Сентября 2013 в 08:20, курсовая работа

Описание работы

В данной работе рассмотрен принцип организации синхронизации в операционной системе Windows: что такое процессы и потоки, как, и какими средствами синхронизовать их псевдопараллельное выполнение.

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

1 Введение ………………………………………………………..…………….…5
2 Процессы и потоки……………………………………………………………...6
3 Синхронизация потоков………………….…………………………………...8
3.1 необходимость синхрониза-ции……………………………………….8
3.2 механизм синхронизации и ее объекты……………………..……...8
3.3 проблемы синхронизации……………………………………………10
3.4 работа с объектами синхрониза-ции………………………………..11
4 Методы синхронизации……………………………….……........................12
4.1 методы прерываний и сигна-лов……..………………………….….12
4.2 метод семафоров ..…………………………………………………..13
4.3 метод блокировки …………………………………………………...14
4.4 метод гармонически взаимодействующих последовательных
процессов…………………………………………….…………………………..14
5 Приложение…………………………………………………………………….16
6 Заключение……………………………………………………………………..18
7 Библиографический список …………………………………………………..19

Файлы: 1 файл

Синхронизация Windows. Процессы, потоки и методы синхронизации.doc

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



Федеральное агентство по образованию

ГОУ ВПО «СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ  ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ»

 

 

 

 

 

КАФЕДРА СИСТЕМОТЕХНИКИ

 

 

 

 

 

 

ОПЕРАЦИОННЫЕ  СИСТЕМЫ

 

 

 

 

 

 

 

КУРСОВАЯ РАБОТА

 

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

(СТ.000000. 088. ПЗ)

 

 

 

 

 

 

 

 

 

 

Руководитель

 

_________________

(дата оценка роспись)

Выполнил

Студентка гр.23-6

Чемрова А.П.

_________________

(дата роспись)

ГОУ ВПО «СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ  ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ»


 

 

 

 

КАФЕДРА СИСТЕМОТЕХНИКИ

 

 

 

 

 

Утверждаю «__»___________________201__г.

Зав. кафедрой____________________________

__________________________________

 

 

 

 

ЗАДАНИЕ

НА КУРСОВУЮ РАБОТУ ПО ОПЕРАЦИОННЫМ СИСТЕМАМ

 

Студент: Чемрова Алёна Павловна

 

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

Тема: Cинхронизация Windows. Процессы, потоки и методы синхронизации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание выдано

Руководитель ____________________


РЕФЕРАТ

Пояснительная записка содержит 19 страниц. Использовались семь литературных источников.

Целью работы является изучение понятия синхронизации и ее методов в операционной системе Windows. Изучение понятий процесс и поток, выяснение необходимости и способов реализации синхронизации процессов.

 

СОДЕРЖАНИЕ

 

1 Введение ………………………………………………………..…………….…5

2 Процессы и потоки……………………………………………………………...6

3 Синхронизация потоков………………….…………………………………...8

3.1 необходимость синхронизации……………………………………….8

3.2 механизм синхронизации и ее объекты……………………..……...8

3.3 проблемы синхронизации……………………………………………10

3.4 работа с объектами синхронизации………………………………..11

4 Методы синхронизации……………………………….……........................12

4.1 методы прерываний и сигналов……..………………………….….12

4.2 метод семафоров ..…………………………………………………..13

4.3 метод блокировки …………………………………………………...14

4.4 метод гармонически взаимодействующих последовательных 
процессов…………………………………………….…………………………..14

5 Приложение…………………………………………………………………….16

6 Заключение……………………………………………………………………..18

7 Библиографический список …………………………………………………..19

 

1 Введение

В данной работе рассмотрен принцип организации синхронизации в операционной системе Windows: что такое процессы и потоки, как, и какими средствами синхронизовать их псевдопараллельное выполнение.

 

2 Процессы и потоки

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

Конечно же, один процессор  может одновременно исполнять лишь один поток инструкций. Поэтому, когда потоки команд исполняются действительно параллельно и независимо, «многопоточность» возможна только в многопроцессорной машине.

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

В зависимости от ситуации потоки могут находиться в трех состояниях:

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

2 состояние готовности - поток неактивен и ожидает выделения процессорного времени;

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

Основные объекты потока:

1 контекст

2 стек

Контекст потока (thread context) – это набор значений регистров процессора. Его можно получить функцией GetThreadContext (см. Приложение).

 

 

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

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

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

Заслуживающим внимания моментом является способ организации очередности потоков. Можно было бы, конечно, обрабатывать все потоки по очереди, но такой способ далеко не самый эффективный. Гораздо разумнее оказалось ранжировать все потоки по приоритетам. Приоритет потока обозначается числом от 0 до 31, и определяется исходя из приоритета процесса, породившего поток, и относительного приоритета самого потока. Таким образом, достигается наибольшая гибкость, и каждый поток в идеале получает столько времени, сколько ему необходимо.

Иногда приоритет потока может изменяться динамически. Так  интерактивные потоки, имеющие обычно класс приоритета Normal, система обрабатывает несколько иначе и несколько повышает фактический приоритет таких потоков, когда процесс, их породивший, находится на переднем плане. Это сделано для того, чтобы приложение, с которым в данный момент работает пользователь, быстрее реагировало на его действия.

 

 

 

3 Синхронизация потоков

3.1 необходимость синхронизации

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

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

 

 

 

 

 

 

 

 

 

 

 

 

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

В Windows реализована вытесняющая многозадачность — это значит, что в любой момент система может прервать выполнение одного потока и передать управление другому. Раньше использовался способ организации, называемый кооперативной многозадачностью. Система ждала, пока поток сам не соизволит передать ей управление. Именно поэтому в случае глухого зависания одного приложения приходилось перезагружать компьютер. Если один поток еще не закончил работать с каким-либо общим ресурсом, а система переключилась на другой поток, использующий тот же ресурс, то произойдет конфликт, и результат работы этих потоков может чрезвычайно сильно отличаться от задуманного. Такие конфликты могут возникнуть и между потоками, принадлежащими различным процессам. Всегда, когда два или более потоков используют какой-либо общий ресурс, возникает эта проблема. Именно поэтому необходим механизм, позволяющий потокам согласовывать свою работу с общими ресурсами. Этот механизм получил название механизма синхронизации потоков.

 

3.2 Механизм синхронизации и ее объекты

Синхронизация – согласование скоростей паралельно выполняющихся процессов.

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

Объекты синхронизации:

1 взаимоисключение (mutex);

2 критическая секция (critical section);

3 событие (event) ;

4 семафор (semaphore).

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

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

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

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

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

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

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

Информация о работе Cинхронизация Windows. Процессы, потоки и методы синхронизации