Управление оперативной памятью. Физическая память
Download
Report
Transcript Управление оперативной памятью. Физическая память
Управление памятью
Управление физической
памятью
Оперативная память
(ОП)
Энергозависимое устройство
хранения информации, хранящее
программный код и данные
работающих в системе процессов
Роль ОП в работе системы
(принципы фон Неймана)
ОП память представляет собой
упорядоченный массив пронумерованных
ячеек
– Элементарная (минимальная адресуемая)
единица памяти – байт
– Номер байта в памяти - адрес
Для того, чтобы процесс мог выполняться
в системе, его программный код и данные
должны быть загружены в ОП
Для представления данных и кода
используется унифицированное
представление (бинарный код)
Физическая ОП
0 1
2
3
4
2n-2 2n-1
Модель ОП – плоский массив
Каждой ячейке (байту) присвоен номер – адрес
Допустимое количество байтов в памяти (объем)
определяется разрядностью шины адреса вычислительной
системы – n
Допустимый объем памяти равен 2n
Максимально допустимый адрес памяти равен 2n-1
Множество адресов памяти – адресное пространство
Реальный объем ОП ограничен аппаратной реализацией
или дополнительными ограничениями
Задачи управления
физической ОП
Выделение памяти под процессы
Освобождение памяти после завершения
процессов
Решение проблемы фрагментации памяти
Современные ОС управляют не
физической, а виртуальной памятью –
отображение виртуального адресного
пространства на физическое выполняется
аппаратно
Управление памятью в
однозадачных системах (MS DOS)
В однозадачных системах в ОП одновременно
могут находиться:
– Невыгружаемые части ОС
– Резидентные программы
– Один процесс (одна программа) пользователя
Однозадачные системы, как правило, управляют
непосредственно физическим адресным
пространством
В MS DOS использовалась технология
виртуальной памяти – сегментация, но
количество сегментов памяти, их
индивидуальный и общий объем определялся
строго аппаратно и не превышал объемов
физической ОП
Организация памяти в
MS DOS
MS DOS использует ресурсы реального
режима 16-ти разрядных процессоров
Intel (i80286)
Разрядность шины адреса i80286
составляет 20 бит
Допустимое адресуемое адресное
пространство составляет 220 = 1Мбайт (с
адресами от 0 до 220-1)
Все регистры процессора 16-ти
разрядные, поэтому для работы с ОП
использовались виртуальные адреса
Сегментация памяти в
MS DOS
Сегмент – непрерывный участок оперативной
памяти нефиксированного размера
Вся ОП в MS DOS делилась на сегменты
Для обращения к сегментам использовались
специальные сегментные регистры процессора
(CS, SS, DS, ES, FS, GS), которые хранили
сегментные адреса начал сегментов:
– Физический адрес начала сегмента должен быть 20-ти
битным
– Длина любого сегментного регистра – 16 бит
– Сегментный адрес = Физический адрес / 16
– Сегменты MS DOS могут начинаться только с
физических адресов, кратных 16-ти, т.е. у которых
последние 4 бита заполнены 0 (нулями)
Сегментация памяти в
MS DOS
Для обращения к ячейкам памяти в программе
использовались виртуальные адреса имеющие
формат segment:offset
– segment – сегментный (16-ти разрядный) адрес начала
сегмента, в котором находится ячейка
– offset – 16-ти разрядное смещение ячейки
относительно начала сегмента
Т.к. смешение в сегменте задавалось 16-ти
разрядным значением, то максимально
допустимый размер сегмента составлял 216 = 64
Кбайта (смещение – значение в диапазоне от 0
до 216-1
Виртуальные адреса аппаратно
преобразовывались в физические (20-ти
разрядные) по формуле
ФА = segment * 16 + offset
Представление программы
в памяти в MS DOS
CS
IP
+
SS
Сегмент
кода
Сегмент
стека
SP
DS
Сегмент
данных
Оперативная память
Распределение памяти в MS DOS:
обычная память (640 Кбайт)
Объем
адресного
пространства
Содержимое
Физический
адрес начала
области
1 Кбайт
Векторы прерываний
00000h
256 байт
Область данных BIOS
00400h
Операционная система
MS DOS
00500h
Свободная память для
загружаемых прикладных
и системных программ
Распределение памяти в MS DOS:
старшая память (384 Кбайт)
Объем адресного
пространства
Содержимое
Физический адрес
начала области
памяти
64 Кбайт
Графический видеобуфер A0000h
32 Кбайт
Свобоные адреса
B0000h
32 Кбайт
Текстовый видеобуфер
B8000h
64 Кбайт
ПЗУ-расширения BIOS
C0000h
128 Кбайт
Свободные адреса
D0000h
64 Кбайт
ПЗУ BIOS
F0000h
Распределение памяти в MS DOS:
расширенная память
Объем адресного Содержимое
пространства
Физический адрес
начала области
памяти
64 Кбайт
HMA
(High Memory Area)
100000h
До 4 Гбайт
XMS
(eXtended Memory
Specification)
10FFF0h
Размещение программ в
памяти MS DOS
В основной области памяти (первые 640Kбайт,
после самой MS DOS с адреса 00500h)
В области HMA, если определить сегмент с
сегментным адресом FFFFh и разрешить
пользоваться линией A20 (управляющая линия,
разрешающая преобразовывать 20-ти разрядные
физические адреса в 32-х разрядные)
– MS DOS может работать c HMA только при
загруженном драйвере HIMEM.SYS
– MS DOS позволяет загружать в HMA часть себя
(директивой DOS=HIGH в файле CONFIG.SYS)
– MS DOS позволяет загружать программы в HMA
командой LH (Load High), указанной перед вызовом
com- или exe-файла
Размещение программ в
памяти MS DOS
В области расширенной памяти XMS
– Только если MS DOS работает на 32-х
разрядной платформе Intel
– Если загружен драйвер HIMEM.SYS
– Если загружен драйвер emm386.exe,
обслуживающий XMS-память и выполняющий
отображение 16-ти разрядных адресов на
физические
– Использование XMS ограничено –
пользовательские программы не могут быть
загружены в эту область памяти
– XMS используется для системных нужд,
например, в ней можно создать виртуальные
диски (RAMDRIVE.SYS)
Оверлейные программы
Оверлеи (overlay) – специальные модули
программ MS DOS, которые загружаются
в ОП независимо от программы в те
моменты, когда это необходимо
Оверлеи позволяют снять ограничение на
объем программы MS DOS
При загрузке оверлеи размещаются в
одном и том же месте памяти,
перекрывая друг друга
Оверлейные программы
Основной модуль
программы
(com или exe)
Оверлей - 1
Оверлей - 2
Дисковое пространство
Свободная область
основной
памяти
Резидентные программы
Резидентные программы – это программы,
загруженные в ОП и оставленные там до
наступления определенного события
Резидентные программы находятся в
законсервированном состоянии до тех пор, пока
в системе не произойдет какое-либо событие,
например, прерывание
В момент выполнения резидентной программы
основная программа приостанавливается
Резидентные программы – это попытка избежать
ограничений однозадачной MS DOS
Управление физической памятью
в многозадачных системах (RSX)
Основной подход к управлению ФОП
в многозадачных ОС – блочное
выделение памяти
Блок – область памяти, выделенная
программе в момент ее загрузки
Одна программа может занимать
несколько блоков
Проблемы при блочном
управлении ОП
Программы могут удаляться из ОП в произвольном
порядке
Свободный участок ОП, оставшийся после
удаления программы называется фрагментом (или
дырой)
При размещении новой программы в ОП ОС
должна решить – куда поместить образ
программы:
– В конец ОП? Рано или поздно физическое адресное
пространство закончится и программы не смогут быть
загружены в ОП
– В свободный фрагмент? Как подобрать подходящий
фрагмент для конкретной программы
Проблема управления ФОП в многозадачных ОС
тесно связана с проблемой фрагментации памяти
Сложение дыр
ОС всегда размещает программу в конец
уже занятого адресного пространство
Если в ОП возникает дыра, ОС сдвигает
занятые участки так, чтобы между ними
не было фрагментов свободной памяти (в
сторону уменьшения адресов)
Таким образом, свободное адресное
пространство всегда находится в конце
памяти
Пример сложения дыр
PID
SA
VOL
1
1000
500
2
1500
340
3
2040
120
Free
2160
1000
Процесс 1
Процесс 2
PID
SA
VOL
1
1000
500
3
1500
120
Free
1620
Процесс 3
Заполнение дыр (RSX)
При загрузке новой программы
оценивается ее объем и находится
фрагмент, наиболее подходящий по
размеру
Полностью проблемы
фрагментации, но экономит время
системы, затрачиваемое на сдвиг
программ в памяти
Пример заполнения дыр
PID
SA
VOL
1000
1
1000
500
2
Free
1500
340
3
2040
120
Free
2160
PID
SA
Процесс 1
1500
Процесс
4 (176)
Процесс
2
VOL
1
1000
500
4
1500
176
Free
1676
152
3
2040
120
Free
2160
Процесс 3