Операционные Системы
7. Управление памятью
Брагин Алексей Владимирович
aleksey@reactos.org
ИУ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
страница 3
3K
4K
page frame 8
9K
page frame 9
10K
виртуальное адресное
пространство
Пример трансляции адресов
• Допустим
– 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

Операционные системы 2015, лекция № 7

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