Upload
aleksey-bragin
View
125
Download
5
Embed Size (px)
Citation preview
Операционные Системы
7. Управление памятью
Брагин Алексей Владимирович[email protected]
ИУ9, МГТУ им. Н.Э. Баумана
Задачи управления памятью
• Распределение ресурса «память» между различными, конкурирующими за неё процессами
• Максимизировать использование памяти
• Изолировать процессы
• Абстрагировать доступ к памяти для программистов
© 2013 Брагин А.В. 2
Инструменты управления памятью
• Регистры база-предел
• Своп
• Страницы (а также таблицы страниц)
• Сегменты (и таблицы сегментов)
• Страничное прерывание (page fault) и виртуальная память
© 2013 Брагин А.В. 3
Что в современных ОС?
• Основная абстракция - виртуальная память (virtual memory)– Эффективное использование реальной памяти
• VM позволяет программам работать без необходимости загружать всё их адресное пространство в физическую память
• Большинству программ не нужны сразу все их данные и код
– Гибкость программ• Сама программа «не знает» сколько физической памяти, а
сколько - свопа
– Защита• Виртуальная память изолирует адресные пространства
процессов друг от друга
© 2013 Брагин А.В. 4
Аппаратная поддержка для VM
• Виртуальная память требует аппаратной поддержки
– MMU
– TLB
– таблицы страниц
– Обработка страничных прерываний
• Обычно есть поддержка своппинга
• И ограниченной сегментации
© 2013 Брагин А.В. 5
Фрагментация
• Это неэффективное использование памяти
• Снижается объём доступной памяти
• Два типа
– Внутренняя фрагментация
• Иногда, выделяется больше памяти, чем запрашивалось. Избыток выделенной памяти не используется.
– Внешняя фрагментация
• Свободная память в процессе выделения/освбождения разделяется на мелкие блоки.
© 2013 Брагин А.В. 6
Эволюция управления памятью
• Зачем?– Современные аспекты сформировались исторически
– Большинство встраиваемых систем не имеютвиртуальной памяти
• Самое начало– Программы напрямую пользовались физической
памятью
– ОС загружала задание, оно выполнялось, ОС его выгружала
• Встраиваемые системы – обычно только одна программа
© 2013 Брагин А.В. 7
Своппинг
• Своппинг
– Сохранение полного состояния программы на диск
– Позволяет запустить другую программу
– А потом загрузить обратно предыдущую и продолжить её выполнение
© 2013 Брагин А.В. 8
Мультипрограммирование
• Одновременно несколько процессов/заданий
• Требования к менеджеру памяти
– Защита: ограничить адресное пространство, используемое процессами
– Быстрая трансляция адресов: Эта защита не должна «тормозить» процесс трансляции
– Быстрое переключение контекста
© 2013 Брагин А.В. 9
Виртуальные адреса для мультипрограммирования
• Упрощения управления памятью нескольких процессов: использование виртуальных адресов.
• Виртуальные адреса – независимость от физического расположения данных в памяти
• Процессорные инструкции используют виртуальные адреса
• ЦП преобразует их в физические (при помощи некоторой исходной информации от ОС)
© 2013 Брагин А.В. 10
Виртуальные адреса для мультипрограммирования 2
• Адресное пространство - множество виртуальных адресов, которые может использовать процесс
• Это самое начало того, что сейчас называется «виртуальной памятью»!
• Но в данном случае, гораздо примитивнее
• Просто преобразование (трансляция) виртуального адреса в физический
© 2013 Брагин А.В. 11
Фиксированные разделы
• Физическая память разбита на фиксированные разделы– Фиксированные – значит заранее
определенные, изменить в процессе работы нельзя
– Аппаратная поддержка: регистры база-предел• Физический адрес = виртуальный адрес + база
• Базовый регистр загружается ОС при переключении процесса
– Простая защита: Если адрес > база + предел…
© 2013 Брагин А.В. 12
Фиксированные разделы 2
• Преимущество – простой метод
• Недостатки
– Внутренняя фрагментация
• Доступный раздел больше, чем требуется
– Внешняя фрагментация
• Требуется большой объём памяти, но осталось только два маленьких раздела
© 2013 Брагин А.В. 13
Фиксированные разделы 3
© 2013 Брагин А.В. 14
раздел 0
раздел 1
раздел 2
раздел 3
0
2K
6K
8K
12K
Физическая память
смещение +
Виртуальный адрес
P2’s base: 6K
Регистр базы
2K
<?
нет
Срабатывание
защиты доступа
Регистр предела
да
Переменные разделы
• Очевидное улучшение: разбивать физическую память на разделы динамически– Аппаратные требования: регистры база-предел– Физический адрес = виртуальный адрес + база– Защита – если физический адрес больше, чем
виртуальный + предел
• Преимущества– Нет внутренней фрагментации (выделяется столько,
сколько запрашивается)
• Недостатки– Внешняя фрагментация: загрузка/выгрузка задач
оставляет необъединяемые «дыры» в памяти
© 2013 Брагин А.В. 15
Переменные разделы 2
© 2013 Брагин А.В. 16
Физическая память
смещение +
Виртуальный адрес
База P2
Регистр базы
Размер P3
<?
нет
Срабатывание
защиты доступа
Регистр предела
да
раздел 0
раздел 1
раздел 2
раздел 3
раздел 4
Переменные разделы 3
• Как бороться с фрагментацией в этом случае?
– Выгрузить программу
– Загрузить по другому адресу
– Исправить регистр базы
© 2013 Брагин А.В. 17
раздел 0
раздел 1
раздел 2
раздел 3
раздел 4
раздел 0
раздел 1
раздел 2
раздел 3
раздел 4
Страничная память
• Современный подход к решению проблемы
– Внешней фрагментации: используются блоки фиксированного размера в виртуальной и физической памяти
– Внутренней фрагментации: блоки достаточно малого размера
© 2013 Брагин А.В. 18
Страничная память 2
• С точки зрения программиста
– Процессам (виртуальное) адресное пространство представляется непрерывным, от байта 0 до байта N
– Это N зависит от аппаратной поддержки
– В реальности, виртуальные страницы распределены по «страницам» физической памяти. Не обязательно непрерывны!
© 2013 Брагин А.В. 19
Страничная память 3
• С точки зрения менеджера памяти– Эффективное использование памяти из-за очень
низкой внутренней фрагментации
– Внешняя фрагментация полностью отсутствует, и не нужно дефрагментировать
• С точки зрения защиты– Процесс имеет доступ только к своему адресному
пространству
• Положим, что все страницы резидентны в памяти!
© 2013 Брагин А.В. 20
Трансляция адресов
• Трансляция виртуального адреса
– Виртуальный адрес состоит из двух частей: номера виртуальной страницы (VPN) и смещения
– Номер виртуальной страницы – это индекс в таблице страниц (pagetable)
– Запись в таблице страниц (PTE – page table entry) содержит номер фрейма (PFN – page frame number)
© 2013 Брагин А.В. 21
Трансляция адресов 2
• Таблицы страниц
– Одна запись в таблице страниц (PTE) на одну страницу виртуального адресного пространства (VPN)
– Отображает VPN на PFN
© 2013 Брагин А.В. 22
Трансляция адресов 3
© 2013 Брагин А.В. 23
фрейм 0
фрейм 1
фрейм 2
фрейм Y
…
фрейм 3
физическая память
смещение
физический адрес
№ фрейма№ фрейма
таблица страниц
смещение
виртуальный адрес
№ вирт. страницы
Страничная память наглядно
• Основано на иллюстрации Gribble, Lazowska, Levy, Zahorjan
© 2013 Брагин А.В. 24
page frame 0
физическая памятьвиртуальное адресное
пространство
page frame 1
page frame 2
page frame 3
page frame 4
page frame 5
page frame 6
page frame 7
0
1K
2K
3K
4K
5K
6K
7K
8K
страница 0
страница 1проц
есс
0
0
K
2K
таблица страниц
страница 0
страница 1
Проц
есс 1
0
K
2K
таблица страниц
страница 2
страница 33K
4K
page frame 89K
page frame 910K
виртуальное адресное
пространство
Пример трансляции адресов
• Допустим
– 32-битная разрядность адресов
– Размер страницы = 4096 байт
– VPN длиной 20 бит, смещение 12 бит
• Преобразуем адрес 0x43456323
– VPN = 0x43456 и смещение = 0x323
– Допустим, что в ячейке таблицы страниц по индексу 0x43456 находится значение PFN 0x1002
– Физический адрес = 0x01002323
© 2013 Брагин А.В. 25
Возможности PTE
• Отображение на номер фрейма – не единственная возможность
• Если уже есть таблица, то можно
– Добавить защиту доступа
– Добавить доп вспомогательную информацию (напр., используется ли эта виртуальная страница или нет)
© 2013 Брагин А.В. 26
Запись PTE
• V – может ли использоваться данная запись PTE (valid or not)
• R – был ли доступ к этой странице
• M – была страница модифицирована
• P – какие операции разрешены
• PFN – номер фрейма
© 2013 Брагин А.В. 27
PFNPMRV
Преимущества страничной памяти
• Легко выделять физическую память– Списки свободных фреймов. Выделить фрейм –
просто удалить из списка свободных.
– Внешняя фрагментация не проблема, т.к. фреймы одного размера
• Естественный подход к виртуальной памяти– Всей программе не нужно быть резидентной – это
«побочный» продукт
– Все страницы одного размера
– Основа – устранение внешней фрагментации
© 2013 Брагин А.В. 28
Недостатки страничной памяти
• Внутренняя фрагментация
– Процессам могут быть нужны размеры не кратные размеру страницы
– Но по сравнению с размером адресного пространства, размер страницы очень мал
• Накладные расходы при обращении к памяти
– Вначале к таблице страниц, потом к памяти
– Решение: аппаратный кэш для обращений к таблице страниц (TLB – translation lookaside buffer)
© 2013 Брагин А.В. 29
Недостатки страничной памяти 2
• Большой объём памяти, требуемый для хранения таблиц страниц– 1 PTE на 1 страницу в виртуальном адресном
пространстве (АП)
– 32 битное АП с 4КБ страницами = 2^20 PTE = 1 048 576 PTE
– 4 байта на PTE = 4Мб на таблицу страниц• В ОС отдельные таблицы страниц для каждого процесса,
итого напр. 25 процессов * 4Мб = 100 Мб таблиц страниц
– Решение: Хранить таблицы страниц в страничной памяти!
© 2013 Брагин А.В. 30
Сегментация
• Страничная организация памяти– Решает разные проблемы типа фрагментации– Адресное пространство – линейный массив байтов– Разделённый на страницы одинакового размера
(напр., 4Кб)– Использует таблицу страниц для отображения
виртуальной страницы на физический фрейм
• Сегментация– Разделяет адресное пространство на логические
блоки (стэк, код, куча, и т.п.)– Виртуальный адрес в виде <сегмент, смещение>
© 2013 Брагин А.В. 31
Сегментация: Зачем?
• Позволяет разделить разные участки памяти в соответствии с их назначением
• Изменяемый размер
• Два варианта
– 1 сегмент на процесс – переменный раздел
– Много сегментов на процесс - сегментация
© 2013 Брагин А.В. 32
Сегментация: аппаратная поддержка
• Таблица сегментов
– Одна пара база/лимит на сегмент
– Сегменты идентифицируются номером, который индекс в таблице
– Виртуальный адрес пара <сегмент, смещение>
– Физический адрес = база сегмента + смещение
© 2013 Брагин А.В. 33
Сегментация: Недостатки
• Все недостатки, присущие организации памяти разделами переменной длины присущи сегментной организации
– Внешняя фрагментация и т.п.
© 2013 Брагин А.В. 34
Сегментно-страничная организация
• Объединяет страничную и сегментную адресацию– Архитектура x86 поддерживает и сегментную и
страничную
• Сегменты используются для управления логическими блоками. Обычно сегменты большие (множество страниц)
• Сегменты разбиваются на страницы– У каждого сегмента своя таблица страниц
© 2013 Брагин А.В. 35
Сегменты в современных ОС
• Лишь очень ограниченное применение
• Например сейчас в Linux
– 1 сегмент кода ядра, 1 сегмент данных ядра
– 1 сегмент кода пользователя, 1 сегмент данных пользователя
– Все сегменты странично организованы
© 2013 Брагин А.В. 36