Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

833 views

Published on

Управление памятью

Видео можно посмотреть на канале http://www.youtube.com/playlist?list=PLjSDyY6BQPVe2Zhxew5rJy2S-2_9t1vvn

Published in: Education
  • Login to see the comments

  • Be the first to like this

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

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

×