Изменения

Перейти к: навигация, поиск

Алгоритмы взаимного исключения

1850 байт добавлено, 10:11, 25 сентября 2018
Нет описания правки
}}
==Проблема==
Алгоритм получения выражения для чисел <tex>a_{n}</tex>Проблема, с которой связаны взаимные исключения, является проблемой совместного использования ресурсов: как можно управлять доступом нескольких процессов к общему ресурсу, когда каждый процесс нуждается в исключительном контроле над этим ресурсом при выполнении своей работы? Решение взаимного исключения - делать доступным общий ресурс только тогда, когда процесс находится в определенном сегменте кода, называемом критической секцией. Он контролирует доступ к общему ресурсу, удовлетворяющих рекуррентному соотношениюконтролируя каждое взаимное выполнение той части программы, с помощью производящих функций cостоит из <tex>4</tex> шаговв которой будет использоваться ресурсУспешное решение этой проблемы должно иметь по крайней мере эти два свойства:#Записать рекуррентное соотношение и начальные данные для него Он должен реализовывать взаимное исключение: только один процесс может быть в следующем виде критическом разделе за раз#Он должен быть свободен от взаимоблокировок (если порядок соотношения равен <tex>k</tex>англ. ''deadlocks''):если процессы пытаются войти в критический раздел, один из них должен, в конечном счете, сделать это успешно, при условии, что процесс не останется в критическом разделе навсегда. #Каждая программа процесса может быть разделена на четыре секции, что приводит к четырем состояниям. Выполнение программ осуществляется через эти четыре состояния в порядке:<tex>a_{0} == …, \\ a_{1} = …, \\ a_{kNon-1} Critical Section===Операция находится вне критической секции; этот процесс не использует или не запрашивает общий ресурс.===Trying== …, \\ … \\ a_{n} = …, n\geqslant k</tex>#Домножить каждую строчку на <tex>z</tex> Процесс пытается войти в соответствующей степени (<tex>z^{k} \cdot a_{k} критический раздел.===Critical Section===В этом разделе разрешен доступ к общему ресурсу.===Exit=== … \cdot z^{k}</tex>) Процесс выходит из критического раздела и сложить все выраженияделает доступный общий ресурс другим процессам.Если процесс хочет войти в критический раздел, многоточие надо рассматривать как множество из выраженийон должен сначала выполнить раздел try и подождать, где <tex>n \in [kпока он не получит доступ к критическому разделу. После того, +\infty)</tex>. В левой части получится сумма <tex>\displaystyle\sum_{n=0}^{\infty} a_nz^n</tex> — это производящая функциякак процесс выполнил свой критический раздел и завершился с общими ресурсами, назовем ее <tex>G(z)</tex>. Правую часть преобразовать такему необходимо выполнить раздел выхода, чтобы она превратилась в выражение, включающее <tex>G(z)</tex>.#Решить полученное уравнение, получив освободить их для <tex>G(z)</tex> выражение в замкнутом видеиспользования другими процессами.#Разложить <tex>G(z)</tex> Затем процесс возвращается в степенной ряд, коэффициент при <tex>z_n</tex> будет искомым выражением для <tex>a_n</tex>некритический раздел.
==Алгоритмы взаимного исключения==
302
правки

Навигация