СПО (Корнилов) / Лекции / вар2 / Операционные системы (Корнилов)
.pdf
СПО Лекция 1 [23.12.04] |
61 |
Отдаем 2 из резерва нити C. C получила все, обязана отдать, после чего резерв станет 4. Отдаем 4 из резерва нити A. A получила все, обязана отдать, после чего резерв станет 5. Отдаем 5 из резерва нити B. B получила все, обязана отдать, после чего резерв станет 6. Отдаем 3 из резерва нити D. D получила все, обязана отдать. Все завершились.
Предположим, что нить A запрашивает 1 ресурса. Предположим, что мы удовлетворим этот запрос, тогда получим следующее состояние, которое не является надежным.
Нить |
Использует |
Макс. |
|
|
потребность |
A |
2 |
5 |
B |
1 |
6 |
C |
2 |
4 |
D |
4 |
7 |
|
Резерв: 1 |
Всего: 10 |
В данном случае резерва недостаточно, чтобы гарантировать какой-либо нити завершение, если все нити действительно затребуют ресурсы по заявленному максимуму, то возникнет циклическая цепочка запросов.
Алгоритм банкира для ресурсов нескольких типов
Рассмотрим на примере для 5 нитей и ресурсов 4 типов.
Необходимые структуры данных: |
|
|
|
|
|
|
Вектор исходных ресурсов (T): |
{ |
6 |
3 |
4 |
2 |
} |
Матрица максимальных потребностей (M) |
|
R1 R2 R3 R4 |
|
|||
|
A: 4 |
1 |
1 |
1 |
|
|
|
B: 0 |
2 |
1 |
2 |
|
|
|
C: 4 |
2 |
1 |
0 |
|
|
|
D: 1 |
1 |
1 |
1 |
|
|
|
E: 2 |
1 |
1 |
0 |
|
|
Матрица занятых ресурсов (A) |
|
R1 R2 R3 R4 |
|
|||
|
A: 3 |
0 |
1 |
1 |
|
|
|
B: 0 |
1 |
0 |
0 |
|
|
|
C: 1 |
1 |
1 |
0 |
|
|
|
D: 1 |
1 |
0 |
1 |
|
|
|
E: 0 |
0 |
0 |
0 |
|
|
Вектор занятых ресурсов (P): |
{ |
5 |
3 |
2 |
2 |
} |
Вектор свободных ресурсов (R=T-P): |
{ |
1 |
0 |
2 |
0 |
} |
Матрица возможных запросов M-A |
|
|
|
|
|
|
Алгоритм (использует пометку строк, вначале все строки не помечены)
1.Имитировать предоставление ресурса (A’,R’)
2.Найти непомеченную строку i в матрице A’, такую что поэлементно i-я строка матрицы M-A’ меньше или равна вектору R’.
Если нет такой строки, то состояние ненадежно. Завершить алгоритм.
3.Вернуть ресурсы, занятые i-м процессом (пересчитать R’ добавив значения из i-ой строки матрицы A’ ). Пометить строку i.
4.Если помечены все строки, то состояние надежно. Завершить алгоритм. Если есть непомеченные строки, то продолжить с п.2.
Пример
Пусть нить B запрашивает 1 ресурса R3.
A’: |
R1 R2 R3 R4 |
M-A’: R1 R2 R3 R4 |
||||||
|
A: 3 0 1 1(-) |
A: 1 1 0 0 (-) |
||||||
|
B: 0 |
1 |
1 |
0(-) |
B: 0 |
1 |
0 |
2 (-) |
|
C: 1 |
1 |
1 |
0(-) |
C: 3 |
1 |
0 |
0 (-) |
|
D: 1 |
1 |
0 |
1(-) |
D: 0 |
0 |
1 |
0 (-) |
|
E: 0 |
0 |
0 |
0(-) |
E: 2 |
1 |
1 |
0 (-) |
СПО Лекция 1 [23.12.04] |
|
|
|
|
|
|
62 |
|||
|
|
|
|
|
R’: |
1 |
0 |
1 |
0 |
|
Можем завершить D. Возвращаем занятые ресурсы. Помечаем строку 4. |
||||||||||
A’: |
R1 R2 R3 R4 |
M-A’: |
R1 |
R2 |
R3 |
R4 |
|
|||
|
A: 3 0 1 1(-) |
|
A: 1 1 0 |
0 (-) |
||||||
|
B: 0 1 1 0(-) |
|
B: 0 1 0 |
2 (-) |
||||||
|
C: 1 1 1 0(-) |
|
C: 3 1 0 |
0 (-) |
||||||
|
D: 1 |
1 |
0 |
1(+) |
|
D: 0 |
0 |
1 |
0 |
(+) |
|
E: 0 0 0 0(-) |
R’: |
E: 2 1 1 |
0 (-) |
||||||
|
|
|
|
|
2 |
1 |
1 |
1 |
|
|
Можем завершить E. Возвращаем занятые ресурсы. Помечаем строку 5. |
||||||||||
A’: |
R1 R2 R3 R4 |
M-A’: |
R1 |
R2 |
R3 |
R4 |
|
|||
|
A: 3 0 1 1(-) |
|
A: 1 1 0 |
0 (-) |
||||||
|
B: 0 1 1 0(-) |
|
B: 0 1 0 |
2 (-) |
||||||
|
C: 1 1 1 0(-) |
|
C: 3 1 0 |
0 (-) |
||||||
|
D: 1 |
1 |
0 |
1(+) |
|
D: 0 |
0 |
1 |
0 |
(+) |
|
E: 0 |
0 |
0 |
0(+) |
R’: |
E: 2 |
1 |
1 |
0 |
(+) |
|
|
|
|
|
2 |
1 |
1 |
1 |
|
|
Можем завершить A. Возвращаем занятые ресурсы. Помечаем строку 1. |
||||||||||
A’: |
R1 R2 R3 R4 |
M-A’: |
R1 |
R2 |
R3 |
R4 |
|
|||
|
A: 3 |
0 |
1 |
1(+) |
|
A: 1 |
1 |
0 |
0 |
(+) |
|
B: 0 1 1 0(-) |
|
B: 0 1 0 |
2 (-) |
||||||
|
C: 1 1 1 0(-) |
|
C: 3 1 0 |
0 (-) |
||||||
|
D: 1 |
1 |
0 |
1(+) |
|
D: 0 |
0 |
1 |
0 |
(+) |
|
E: 0 |
0 |
0 |
0(+) |
R’: |
E: 2 |
1 |
1 |
0 |
(+) |
|
|
|
|
|
5 |
1 |
2 |
2 |
|
|
Можем завершить C. Возвращаем занятые ресурсы. Помечаем строку 3. |
||||||||||
A’: |
R1 R2 R3 R4 |
M-A’: |
R1 |
R2 |
R3 |
R4 |
|
|||
|
A: 3 |
0 |
1 |
1(+) |
|
A: 1 |
1 |
0 |
0 |
(+) |
|
B: 0 1 1 0(-) |
|
B: 0 1 0 |
2 (-) |
||||||
|
C: 1 |
1 |
1 |
0(+) |
|
C: 3 |
1 |
0 |
0 |
(+) |
|
D: 1 |
1 |
0 |
1(+) |
|
D: 0 |
0 |
1 |
0 |
(+) |
|
E: 0 |
0 |
0 |
0(+) |
R’: |
E: 2 |
1 |
1 |
0 |
(+) |
|
|
|
|
|
6 |
2 |
3 |
2 |
|
|
Можем завершить B. Возвращаем занятые ресурсы. Помечаем строку 2
Все строки помечены, состояние надежно. Можно удовлетворить запрос.
Недостатки:
•Алгоритм применим лишь к фиксированному числу процессов и ресурсов.
•Достаточно сложен, если запросы поступают очень часто.
Лекция 12. Управление памятью
9Распределение памяти в однопрограммных ОС
9Распределение памяти разделами. Защита памяти.
9Хранение информации о свободных участках
9Алгоритмы резервирования и освобождения памяти непрерывными участками
Распределение памяти в однопрограммных ОС
СПО Лекция 1 [23.12.04] |
63 |
Вся память выделяется в распоряжение единственной выполняемой программы. Часть памяти при этом занята ОС и драйверами устройств.
Положение ОС в памяти фиксировано (в начале или в конце памяти) и определяется в момент начальной загрузки компьютера. После завершения начальной загрузки ОС знает положение и размер оставшейся свободной памяти.
Прикладные программы размещаются всегда с одного места в памяти и им доступны любые адреса. Защита памяти отсутствует и, в случае ошибок, программа может испортить память в области ОС. Таким образом, в этом режиме управление памятью практически отсутствует.
Распределение памяти разделами в многопрограммных ОС.
Одной из основных целей перехода к многопрограммному режиму являлось увеличение загрузки дорогостоящего процессора. Достижение этой цели тесно связано с распределением памяти для нескольких программ, так как загруженность процессора напрямую зависит от количества одновременно выполняющихся программ.
Рассмотрим простейшую модель многопрограммной системы. Предположим, что программы пользователей часть своего времени (p) ожидают завершения операций ввода-вывода и в это время не используют процессор. Если одновременно выполняются N программ, то вероятность состояния «ожидание вводавывода» в системе составит pN. Загруженность процессора оценивается при этом величиной 1-pN. Ниже приводятся графики зависимости загруженности процессора от числа одновременно выполняющихся программ при разных значениях вероятности p.
Это очень грубая модель, так как она предполагает полную независимость программ друг от друга. Модель допускает параллельное выполнение программ, что невозможно в однопроцессорной системе.
Из приведенного графика видно, что для программ, в которых процессор используется 20% времени, одновременное выполнение 10 программ позволяет загрузить процессор лишь на 90%.
120 |
|
|
|
|
|
|
|
|
|
100 |
|
|
|
|
|
|
|
|
|
80 |
|
|
|
|
|
|
|
|
p=0.2 |
|
|
|
|
|
|
|
|
|
|
60 |
|
|
|
|
|
|
|
|
p=0.5 |
40 |
|
|
|
|
|
|
|
|
p=0.8 |
20 |
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Первым методом, предложенным для управления памятью в многопрограммном режиме, был метод распределения памяти разделами фиксированной длины. Этот метод предполагал деление памяти оператором на несколько фиксированных разделов (обычно 3). Программы транслировались для выполнения в конкретном разделе и не могли быть запущены в другом разделе. Очевидный недостаток такой организации памяти – если размер программы чуть больше раздела, то необходимо переконфигурировать систему и перетранслировать программы для разделов, положение которых изменилось.
Естественным развитием метода распределения памяти разделами является метод распределения памяти разделами переменной длины. В этом случае программе в момент ее загрузки выделяется непрерывный
СПО Лекция 1 [23.12.04] |
64 |
участок памяти требуемого размера – раздел. При завершении программы выделенная ей память освобождается и объединяется с соседними свободными участками.
Распределение памяти непрерывными участками всегда порождает фрагментацию памяти – появление большого числа блоков маленького размера, недостаточного для удовлетворения запросов на резервирование памяти. В результате может оказаться что значительная часть памяти станет недоступной для использования. Алгоритмы распределения памяти непрерывными участками обязательно должны предусматривать меры, направленные на борьбу с фрагментацией. К таким мерам относится объединение соседних свободных участков и, если возможно, «сжатие» памяти, когда фрагментация достигает значительного уровня.
Метод распределение памяти разделами переменной дины потребовал решения целого ряда задач:
-загрузка программ с произвольного адреса памяти;
-защита разделов, т.е. предотвращение записи в чужой раздел;
-способ учета занятого и свободного пространства памяти;
-метод поиска и предоставления свободного участка с последующим восстановлением памяти (метод динамического распределения памяти непрерывными участками).
Динамическая загрузка и защита адресного пространства программ
В первых мультипрогаммных системах проблема загрузки программ в память по произвольному адресу решалась с помощью связывающего загрузчика. Исходные тексты программ транслировались в объектные модули относительно нулевого адреса одновременно создавалась таблица перемещаемых символов, значения которых зависят от места загрузки программы. Загрузчик последовательно загружал модули в памяти и выполнял настройку адресов по таблице перемещений.
Заметим, что в этом случае после загрузки программы в память она не может быть перемещена в другое место. Программе доступны любые адреса памяти, в том числе в адресных пространствах других программ, находящихся в памяти.
Одно из первых решений проблемы защиты адресных пространств (IBM 360) состояло в следующем. Разделы памяти состояли из последовательности блоков размером 2К. Каждому блоку присваивался 4-х битовый ключ защиты, всем блокам раздела присваивался одинаковый ключ защиты. Ключ защиты активной программы хранился в слове состояния процессора (ССП) и изменялся при переключении управления на другую программу. При каждом обращении к памяти процессор сравнивал значение ключа из ССП с ключом блока памяти и, если они не совпадали, генерировалось прерывание по нарушению защиты памяти. Изменение ключа защиты в ССП осуществлялось специальными командами в привилегированном режиме работы процессора.
Позднее проблему загрузки с произвольного адреса и защиту адресного пространства стали решать на основе двух специальных регистрах процессора: регистра базы и регистра ограничителя. Программа транслировалась относительно нулевого адреса. В процессе загрузки программы в регистр базы записывался адрес загрузки, а в регистр ограничитель размер раздела. При формировании исполнительного адреса процессор к относительному адресу программы добавлял значение регистра базы, одновременно осуществлялось сравнение относительного адреса со значением регистра ограничителя и генерировалось
СПО Лекция 1 [23.12.04] |
65 |
прерывание, если адрес превышал значение регистра ограничителя. Загрузка регистров базы и ограничителя выполнялась в привилегированном режиме.
Способы учета свободного пространства
Битовая карта памяти. В этом случае фиксируется минимальный размер распределяемого блока памяти. Вся память считается разбитой на блоки минимального размера и каждому блоку ставится в соответствие бит карты памяти (1 – занят, 0 - свободен). Таким образом карта памяти имеет фиксированный размер и однозначно определяет положение свободных участков.
Преимущества:
-простота реализации;
-автоматическое объединение соседних освобождаемых участков.
Недостатки:
-необходимо резервировать место для битовой карты;
-размер битовой карты должен пересчитываться при изменении размера памяти.
Список свободных участков. Элемент списка содержит размер участка и адрес следующего свободного участка. Элемент списка размещается в начале свободного участка. Ограничение – минимальный размер распределяемой области памяти должен быть не меньше элемента списка свободных участков.
Преимущества:
-не требует дополнительного места для хранения информации о свободных участках.
Недостатки:
-при освобождении участка необходимо объединять соседние свободные.
Методы поиска свободного участка
Метод первого подходящего участка. Последовательно просматривается список свободных участков до тех пор, пока будет найден участок большего размера, чем запрашиваемый. Найденный участок удаляется из списка свободных и делится на две части: размер одной части равен величине запрашиваемого участка, а размер второго – сколько осталось. Адрес первого участка возвращается в качестве результата операции резервирования памяти, а остаток включается в список свободных участков.
Метод наиболее подходящего участка. Последовательно просматривается весь список свободных участков и находится наименьший участок, превышающий по размеру величину запроса. Последующие действия аналогичны предыдущему методу. Очевидно, что поиск дольше, чем в методе первого подходящего, но зато исключает возможность дробления участков, значительно превышающих по размеру величину запроса, если есть участки меньшего размера.
Метод точно подходящего участка. Помимо списка свободных поддерживается дополнительный указатель на нераспределенный пул памяти. Первоначально вся память представляет собой нераспределенный пул памяти, а список свободных – пуст. При запросе сначала просматривается список свободных участков и из
СПО Лекция 1 [23.12.04] |
66 |
него выбирается участок точно соответствующий по размеру величине запроса. Если в списке свободных участок не найден, то память выделяется из пула нераспределенной памяти. При освобождении памяти участок включается в список свободных, причем «склейка» соседних не выполняется. Далее просматривается список свободных и участки, примыкающие к пулу нераспределенной, исключаются из списка свободных и присоединяются к пулу нераспределенной памяти. Метод применяется для динамического распределения памяти в программах и минимизирует фрагментацию памяти (программа обычно работает с ограниченным количеством блоков разного размера). Процедура восстановления памяти («склейка») сложнее, чем в предыдущих методах.
Имеет ли значение порядок элементов в списке свободных участков? Дает ли преимущество список упорядоченный по адресам? Дает ли преимущество список упорядоченный по размеру свободных участков?
Оценка фрагментации памяти
Правило 50% (Дональд Кнут). В состоянии динамического равновесия (интенсивность запросов на резервирования памяти равна интенсивности запросов на освобождение памяти) число свободных участков равно ½ от числа занятых участков.
N – число занятых блоков,
s – средний размер занятого блока,
ks – средний размер свободного блока (k>0), M – размер распределяемой памяти.
Размер свободной памяти равен M-Ns или по правилу 50% равен ks*N/2. M = Ns(1+k/2)
Доля памяти, занятой свободными участками:
|
N |
|
|
N |
|
|
||||
|
|
ks |
|
|
|
ks |
|
k |
||
f = |
2 |
= |
2 |
= |
||||||
|
|
|
|
|
|
|||||
|
M |
|
Ns(1+ |
k |
) |
|
k +2 |
|||
|
|
|
|
|||||||
|
|
|
|
2 |
|
|
|
|||
Таким образом, если средний размер свободного участка равен ½ от размера занятого участка (k=1/2), то 20% памяти распределено между свободными участками.
Лекция 13. Управления виртуальной памятью. Трансляция адресов
9Виртуальное адресное пространство и трансляция адресов.
9Метод «База и граница»
9Сегментная схема организации памяти
9Страничная схема организации памяти
9Сегментно-страничная схема организации памяти
9Странично - страничная схема организации памяти
9Инвертированные таблицы страниц
СПО Лекция 1 [23.12.04] |
67 |
Требования к системе управления памятью
Эффективное управление памятью (быстро и с минимальными накладными расходами)
Защита адресных пространств
Возможность разделять часть адресного пространства
Управление памятью в современных ОС опирается на механизм виртуализации адресных пространств прикладных программ.
Виртуальная память и трансляция адресов
Виртуальное адресное пространство программы = все адреса, которые доступны программе. Размер виртуального адресного пространства программы определяется длиной (разрядностью) адреса. Размер физической памяти обычно меньше или равен размера адресного пространства, определяемого разрядностью шины адреса компьютера.
Разрядность адреса |
Размер адресного пространства |
16 |
64 Kb |
20 |
1 Mb |
32 |
4 Gb |
64 |
17179869184 Gb |
В мультипрограммных системах каждому процессу должна быть выделена часть памяти и обеспечено отображение виртуальных адресов процесса в реальные адреса памяти. Преобразование (трансляция) виртуальных адресов в физические адреса памяти выполняется устройством управления памятью процессора (MMU Memory Management Unit). Механизм трансляции не позволяет программе залезть в область памяти других программ или ОС и таким образом надежно решает проблему защиты адресных пространств.
Виртуальные |
Физическая |
пространства |
память |
0 |
0 |
|
|
N |
|
0 |
|
|
MMU |
N |
|
0 |
|
N |
M |
|
СПО Лекция 1 [23.12.04] |
68 |
Обычно преобразование выполняется процессором по «таблице», расположенной в памяти, доступ к которой возможен только в привилегированном режиме работы процессора. Далее рассмотрим различные реализации этого механизма трансляции адресов.
Метод «База и граница»
Впервые реализован в CRAY-I. Используются два регистра процессора: base и bound. Программа загружается в непрерывную область памяти.
Выход за границы выделенной области контролируется процессором при каждом обращении к памяти путем сравнения виртуального адреса с границей.
Преимущества:
-простота и скорость
Недостатки:
-сложное распределение памяти непрерывными участками, фрагментация памяти
-сложности с общей разделяемой памятью для процессов
СПО Лекция 1 [23.12.04] |
69 |
-проблемы с увеличением пространства памяти, если возникает такая потребность (стек, куча)
Сегментная схема организации памяти
Сегмент – непрерывный участок памяти. Метод является обобщением предыдущего, память выделяется процессу сегментами, для каждого сегмента указывается адрес начала (база) и размер (граница). Полный перечень сегментов и их атрибутов хранится в таблице сегментов процесса. Таблица сегментов хранится или в памяти или в специальных регистрах процессора. Таблица сегментов доступна только в привилегированном режиме работы процессора. Если таблица сегментов расположена в памяти, то адрес активной таблицы хранится в специальном регистре процессора.
Виртуальный адрес интерпретируется устройством управления памятью как два числа: номер сегмента и смещение внутри сегмента. Номер сегмента служит индексом для доступа к элементу таблицы сегментов, который содержит адрес и размер физического сегмента памяти.
Пример:
Виртуальный адрес – 16 разрядов. Номер сегмента – 4 разряда, смещение – 12 разрядов (максимальный размер сегмента – 4096 байт).
Сегменты |
Размер |
Виртуальный |
|
|
|
|
адрес сегмента |
0. |
Код |
0x700 |
0x0 |
1. Данные |
0x200 |
0x1000 |
|
2. |
Стек |
0x500 |
0x2000 |
Таблица сегментов: |
|
|
|
Физический |
Размер |
Атрибуты |
адрес |
|
|
0x2000 |
0x700 |
--Код-- |
0x100 |
0x200 |
--Данные-- |
0x800 |
0x500 |
--Стек-- |
Например, виртуальному адрес 0x1120 соответствует физический адрес 0x220.
Заметим, что в виртуальном адресном пространстве есть промежутки между сегментами и если происходит обращение к таким адресам (0x1201), то процессор установит флаг ошибки обращения к памяти.
СПО Лекция 1 [23.12.04] |
70 |
Преимущества:
-хорошо справляется с «дырами» в виртуальном адресном пространстве
-легко организовать общую разделяемую память на уровне сегментов
Недостатки:
-сложное распределение памяти непрерывными участками, фрагментация памяти
-проблемы с увеличением размера сегмента во время работы (стек, куча)
Как упростить распределение памяти и устранить фрагментацию? Распределять память блоками фиксированной длины.
Страничная схема организации памяти
Физическая и виртуальная память условно делится на страницы фиксированного размера (1K – 4K). Полный перечень виртуальных страниц и их атрибутов хранится в таблице страниц процесса. Таблица страниц располагается в памяти, адрес активной таблицы и ее размер хранятся в специальных регистрах процессора.. Таблица страниц доступна только в привилегированном режиме работы процессора.
Виртуальный адрес интерпретируется устройством управления памятью как два числа: номер виртуальной страницы и смещение внутри страницы. Номер виртуальной страницы служит индексом для доступа к элементу таблицы страниц, который содержит номер физической страницы памяти.
Пример:
Виртуальный адрес – 16 разрядов. Номер страницы – 4 разряда, смещение – 12 разрядов, размер страницы
– 4096 байт.
Номер Виртуальный страницы адрес
00x0
10x1000
20x2000
……
N 0xN000
Таблица страниц:
