SlideShare a Scribd company logo
1 of 36
Операционные Системы
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

More Related Content

What's hot

MySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxMySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxNeoClova
 
Troubleshooting Apache® Ignite™
Troubleshooting Apache® Ignite™Troubleshooting Apache® Ignite™
Troubleshooting Apache® Ignite™Tom Diederich
 
Monitoramento rede
Monitoramento redeMonitoramento rede
Monitoramento redeAndré Déo
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIgor Takenami
 
Trabalho de Sistemas Distribuídos
Trabalho de Sistemas DistribuídosTrabalho de Sistemas Distribuídos
Trabalho de Sistemas DistribuídosJuliana Cindra
 
Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Faculdade Mater Christi
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxNeoClova
 
클라우드 허브: 멀티클라우드 시대의 디지털 비즈니스 핵심 전략
클라우드 허브: 멀티클라우드 시대의 디지털 비즈니스 핵심 전략클라우드 허브: 멀티클라우드 시대의 디지털 비즈니스 핵심 전략
클라우드 허브: 멀티클라우드 시대의 디지털 비즈니스 핵심 전략KINX
 
Benchmarking NGINX for Accuracy and Results
Benchmarking NGINX for Accuracy and ResultsBenchmarking NGINX for Accuracy and Results
Benchmarking NGINX for Accuracy and ResultsNGINX, Inc.
 
Arquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersArquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersSergio Crespo
 
Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5José Wagner Bungart
 
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...Amazon Web Services Korea
 
Gerência de Armazenamento: Implementação do Sistema de Arquivos
Gerência de Armazenamento: Implementação do Sistema de ArquivosGerência de Armazenamento: Implementação do Sistema de Arquivos
Gerência de Armazenamento: Implementação do Sistema de ArquivosAlexandre Duarte
 
Programação para Web II: Estrutura de um projeto Java Web
Programação para Web II: Estrutura de um projeto Java WebProgramação para Web II: Estrutura de um projeto Java Web
Programação para Web II: Estrutura de um projeto Java WebAlex Camargo
 
Capítulo 6 Sistemas Operacionais Modernos
Capítulo 6 Sistemas Operacionais ModernosCapítulo 6 Sistemas Operacionais Modernos
Capítulo 6 Sistemas Operacionais ModernosWellington Oliveira
 
An Introduction to OpenStack Heat
An Introduction to OpenStack HeatAn Introduction to OpenStack Heat
An Introduction to OpenStack HeatMirantis
 

What's hot (20)

MySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxMySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptx
 
Troubleshooting Apache® Ignite™
Troubleshooting Apache® Ignite™Troubleshooting Apache® Ignite™
Troubleshooting Apache® Ignite™
 
Monitoramento rede
Monitoramento redeMonitoramento rede
Monitoramento rede
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de Sistemas
 
Trabalho de Sistemas Distribuídos
Trabalho de Sistemas DistribuídosTrabalho de Sistemas Distribuídos
Trabalho de Sistemas Distribuídos
 
Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 
ZFS in 30 minutes
ZFS in 30 minutesZFS in 30 minutes
ZFS in 30 minutes
 
클라우드 허브: 멀티클라우드 시대의 디지털 비즈니스 핵심 전략
클라우드 허브: 멀티클라우드 시대의 디지털 비즈니스 핵심 전략클라우드 허브: 멀티클라우드 시대의 디지털 비즈니스 핵심 전략
클라우드 허브: 멀티클라우드 시대의 디지털 비즈니스 핵심 전략
 
(GFS) Google Dosya Sistemi
(GFS) Google Dosya Sistemi (GFS) Google Dosya Sistemi
(GFS) Google Dosya Sistemi
 
Fundamentos de arquitetura Web
Fundamentos de arquitetura WebFundamentos de arquitetura Web
Fundamentos de arquitetura Web
 
Benchmarking NGINX for Accuracy and Results
Benchmarking NGINX for Accuracy and ResultsBenchmarking NGINX for Accuracy and Results
Benchmarking NGINX for Accuracy and Results
 
Arquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and FiltersArquiteturas usando Pipes and Filters
Arquiteturas usando Pipes and Filters
 
NVMe over Fabric
NVMe over FabricNVMe over Fabric
NVMe over Fabric
 
Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5
 
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...
 
Gerência de Armazenamento: Implementação do Sistema de Arquivos
Gerência de Armazenamento: Implementação do Sistema de ArquivosGerência de Armazenamento: Implementação do Sistema de Arquivos
Gerência de Armazenamento: Implementação do Sistema de Arquivos
 
Programação para Web II: Estrutura de um projeto Java Web
Programação para Web II: Estrutura de um projeto Java WebProgramação para Web II: Estrutura de um projeto Java Web
Programação para Web II: Estrutura de um projeto Java Web
 
Capítulo 6 Sistemas Operacionais Modernos
Capítulo 6 Sistemas Operacionais ModernosCapítulo 6 Sistemas Operacionais Modernos
Capítulo 6 Sistemas Operacionais Modernos
 
An Introduction to OpenStack Heat
An Introduction to OpenStack HeatAn Introduction to OpenStack Heat
An Introduction to OpenStack Heat
 

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

Операционные системы 2015, лекция № 2
Операционные системы 2015, лекция № 2Операционные системы 2015, лекция № 2
Операционные системы 2015, лекция № 2Aleksey Bragin
 
Dynamic Memory в Windows Server 2008 R2 SP1
Dynamic Memory в Windows Server 2008 R2 SP1Dynamic Memory в Windows Server 2008 R2 SP1
Dynamic Memory в Windows Server 2008 R2 SP1Andrey Beshkov
 
Как Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав БирюковКак Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав БирюковYandex
 
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают..."Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...Egor Petrov
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
Вячеслав Бирюков - Как Linux работает с памятью
Вячеслав Бирюков - Как Linux работает с памятьюВячеслав Бирюков - Как Linux работает с памятью
Вячеслав Бирюков - Как Linux работает с памятьюYandex
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Ontico
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Anton Baranov
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 
All about Azure - Kazan
All about Azure - KazanAll about Azure - Kazan
All about Azure - KazanAlexey Bokov
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляютсяMax Lapshin
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg PresentationHighLoad2009
 
Windows azure общий обзор
Windows azure общий обзорWindows azure общий обзор
Windows azure общий обзорMicrosoft
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Alexander Syrotenko
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинYandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 

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

Операционные системы 2015, лекция № 2
Операционные системы 2015, лекция № 2Операционные системы 2015, лекция № 2
Операционные системы 2015, лекция № 2
 
Dynamic Memory в Windows Server 2008 R2 SP1
Dynamic Memory в Windows Server 2008 R2 SP1Dynamic Memory в Windows Server 2008 R2 SP1
Dynamic Memory в Windows Server 2008 R2 SP1
 
Как Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав БирюковКак Linux работает с памятью — Вячеслав Бирюков
Как Linux работает с памятью — Вячеслав Бирюков
 
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают..."Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
"Как остаться в светлой памяти: доклад о том, почему наши приложения вылетают...
 
Презентация 3
Презентация 3Презентация 3
Презентация 3
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Вячеслав Бирюков - Как Linux работает с памятью
Вячеслав Бирюков - Как Linux работает с памятьюВячеслав Бирюков - Как Linux работает с памятью
Вячеслав Бирюков - Как Linux работает с памятью
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
All about Azure - Kazan
All about Azure - KazanAll about Azure - Kazan
All about Azure - Kazan
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляются
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
 
Windows azure общий обзор
Windows azure общий обзорWindows azure общий обзор
Windows azure общий обзор
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 

Операционные системы 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