Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Написать доклад + презентацию

Тип Доклад
Предмет Операционные системы

ID (номер) заказа
3671848

300 руб.

Просмотров
1118
Размер файла
2.12 Мб
Поделиться

Ознакомительный фрагмент работы:

Оглавление
Введение 3
Блокирующие переменные 3
Семафоры 6
Тупики 9
Синхронизирующие объекты ОС 13
Сигналы 17
Заключение 18
Список использованной литературы 18

Введение
Существует достаточно обширный класс средств операционной системы, с
помощью которых обеспечивается взаимная синхронизация процессов и потоков.
Потребность в синхронизации потоков возникает только в мультипрограммной
операционной системе и связана с совместным использованием аппаратных и
информационных ресурсов вычислительной системы. Синхронизация необходима для
исключения гонок и тупиков при обмене данными между потоками, разделении
данных, при доступе к процессору и устройствам ввода-вывода.
Во многих операционных системах эти средства называются средствами
межпроцессного взаимодействия — Inter Process Communications (IPC), что отражает
историческую первичность понятия «процесс» по отношению к понятию «поток».
Обычно к средствам IPC относят не только средства межпроцессной синхронизации,
но и средства межпроцессного обмена данными.
Блокирующие переменные
Для синхронизации потоков одного процесса прикладной программист может
использовать глобальные блокирующие переменные. С этими переменными, к
которым все потоки процесса имеют прямой доступ, программист работает, не
обращаясь к системным вызовам ОС.

Рис. 4.18. Реализация критических секций с использованием блокирующих

переменных

Каждому набору критических данных ставится в соответствие двоичная
переменная, которой поток присваивает значение 0, когда он входит в критическую
секцию, и значение 1, когда он ее покидает. На рис. 4.18 показан фрагмент алгоритма
потока, использующего для реализации взаимного исключения доступа к критическим
данным D блокирующую переменную F(D). Перед входом в критическую секцию
поток проверяет, не работает ли уже какой-нибудь поток с данными D. Если
переменная F(D) установлена в 0, то данные заняты и проверка циклически
повторяется. Если же данные свободны (F(D) = 1), то значение переменной F(D)
устанавливается в 0 и поток входит в критическую секцию. После того как поток
выполнит все действия с данными D, значение переменной F(D) снова
устанавливается равным 1.
Блокирующие переменные могут использоваться не только при доступе к
разделяемым данным, но и при доступе к разделяемым ресурсам любого вида.
Если все потоки написаны с учетом вышеописанных соглашений, то взаимное
исключение гарантируется. При этом потоки могут быть прерваны операционной
системой в любой момент и в любом месте, в том числе в критической секции.
Однако следует заметить, что одно ограничение на прерывания все же имеется.
Нельзя прерывать поток между выполнением операций проверки и установки
блокирующей переменной. Поясним это. Пусть в результате проверки переменной
поток определил, что ресурс свободен, но сразу после этого, не успев установить
переменную в 0, был прерван. За время его приостановки другой поток занял ресурс,
вошел в свою критическую секцию, но также был прерван, не завершив работы с
разделяемым ресурсом. Когда управление было возвращено первому потоку, он,
считая ресурс свободным, установил признак занятости и начал выполнять свою
критическую секцию. Таким образом, был нарушен принцип взаимного исключения,
что потенциально может привести к нежелательным последствиям. Во избежание
таких ситуаций в системе команд многих компьютеров предусмотрена единая,
неделимая команда анализа и присвоения значения логической переменной (например,
команды ВТС, BTR и BTS процессора Pentium). При отсутствии такой команды в
процессоре соответствующие действия должны реализовываться специальными

системными примитивами', которые бы запрещали прерывания на протяжении всей
операции проверки и установки.
Реализация взаимного исключения описанным выше способом имеет
существенный недостаток: в течение времени, когда один поток находится в
критической секции, другой поток, которому требуется тот же ресурс, получив доступ
к процессору, будет непрерывно опрашивать блокирующую переменную, бесполезно
тратя выделяемое ему процессорное время, которое могло бы быть использовано для
выполнения какого-нибудь другого потока. Для устранения этого недостатка во
многих ОС предусматриваются специальные системные вызовы для работы с
критическими секциями.
На рис. 4.19 показано, как с помощью этих функций реализовано взаимное
исключение в операционной системе Windows NT. Перед тем как начать изменение
критических данных, поток выполняет системный вызов EnterCriticalSection(). В
рамках этого вызова сначала выполняется, как и в предыдущем случае, проверка
блокирующей переменной, отражающей состояние критического ресурса. Если
системный вызов определил, что ресурс занят (F(D) = 0), он в отличие от предыдущего
случая не выполняет циклический опрос, а переводит поток в состояние ожидания (D)
и делает отметку о том, что данный поток должен быть активизирован, когда
соответствующий ресурс освободится. Поток, который в это время использует данный
ресурс, после выхода из критической секции должен выполнить системную функцию
LeaveCriticalSectionO, в результате чего блокирующая переменная принимает
значение, соответствующее свободному состоянию ресурса (F(D) = 1), а операционная
система просматривает очередь ожидающих этот ресурс потоков и переводит первый
поток из очереди в состояние готовности.

