Читайте также:
|
|
Для синхронизации процессов, порождаемых прикладными программами, программист может использовать как собственные средства и приемы, так и средства операционной системы, предоставляемые в форме системных вызовов. Последние являются во многих случаях более эффективными или единственно возможными. Например, потоки разных процессов могут взаимодействовать только через посредство операционной системы.
Ряд средств синхронизации:
1. Обеспечить взаимное исключение – позволить процессу, находящемуся в критической секции, запрещать все системные вызовы.
Недостатки метода. Опасно доверять управление системой пользовательскому процессу; он может надолго занять процессор, а при крахе процесса в критической области крах потерпит вся система, потому что системные вызовы никогда не будут разрешены.
2. Использование блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная.
Перед входом в критическую секцию процесс проверяет, свободен ли ресурс.
Если он занят, то проверка циклически повторяется. Если же ресурс свободен то значение переменной устанавливается в 0 и процесс входит в критическую секцию. После того как процесс выполнит все действия с разделяемым ресурсом, значение переменной снова устанавливается равным 1.
Недостатки метода. В течение времени, когда один процесс находится в критической секции, другой процесс, которому требуется тот же ресурс, будет выполнять рутинные действия по опросу блокирующей переменной, бесполезно тратя процессорное время.
3. Специальные системные вызовы для работы с критическими секциями позволяют устранить такие ситуации простоя. В разных операционных системах соответствующие функции реализуется по-разному, но действия их и использование аналогичны. Если ресурс занят, то нуждающийся в нем процесс не выполняет циклический опрос, а вызывает системную функцию, переводящую его (процесс) в состояние ожидания освобождения ресурса. Процесс, который использует ресурс, после выхода из критической секции выполняет системную функцию, переводящую первый процесс, ожидающий ресурса, в состояние готовности.
Специфика метода. Если объем работы в критической секции небольшой и вероятность в скором доступе к ресурсу велика, то экономнее окажется метод блокирующих переменных (за счет затрат на вызов функций).
4. Семафоры Дейкстры – обобщение метода блокирующих переменных.
5. Проблема тупиков.
Решение проблемы тупиков требует решения следующих задач:
· предотвращение тупиков,
· распознавание тупиков,
· восстановление системы после тупиков.
Тупики могут быть предотвращены на стадии написания программ, то есть программы должны быть написаны таким образом, чтобы тупик не мог возникнуть ни при каком соотношении взаимных скоростей процессов. Второй подход к предотвращению тупиков называется динамическим и заключается в использовании определенных правил при назначении ресурсов процессам, например, ресурсы могут выделяться в определенной последовательности, общей для всех процессов.
Дата добавления: 2014-12-19; просмотров: 104 | Поможем написать вашу работу | Нарушение авторских прав |