
- •Операционные системы
- •Аппаратура и программное обеспечение
- •Управление процессами
- •Прерывания
- •Переключение контекста
- •Ядро ос
- •Многослойная структура ос
- •Асинхронные и параллельные процессы
- •Взаимоисключения
- •Аппаратная реализация взаимоисключения. Команда testandset(a,b)
- •Семафора
- •Пара производитель/потребитель
- •Кольцевой буфер
- •Мониторы
- •Концепция ресурсов
- •4 Основных условия для возникновения тупика
- •Основные направления исследования по управлению тупиков
- •Алгоритм банкира
- •Иерархия памяти
- •Стратегии управления памятью
- •Связное и не связное распределение памяти
- •Мультипрограммирование со свопингом
- •21 Декабря в 13:40 последний тест
- •Организация виртуальной памяти
- •Поблочное отображение
- •Рабочие множества
- •Размер страниц
Концепция ресурсов
2 вида ресурсов:
Оперативно перераспределяемые. Например: центральный процессор (самый динамичный) и основная память.
Оперативно не перераспределяемые. Их нельзя произвольно отбирать у процессов, за которыми они закреплены. Нельзя динамически распределять. Например: принтер, сканер.
4 Основных условия для возникновения тупика
Условия взаимоисключения. Процессы требуют предоставление им права на монопольное управление ресурсами, которые им выделяются. Ресурсы можно отобрать.
Условия ожидания ресурсов. Процессы удерживают за собой ресурсы, уже выделенные им, ожидая в то же время выделение дополнительных ресурсов.
Условия неперераспределяемости. Ресурсы нельзя отобрать у процессов, удерживающих их, пока эти ресурсы не будут использованы до завершения работы.
Условия кругового ожидания. Существует кольцевая цепь процессов, в которой каждый процесс, в которой каждый процесс удерживает за собой один или более ресурсов, требующихся следующему процессу цепи.
Основные направления исследования по управлению тупиков
Предотвращение тупиков. Целью является обеспечение условий исключающих возможностей возникновения тупиковых ситуаций. Такой подход является вполне корректных решением в том, что касается самого тупика, однако он часто приводит к нерациональному использованию ресурсов. Долгое время разработчики систем при решении проблем тупиков изначально пользовались этим направлением.
Обход тупиков. Цель заключается в том, чтобы можно было предусматривать менее жесткие ограничения, чем в случае предотвращения тупиков, и тем самым обеспечить лучшее использование ресурсов. Эти средства учитывают возможность возникновения тупика и в случае увеличения такой вероятности принимают меры по аккуратному обходу. Например: алгоритм банкира.
Обнаружение тупиков. Применяются в системах, которые допускают возможность возникновения тупиковых ситуаций. Целью является установление самого факта возникновения тупиковой ситуации и точного определения тех процессов и ресурсов, которые оказались вовлеченными в данную тупиковую ситуацию, после чего ее можно будет устранить.
Методы восстановления после тупиков. Применяются для устранения тупиковых ситуаций с тем, чтобы система могла продолжать работать, а процессы, попавшие в тупиковую ситуацию, могли завершиться с освобождением занимаемых ими ресурсов. Выведенные процессы обычно запускаются с самого начала.
Было доказано, что возникновение тупика невозможно, если нарушено хотя бы одно из 4 указанных выше условий возникновения тупика.
Алгоритм банкира
Когда при описании алгоритма банкира говорят о ресурсах, подразумевают ресурсы одного и того же типа. Однако этот алгоритм можно легко распространить на массивы ресурсов нескольких различных типов.
Каждый пользователь заранее указывает максимальное число устройств, которое ему потребуется для выполнения своей программы. При разных комбинациях программы может потребоваться разное количество устройств.
Указывается максимальное количество устройств, существующих в системе.
Пользователь может занимать и освобождать устройства по одному. Если ОС в состоянии удовлетворить максимальную потребность программы пользователя в устройствах, то пользователь гарантирует, что эти устройства будут использованы и возвращены ОС в течение конечного периода времени.
Текущее состояние вычислительной машины называется надежным, если ОС может обеспечить всем текущим пользователям завершение их заданий в течение конечного времени. В противном случае текущее состояние системы называется ненадежным.
Согласно алгоритму банкира, запрос программы пользователя на выделение дополнительных ресурсов будет выполнен, если состояние вычислительной машины останется надежным. Ненадежное состояние не предполагает, что в данный момент существует или в какое то время обязательно возникнет тупиковая ситуация. Он просто говорит о том, что в случае некоторой неблагоприятной последовательности событий, система может войти в тупик.
Пример надежного состояния:
|
Текущее количество выделенных устройств |
|
Максимальное количество устройств |
Пользователь 1 |
1 |
|
4 |
Пользователь 2 |
4 |
|
6 |
Пользователь 3 |
5 |
|
8 |
Резерв 2 устройства
Пример ненадежного состояния:
|
Текущее количество выделенных устройств |
|
Максимальное количество устройств |
Пользователь 1 |
8 |
|
10 |
Пользователь 2 |
2 |
|
5 |
Пользователь 3 |
1 |
|
3 |
Резерв 1 устройство
Первому пользователю может потребоваться 8 устройств, чтобы завершить операцию.
Недостатки алгоритма банкира
Фиксированное количество распределяемых ресурсов
Требует, чтобы число работающих пользователей оставался постоянным
Требует, чтобы ресурсы гарантированно выделялись за ограниченный период времени
Требует, чтобы пользователи заранее указывали свои максимальные потребности в ресурсах
Управление памятью
Физическая память
Организация памяти
Под организацией памяти мы понимаем то, каким образом представляется и используется основная память.
Вопросы:
Помещает в основную память только одну программу пользователя или несколько программ одновременно?
Если размещают несколько пользовательских программ сразу, то предоставляется ли каждой из них одинаковое количество ячеек или разбивает основную память на части, так называемые разделы, различных размеров?
Разбивают ли основную память жестким образом, когда разделы определятся на достаточно длительные периоды времени, либо предусматривается динамическое разбиение?
Требуется ли для такого построения программ пользователя, чтобы они выполнялись только в конкретном разделе, либо предусматривается возможность выполнения программ с занятием любых подходящих для них разделов?
Требуется, чтобы каждая программа помещалась в одном непрерывном одном сплошном блоке ячеек памяти, либо допустим возможность разбиения программ на отдельные блоки, размещаемые в любых свободных участках (дырах) основной памяти?
Стратегии управления памятью определяют, каким образом будет работать память конкретной организации при различных подходах к решению следующих вопросов:
Когда мы должны помещать новую программу в память?
Будем ли мы помещать ее когда система специально попросит об этом, или будем предупреждать запросы системы?
В какое место основной памяти мы будем помещать очередную программу для выполнения.
Будем ли мы размещать программу как можно более плотно с занятием имеющихся свободных участков, чтобы свести к минимуму потери памяти, либо будем стремиться к возможно более быстрому размещению программ, чтобы сместить к минимуму потерю машинного времени?
Если в основную память необходимо поместить новую программу и, если в настоящий момент память уже заполнена целиком, то какую из находящихся в ней других программ следует вывести из памяти?
Должны ли мы замещать программы, которые находятся в памяти дольше других, или программы, используемые не менее часто, или те, которые дольше всего не использовались?