Рис. 4.19. Реализация взаимного исключения с использованием системных
функций входа в критическую секцию и выхода из нее

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

* V(S): переменная S увеличивается на 1 единым действием. Выборка,
наращивание и запоминание не могут быть прерваны. К переменной S нет доступа
другим потокам во время выполнения этой операции.
* P(S): уменьшение S на 1, если это возможно. Если 5=0 и невозможно
уменьшить S, оставаясь в области целых неотрицательных значений, то в этом случае
поток, вызывающий операцию Р, ждет, пока это уменьшение станет возможным.
Успешная проверка и уменьшение также являются неделимой операцией.
Никакие прерывания во время выполнения примитивов V и Р недопустимы.
В частном случае, когда семафор S может принимать только значения 0 и 1, он
превращается в блокирующую переменную, которую по этой причине часто называют
двоичным семафором. Операция Р заключает в себе потенциальную возможность
перехода потока, который ее выполняет, в состояние ожидания, в то время как
операция V может при некоторых обстоятельствах активизировать другой поток,
приостановленный операцией Р.
Рассмотрим использование семафоров на классическом примере взаимодействия
двух выполняющихся в режиме мультипрограммирования потоков, один из которых
пишет данные в буферный пул, а другой считывает их из буферного пула. Пусть
буферный пул состоит из N буферов, каждый из которых может содержать одну
запись. В общем случае поток-писатель и поток-читатель могут иметь различные
скорости и обращаться к буферному пулу с переменой интенсивностью. В один
период скорость записи может превышать скорость чтения, в другой — наоборот. Для
правильной совместной работы поток-писатель должен приостанавливаться, когда все
буферы оказываются занятыми, и активизироваться при освобождении хотя бы одного
буфера. Напротив, поток-читатель должен приостанавливаться, когда все буферы
пусты, и активизироваться при появлении хотя бы одной записи.
Введем два семафора: е — число пустых буферов, и f — число заполненных
буферов, причем в исходном состоянии е = N, a f = 0. Тогда работа потоков с общим
буферным пулом может быть описана следующим образом (рис. 4.20).
Поток-писатель прежде всего выполняет операцию Р(е), с помощью которой он
проверяет, имеются ли в буферном пуле незаполненные буферы. В соответствии с
семантикой операции Р, если семафор е равен 0 (то есть свободных буферов в данный

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

Рис. 4.20. Использование семафоров для синхронизации потоков
В данном случае предпочтительнее использовать семафоры вместо
блокирующих переменных. Действительно, критическим ресурсом здесь является
буферный пул, который может быть представлен как набор идентичных ресурсов —
отдельных буферов, а значит, с буферным пулом могут работать сразу несколько
потоков, и именно столько, сколько буферов в нем содержится. Использование
двоичной переменной не позволяет организовать доступ к критическому ресурсу
более чем одному потоку. Семафор же решает задачу синхронизации более гибко,
допуская к разделяемому пулу ресурсов заданное количество потоков. Так, в нашем
примере с буферным пулом могут работать максимум N потоков, часть из которых
может быть «писателями», а часть — «читателями».
Таким образом, семафоры позволяют эффективно решать задачу синхронизации
доступа к ресурсным пулам, таким, например, как набор идентичных в
функциональном назначении внешних устройств (модемов, принтеров, портов), или
набор областей памяти одинаковой величины, или информационных структур. Во всех

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

Рис. 4.21. Использование двоичного семафора

Тупики
Приведенный выше пример позволяет также проиллюстрировать еще одну
проблему синхронизации — взаимные блокировки, называемые также дедлоками
(deadlocks), клинчами (clinch), или тупиками. Покажем, что если переставить местами
операции Р(е) и Р(b) в потоке-писателе, то при некотором стечении обстоятельств эти
два потока могут взаимно блокировать друг друга.
Итак, пусть поток-писатель начинает свою работу с проверки доступности
критической секции — операции Р(Ь), и пусть он первым войдет в критическую
секцию. Выполняя операцию Р(е), он может обнаружить отсутствие свободных
буферов и перейти в состояние ожидания. Как уже было показано, из этого состояния
его может вывести только поток-читатель, который возьмет очередную запись из
буфера. Но поток-читатель не сможет этого сделать, так как для этого ему потребуется

войти в критическую секцию, вход в которую заблокирован потоком-писателем.
Таким образом, ни один из этих потоков не может завершить начатую работу и
возникнет тупиковая ситуация, которая не может разрешиться без внешнего
воздействия.
Рассмотрим еще один пример тупика. Пусть двум потокам, принадлежащим
разным процессам и выполняющимся в режиме мультипрограммирования, для
выполнения их работы нужно два ресурса, например принтер и последовательный
порт. Такая ситуация может возникнуть, например, во время работы приложения,
задачей которого является распечатка информации, поступающей по модемной связи.
На рис. 4.22, а показаны фрагменты соответствующих программ. Поток А
запрашивает сначала принтер, а затем порт, а поток В запрашивает устройства в
обратном порядке. Предположим, что после того, как ОС назначила принтер потоку А
и установила связанную с этим ресурсом блокирующую переменную, поток А был
прерван. Управление получил поток В, который сначала выполнил запрос на
получение СОМ-порта, затем при выполнении следующей команды был заблокирован,
так как принтер оказался уже занятым потоком А. Управление снова получил поток А,
который в соответствии со своей программой сделал попытку занять порт и был
заблокирован, поскольку порт уже выделен потоку В. В таком положении потоки А и
В могут находиться сколь угодно долго.
В зависимости от соотношения скоростей потоков они могут либо взаимно
блокировать друг друга (рис. 4.22, б), либо образовывать очереди к разделяемым
ресурсам (рис. 4.22, б), либо совершенно независимо использовать разделяемые
ресурсы (рис. 4.22, г).

Рис. 4.22. Возникновение взаимных блокировок при выполнении программы
Тупиковые ситуации надо отличать от простых очередей, хотя те и другие
возникают при совместном использовании ресурсов и внешне выглядят похоже: поток
приостанавливается и ждет освобождения ресурса. Однако очередь — это нормальное
явление, неотъемлемый признак высокого коэффициента использования ресурсов при
случайном поступлении запросов. Очередь появляется тогда, когда ресурс недоступен
в данный момент, но освободится через некоторое время, позволив потоку
продолжить выполнение. Тупик же, что видно из его названия, является в некотором
роде неразрешимой ситуацией. Необходимым условием возникновения тупика
является потребность потока сразу в нескольких ресурсах.
В рассмотренных примерах тупик был образован двумя потоками, но взаимно
блокировать друг друга может и большее число потоков. На рис. 2.23 показано такое
распределение ресурсов Ri между несколькими потоками Tj, которое привело к
возникновению взаимных блокировок. Стрелки обозначают потребность потока в
ресурсах. Сплошная стрелка означает, что соответствующий ресурс был выделен
потоку, а пунктирная стрелка соединяет поток с тем ресурсом, который необходим, но
не может быть пока выделен, поскольку занят другим потоком. Например, потоку Т1
для выполнения работы необходимы ресурсы R1 и R2, из которых выделен только
один — R1, а ресурс R2 удерживается потоком Т2. Ни один из четырех показанных на

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

Рис. 4.23. Взаимная блокировка нескольких потоков

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

В тех же случаях, когда тупиковую ситуацию не удалось предотвратить, важно
быстро и точно ее распознать, поскольку блокированные потоки не выполняют
никакой полезной работы. Если тупиковая ситуация образована множеством потоков,
занимающих массу ресурсов, распознавание тупика является нетривиальной задачей.
Существуют формальные, программно-реализованные методы распознавания тупиков,
основанные на ведении таблиц распределения ресурсов и таблиц запросов к занятым
ресурсам. Анализ этих таблиц позволяет обнаружить взаимные блокировки.
Если же тупиковая ситуация возникла, то не обязательно снимать с выполнения
все заблокированные потоки. Можно снять только часть из них, освободив ресурсы,
ожидаемые остальными потоками, можно вернуть некоторые потоки в область
подкачки, можно совершить «откат» некоторых потоков до так называемой
контрольной точки, в которой запоминается вся информация, необходимая для
восстановления выполнения программы с данного места. Контрольные точки
расставляются в программе в тех местах, после которых возможно возникновение
тупика.
Синхронизирующие объекты ОС
Рассмотренные выше механизмы синхронизации, основанные на использовании
глобальных переменных процесса, обладают существенным недостатком — они не
подходят для синхронизации потоков разных процессов. В таких случаях
операционная система должна предоставлять потокам системные объекты
синхронизации, которые были бы видны для всех потоков, даже если они принадлежат
разным процессам и работают в разных адресных пространствах.
Примерами таких синхронизирующих объектов ОС являются системные
семафоры, мьютексы, события, таймеры и другие — их набор зависит от конкретной
ОС, которая создает эти объекты по запросам процессов. Чтобы процессы могли
разделять синхронизирующие объекты, в разных ОС используются разные методы.
Некоторые ОС возвращают указатель на объект. Этот указатель может быть доступен
всем родственным процессам, наследующим характеристики общего родительского
процесса. В других ОС процессы в запросах на создание объектов синхронизации
указывают имена, которые должны быть им присвоены. Далее эти имена

используются разными процессами для манипуляций объектами синхронизации. В
таком случае работа с синхронизирующими объектами подобна работе с файлами. Их
можно создавать, открывать, закрывать, уничтожать.
Кроме того, для синхронизации могут быть использованы такие «обычные»
объекты ОС, как файлы, процессы и потоки. Все эти объекты могут находиться в двух
состояниях: сигнальном и несигнальном — свободном. Для каждого объекта смысл,
вкладываемый в понятие «сигнальное состояние», зависит от типа объекта. Так,
например, поток переходит в сигнальное состояние тогда, когда он завершается.
Процесс переходит в сигнальное состояние тогда, когда завершаются все его потоки.
Файл переходит в сигнальное состояние в том случае, когда завершается операция
ввода-вывода для этого файла. Для остальных объектов сигнальное состояние
устанавливается в результате выполнения специальных системных вызовов.
Приостановка и активизация потоков осуществляются в зависимости от состояния
синхронизирующих объектов ОС.
Потоки с помощью специального системного вызова сообщают операционной
системе о том, что они хотят синхронизировать свое выполнение с состоянием
некоторого объекта. Будем далее называть этот системный вызов Wait(X), где X —
указатель на объект синхронизации. Системный вызов, с помощью которого поток
может перевести объект синхронизации в сигнальное состояние, назовем Set(X).
Поток, выполнивший системный вызов Wait(X), переводится операционной
системой в состояние ожидания до тех пор, пока объект X не перейдет в сигнальное
состояние. Примерами системных вызовов типа WaitO и Set() являются вызовы
WaitForSingleObjectO и SetEventO в Windows NT, DosSemWaitO и DosSemSetO в OS/2,
sleepO и wakeupO в UNIX.
Поток может ожидать установки сигнального состояния не одного объекта, а
нескольких. При этом поток может попросить ОС активизировать его при установке
либо одного из указанных объектов, либо всех объектов. Поток может в качестве
аргумента системного вызова WaitO указать также максимальное время, которое он
будет ожидать перехода объекта в сигнальное состояние, после чего ОС должна его
активизировать в любом случае. Может случиться, что установки некоторого объекта
в сигнальное состояние ожидают сразу несколько потоков. В зависимости от объекта

синхронизации в состояние готовности могут переводиться либо все ожидающие это
событие потоки, либо один из них.
Синхронизация тесно связана с планированием потоков. Во-первых, любое
обращение потока с системным вызовом Wait(X) влечет за собой действия в
подсистеме планирования — этот поток снимается с выполнения и помещается в
очередь ожидающих потоков, а из очереди готовых потоков выбирается и
активизируется новый поток. Во-вторых, при переходе объекта в сигнальное
состояние (в результате выполнения некоторого потока — либо системного, либо
прикладного) ожидающий этот объект поток (или потоки) переводится в очередь
готовых к выполнению потоков. В обоих случаях осуществляется перепланирование
потоков, при этом если в ОС предусмотрены изменяемые приоритеты и/или кванты
времени, то они пересчитываются по правилам, принятым в этой операционной
системе.
Рассмотрим несколько примеров, когда в качестве синхронизирующих объектов
используются файлы, потоки и процессы.
Пусть программа приложения построена так, что для выполнения запросов,
поступающих из сети, основной поток создает вспомогательные серверные потоки.
При поступлении от пользователя команды завершения приложения основной
поток должен дождаться завершения всех серверных потоков и только после этого
завершиться сам. Следовательно, процедура завершения должна включать вызов
Wait(Xl, Х2, ...), где XI, Х2 — указатели на серверные потоки. В результате
выполнения данного системного вызова основной поток будет переведен в состояние
ожидания и останется в нем до тех пор, пока все серверные потоки не перейдут в
сигнальное состояние, то есть завершатся. После этого ОС переведет основной поток в
состояние готовности. При получении доступа к процессору основной поток
завершится.
Другой пример. Пусть выполнение некоторого приложения требует
последовательных работ-этапов. Для каждого этапа имеется свой отдельный процесс.
Сигналом для начала работы каждого следующего процесса является завершение
предыдущего. Для реализации такой логики работы необходимо в каждом процессе,

кроме первого, предусмотреть выполнение системного вызова Wait(X), в котором
синхронизирующим объектом является предшествующий поток.
Объект-файл, переход которого в сигнальное состояние соответствует
завершению операции ввода-вывода с этим файлом, используется в тех случаях, когда
поток, инициировавший эту операцию, решает дождаться ее завершения, прежде чем
продолжить свои вычисления.
Однако круг событий, с которыми потоку может потребоваться
синхронизировать свое выполнение, отнюдь не исчерпывается завершением потока,
процесса или операции ввода-вывода. Поэтому в ОС, как правило, имеются и другие,
более универсальные объекты синхронизации, такие как событие (event), мьютекс
(mutex), системный семафор и другие.
Мьютекс, как и семафор, обычно используется для управления доступом к
данным.
В отличие от объектов-потоков, объектов-процессов и объектов-файлов,
которые при переходе в сигнальное состояние переводят в состояние готовности все
потоки, ожидающие этого события, объект-мьютекс «освобождает» из очереди
ожидающих только один поток.
Работа мьютекса хорошо поясняется в терминах «владения». Пусть поток,
который, пытаясь получить доступ к критическим данным, выполнил системный
вызов Wait(X), где X — указатель на мьютекс. Предположим, что мьютекс находится
в сигнальном состоянии, в этом случае поток тут же становится его владельцем,
устанавливая его в несигнальное состояние, и входит в критическую секцию. После
того как поток выполнил работу с критическими данными, он «отдает» мьютекс,
устанавливая его в сигнальное состояние. В этот момент мьютекс свободен и не
принадлежит ни одному потоку. Если какой-либо поток ожидает его освобождения, то
он становится следующим владельцем этого мьютекса, одновременно мьютекс
переходит в несигнальное состояние.
Объект-событие (в данном случае слово «событие» используется в узком
смысле, как обозначение конкретного вида объектов синхронизации) обычно
используется не для доступа к данным, а для того, чтобы оповестить другие потоки о
том, что некоторые действия завершены. Пусть, например, в некотором приложении

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

вызовы, с помощью которых операционная система информируется, какую процедуру
надо выполнить в ответ на поступление того или иного сигнала.
Сигналы обеспечивают логическую связь между процессами, а также между
процессами и пользователями (терминалами). Поскольку посылка сигнала
предусматривает знание идентификатора процесса, то взаимодействие посредством
сигналов возможно только между родственными процессами, которые могут получить
данные об идентификаторах друг друга.
В распределенных системах, состоящих из нескольких процессоров, каждый из
которых имеет собственную оперативную память, блокирующие переменные,
семафоры, сигналы и другие аналогичные средства, основанные на разделяемой
памяти, оказываются непригодными. В таких системах синхронизация может быть
реализована только посредством обмена сообщениями.
Заключение
Любое взаимодействие процессов или потоков связано с их синхронизацией,
которая заключается в согласовании их скоростей путем приостановки потока до
наступления некоторого события и последующей его активизации при наступлении
этого события. Синхронизация лежит в основе любого взаимодействия потоков,
связано ли это взаимодействие с разделением ресурсов или с обменом данными.
Список использованной литературы
1.Синхронизация процессов и потоков. — Текст : электронный // : [сайт]. —
URL: https://pandia.ru/text/78/239/45854.php (дата обращения: 24.12.2021).
2.Механизмы синхронизации. — Текст : электронный // : [сайт]. — URL:
https://intuit.ru/studies/courses/2192/31/lecture/978 (дата обращения: 24.12.2021).
3. Синхронизация процессов и потоков. — Текст : электронный // : [сайт]. —
URL: http://codenet.ru/progr/cpp/process-threads-sync.php (дата обращения: 24.12.2021).


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
46 527 оценок star star star star star
среднее 4.9 из 5
РАНХиГС
Работа выполнена досрочно. Автор отвечает на все вопросы. Работа выполнена хорошо, без зам...
star star star star star
Курганская Академия доп.образования
Спасибо, Ольга Вам за выполненную работу. Безукоризненно! Надеюсь на дальнейшее сотрудниче...
star star star star star
РГУТиС
большое спасибо все выполнено на высшем уровне без нареканий. приятно было поработать с вами
star star star star star

Последние размещённые задания

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

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

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

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно
    Введите ваш e-mail
    Файл с работой придёт вам на почту после оплаты заказа
    Успешно!
    Работа доступна для скачивания 🤗.