Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bilety_po_Osyam.doc
Скачиваний:
2
Добавлен:
28.04.2019
Размер:
235.52 Кб
Скачать

Приоритеты

Система может присваивать процессам приоритеты автоматически или они могут назначаться извне. Приоритеты могут быть заслуженными или купленными. Они могут быть статическими или динамическими. Они могут назначаться по какому-то рациональному принципу или присваиваться в ситуациях, когда системе просто необходимо каким-либо образом различать процессы.

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

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

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

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

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

15. Параллельная обработка

Если определенные операции логически можно выполнять параллельно, то для указания параллелизма воспользуемся парой операторов parbegin/parend, которые будут, соответственно, определять начало и конец параллельного выполнения, как рекомендует Дейкстра. Конструкция для указания параллелизма будет выглядеть следующим образом:

Parbegin

оператор_1;

оператор_2;

оператор_n

Parend

В качестве примера рассмотрим вычисление площади треугольника по формуле Герона в системе, предусматривающей параллельную обработку:

S=(p*(p-a)*(p-b)*(p-c)), где p=(a+b+c)/2

1 p:=(a+b+c)/2;

2 Parbegin

x1:=p-a;

x2:=p-b;

x3:=p-c

Parend;

3 S:=Sqrt(p*x1*x2*x3);

Здесь три операции, входящие в конструкцию Parbegin/Parend выполняются параллельно, что дает возможность уменьшить реальное время решения задачи.

Проблемы критических участков. Взаимоисключения

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

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

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

Блокировка памяти

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

Попытаемся решить проблему критического участка для двух процессов X и Y с помощью некоторой переменной КЛЮЧ, которая будет принимать значение true, когда процесс находится в своем критическом участке, и значение false - в противном случае. Прежде, чем войти в критический участок, процесс X проверяет КЛЮЧ_Y другого процесса, чтобюы убедится, что можно войти безопасно. Затем он включает свой собственный КЛЮЧ_X и пользуется критическим участком.

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