
- •1945 Джон фон нейман
- •3. Назначение
- •4. Классификация ос
- •6 Ядро операционной системы
- •7. Ядро состоит из трех основных подсистем:
- •8 Прцесс загрузки программ
- •9 Стек, куча, Статическая память
- •10 Виртуальная память
- •Функции для управления памятью
- •Приоритеты
- •15. Параллельная обработка
- •16. Проблема тупиков
- •Нарушение условия кругового ожидания
- •19. Классификация внешних устройств
- •Драйверы внешних устройств.
- •Файлы, каталоги и файловые системы.
- •24. Виды атак на ос.
- •Иерархия классов безопасных ос:
Приоритеты
Система может присваивать процессам приоритеты автоматически или они могут назначаться извне. Приоритеты могут быть заслуженными или купленными. Они могут быть статическими или динамическими. Они могут назначаться по какому-то рациональному принципу или присваиваться в ситуациях, когда системе просто необходимо каким-либо образом различать процессы.
Статические приоритеты не изменяются, такой механизм установки приоритетов достаточно прост и не сопряжен с большими издержками. Однако следует учитывать, что такой механизм недостаточно гибок, т.к. не реагирует на изменение окружающей ситуации.
Динамические приоритеты позволяют повысить реактивность системы, т.к. реагируют на изменения ситуации, и начальное значение приоритета процесса может быть изменено на новое, более подходящее значение. Он изменяется в зависимости от того, насколько активно задача использует процессор и другие системные ресурсы.
В системах с пакетной обработкой, когда для задачи указывают верхнюю границу времени процессора, которое она может использовать, часто более короткие задания идут с более высоким приоритетом. Кроме того, более высокий приоритет дают задачам, которые требуют меньше памяти. Предпочтительными для системы будут те программы, которые захватывают процессор на короткое время и быстро отдают его, переходя в состояние ожидания внешнего или внутреннего события. Таким процессам система стремится присвоить более высокий приоритет. Если программа ожидает завершения запроса на обращение к диску, то это также выгодно для системы — ведь на большинстве машин чтение с диска и запись на него происходят параллельно с работой центрального процессора.
Таким образом, система динамически повышает приоритет тем заданиям, которые освободили процессор в результате запроса на ввод-вывод или ожидание события и, наоборот, снижает тем заданиям, которые были сняты по истечении кванта времени.
Покупаемые приоритеты дают возможность пользователю повысить приоритет задания и получить более высокий уровень обслуживания за дополнительную плату.
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 и пользуется критическим участком.