Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PP_KR22.doc
Скачиваний:
11
Добавлен:
10.12.2018
Размер:
507.9 Кб
Скачать
  1. Задача предотвращения тупиков. Алгоритм упорядоченных классов.

Пример: SR система – тупиковая ситуация (особенно плохо в системах реального времени и системах упраления).

Причем, процесс Р1 не освобождает R2, пока не получит R1; аналогично с Р2. Попав в такую ситуацию, процесс уже не может выйти из неё. Это состояние так же называют: 1.Взаимная блокировка, 2.Тупик (этот термин используется чаще всего), 3.Тупиковое состояние, 4.Клинч, 5.Дедлок (dead lock), 6.Смертельные объятия.

Тупиком называется такое состояние системы, при котором некоторое множество

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

Тупиковое состояние:

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

2. Процессы удерживают некоторые ресурсы не выполняя никакой полезной работы, и система без внешнего воздействия не может выйти из этого состояния.

Меры борьбы с тупиками

- Статические (анализ текста программы).

- Динамические

  • Обнаружение с последовательным выходом из тупика

      • Ручной выход

      • Автоматический

        • Перехват ресурсов

        • Прекращение процессов (выход с мин. ценой)

  • Методы предотвращения

    • Метод упорядоченных классов

    • Алгоритм банкира

Методы предотвращения – используются в системах, где недопустимо возникновение тупиковых ситуаций. В настоящее время эти методы представлены в основном методом упорядочивания классов (предварительно распределения всех ресурсов системы по классам). Каждому такому классу ставится в соответствие вес от 1 до N и любой процесс может получить ресурс класса L, только если до этого он получит все ресурсы класса L-1. Процессам навязывается порядок использования ресурсов системы. Это приводит к тому, что в графе состояния системы никогда не может возникнуть цикла, т.е. по теореме о тупике система никогда не войдёт в тупиковое состояние. Недостатки: навязывание процессам жесткого порядка в использовании ресурсов, что снижает эффективность системы в целом. Используется в системах с достаточным количеством ресурсов, в которых допустимо плавное снижение эффективности.

  1. Конструктор массивов в языке Фортран 90.

В языке вводятся понятия: Ранг массива – размерность от 1 до 7. Ранг скаляра равен нулю. Конфигурация массива – одномерный массив целого типа, его размер равен рангу исходного массива, а значения элементов равны размерам по каждому направлению исходного массива. Массивы равной конфигурации – согласованные. В согласованных массивах элементы, занимающие одинаковое положение относительно первого элемента, называются соответствующими. Скаляр согласован с массивом любой размерности. Все операции над массивами требуют согласованности операндов.

Конструктор массивов дает возможность построить одномерный массив (вектор), имеющий следующий формат: (/С1, С2, … Сn/) , где Ci – элемент конструктора. Элемент конструктора может иметь один из следующих форматов: 1)скалярное выражение, 2)векторное выражение, 3)неявный цикл.

Пример 1

(/2, 1, 1, 3, 1/)

скалярное выражение

Пример 2

(/A1+A2/)

векторное выражение

Пример 3

(/(2.9, С(N), N=1,3), 8.2/) эквивалентно:

(/2.9, С(1), 2.9, С(2), 2.9, С(3), 8.9/)

неявный цикл

Тип конструктора определяется типом входящего в него выражения. Конструктор можно использовать как: 1)операнд в выражении, 2)фактический параметр процедуры, 3)элемент списка вывода. Конструктор не может стоять в левой части оператора «=».

Есть возможность преобразовывать массив в массив другой размерности.

Пример 

INTEGER MAT (3,2)

INTEGER VEC (G)

VEC = (/1,10,100,1000,10000,100000/)

MAT = RESHARE (SHARE=(3,2), SOURCE = VEC)

функция RESHARE преобразует исходный вектор VEC в двумерный массив MAT

Секция массива – часть элементов исходного массива, выбранная из него по определенному правилу. Формат секции массива: b (i1, i2, … , in) , где b – имя исходного массива; ik - индексы секции. Каждый индекс может быть скалярного типа, векторного типа или индексным триплетом. Скалярный– скалярное выражение целого типа. В секции массива по крайней мере 1 индекс не должен быть скалярным выражением, в противном случае секция вырождается в элемент. Формат индексного триплета: [l1] : [l2] : [l3] , где: l1 – нижняя граница; l2 – верхняя граница; l3 – шаг.

Пример использования индексного триплета

DINSION ROW (N), COL (M)

DINSION Z (M, N)

……………

ROW=Z(3,:)

COL=Z(:,J)

CALL SUB1(Z(M:1:-2,1:N:2))

Массиву CALL присваивается J-й столбец массива Z, а массиву ROW – 3-я строка Z.

Пример использования векторного индекса

INTEGER A(10,10), U(3), U(4)

INTEGER MAT (3,4), VNEW(4)

V=(/1,3,2/)

U=(/2,1,1,3/)

VNEW=A(3,U) à A(3,2), A(3,1), A(3,3)

MAT=A(U,V) à

A(1,2), A(1,1), A(1,1), A(1,3)

A(3,2), A(3,1), A(3,1), A(3,3)

A(2,2), A(2,1), A(2,1), A(2,3)

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

Такие секции не могут использоваться в левой части оператора присваивания.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]