Условие неперераспределяемости ресурсов и его разрешение.

Нарушение условия неперераспределяемости.

Второй стратегический принцип предотвращает возникновение условия неперераспределяемости ресурса. Предположим, что система позволяет процессам, запрашивающим дополнительные ресурсы, удерживать уже имеющиеся. Если у системы достаточно свободных ресурсов на это, то тупиковых ситуаций не возникает. Если же запрос удовлетворить не удаётся ,в этом случае один процесс удерживает ресурс , необходимый другому процессу, а второй в свою очередь делает то же самое со своей стороны. Поэтому второй стратегический принцип требует чтобы процесс, имея за собой некоторые ресурсы и получающий отказ от системы на выделение дополнительных ресурсов должен освободить свои ресурсы и заново запросить их вместе с дополнительными если они ему нужны. Такая стратегия полностью приводит к нарушению условия неперераспределяемости , позволяя забирать ресурсы , закреплённые за процессами до завершения работы самих процессов. Но имеются и недостатки этого принципа: процесс работающий в течение некоторого времени, используя определённые ресурсы, а затем освобождая эти ресурсы может потерять всю работу, выполненную до данного момента. Если такая ситуация случается редко, то можно считать что это относительно недорогой способ предотвращения тупиков. Если же такая ситуация встречается часто, то способ становится дорогостоящим, особенно если не удаётся вовремя завершить высокоприоритетные или срочные процессы. Одним из серьёзных недостатков такой стратегии является возможность бесконечного откладывания процессов. Выполнение процесса, который многократно запрашивает и освобождает одни и те же ресурсы может откладываться на неопределённо долгий срок. В этом случае у системы необходимо вывести данный процесс из решения, чтобы другие процессы получили возможность продолжить работу. Нельзя отбросить и такой вероятный случай, когда процесс, откладываемый бесконечно может оказаться «незаметным» для системы. В такой ситуации может случится, что процесс поглощает значительное количество ресурсов и появляется опасность снижения производительности системы к нулевому уровню.

Примечание (второй принцип Хавендера): Если процесс, удерживающий определённые ресурсы получает отказ в удовлетворении запроса на дополнительные ресурсы, то этот процесс должен освободить свои первоначальные ресурсы и снова запросить их вместе с дополнительными.

 


15. Условие «кругового ожидания » и его разрешение.

 

Нарушение условия кругового ожидания.

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

 

Примечание (третий принцип Хавендера) : Следует ввести линейную упорядоченность по типам ресурсов для всех процессов. Если процессу выделены ресурсы данного типа, то в дальнейшем он может запрашивать только ресурсы далёких по порядку типов. Всем ресурсам в системе присваиваются уникальные номера и процессы должны запрашивать ресурсы в порядке возрастания номеров, что позволяет не возникнуть в системе ситуации «кругового ожидания».

 


16. Понятие критической области и её значение для функционирования системы.

Когда несколько процессов могут асинхронно изменять содержимое общей области данных, необходимо защитить данные от одновременного изменения двумя и более процессами. Рассмотрим два процесса P1 и P2 работающих на центральных процессорах C1 и C2. Эти процессы увеличивают значение переменной X, которая представляет число единиц ресурса. Если P1 выполняется на C1, а P2 выполняется на C2, то может возникнуть одна из следующих последовательностей:

1. P1:R1:=x; R1:=R1+1; x:=R1; ….

P2:… R2:=x; R2:=P2+1; x:=R2;

t0 → time

2. P1:R1=x; R1:=R1+1; x:=R1;…

P2:… R2:=x; R2:=R2+1; x:=R2;

Пусть х содержит значение V в момент времени t0. В момент tk переменная содержала бы V+1 , если бы выполнение шло на процессорах С1 и С2 выполнялось бы по 1) и переменная х содержала бы V+2 , если выполнялось по 2). Оба значение могут быть реализованы, если Р1 и Р2 разделены во времени. При этом должно учитываться каждое приращение х. Решение заключается в x:=x+1 только одному процессу. Если имеется несколько последовательных процессов, которые могут связываться друг с другом через общую память для хранения данных, то каждая программа, выполняемая процессорами, содержит критическую область, в которой организован доступ к общим данным. Проблема заключается в том, чтобы запрограммировать процессы так, чтобы в любой момент только один из процессов находился в своей критической области. Если процесс P входит в свою критическую область (CS) то никакой другой процесс не может сделать, то же самое до тех пор, пока P не покинет свою CS. Следует иметь в виду, что в любом случае должны выполняться следующие предположения:

1. Считывание из общей памяти и запись в неё есть неделимая операция.

2. Критические области не могут иметь связанных с ними приоритетов.

3. Программа может останавливаться и вне своей критической области.

 

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

 

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

1. Процесс нормально работающий вне своей CS не может блокировать другой процесс при вхождении другого процесса в свою CS.

2. Два процесса, готовые войти в свои критические области не могут откладывать неопределённо долго решение о том какой из них действительно войдёт в CS первым, используя принцип «сверхвежливости».