Синхронизация процессов и потоков. 


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



ЗНАЕТЕ ЛИ ВЫ?

Синхронизация процессов и потоков.



 

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

 

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

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

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

Еще одной проблемой синхронизации является распознавание тупиков (временных блокировок).

 

Поток АПоток В

ресурс 1 ресурс 2

ресурс 2 ресурс 1

 

Пусть поток А обращается к ресурсам в порядке номеров 1 и 2, а поток В наоборот.

Возможна ситуация, когда поток А получил ресурс 1 и квант его времени завершился, затем запустился поток в и захватил ресурс 2. В итоге после получения кванта времени каждый поток пытается получить следующий ресурс, но он уже занят другим потоком – возникает тупик.

 

Управление памятью. Функции ОС по управлению памятью.

 

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

1. отслеживание свободной и занятой памяти;

2. выделение памяти процессом и освобождение ее после завершения;

3. выполнение кодов и данных, принадлежащих процессам из ОП на диск (полное или частичное), когда размеры основной памяти недостаточно для размещения в ней всех процессов и возвращение их в ОП, когда в ней освобождается место;

4. настройка программы на конкретную область физической памяти;

5. защита памяти процессов от взаимного вмешательства.

 

Типы адресов.

 

Для идентификации переменных и команд на разных этапах жизненного цикла программы используется:

 

1. символические имена (метки) – их присваивает пользователь при написании программы на языке программирования;

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

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

 

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

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

· преобразование при загрузке программы в оперативную память выполняется с помощью перемещающего загрузчика (выполняется только один раз).

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

Виртуальная память.

 

Виртуализация оперативной памяти (т.е. подмена ее дисковой памятью) осуществляется совокупностью программных модулей ОС и аппаратных схем процессора и включает решение задач:

· размещение данных в ЗУ разного типа (часть кода программы - в оперативную память, часть на диске);

· выбор образов процессов или их частей для перемещения из оперативной памяти на диск и обратно.

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

· преобразование виртуальных адресов в физические.

· перемещение данных по мере необходимости между памятью и диском.

 

Виртуализация памяти может быть осуществлена на основе двух различных подходов:

· свопинг (swopping) – образы процесса выгружается на диск, возвращаются обратно в память полностью;

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

Свопинг – частный случай виртуальной памяти. Ему присуща избыточность. В настоящее время все множество реализаций виртуальной памяти может быть представлено тремя классами:

 

· страничная виртуальная память (организуется перемещение данных между памятью и диском страницами, т.е. частями виртуального адресного пространства, имеющими фиксированный небольшой размер, 4 Кб.). Достоинства: возрастает скорость обмена; уменьшается уровень фрагментации. Недостатки: сложно организовать защиту данных, разделенных на части механически.

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

Достоинства: упрощается защита сегментов. Недостатки: медленное преобразование адресов; высокий уровень фрагментации памяти.

· сегментно- страничная виртуальная память - сочетает достоинства обоих подходов.

 

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



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 156; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.221.113 (0.009 с.)