Лекция 8. Управление...

50
Начало Фиксированное распределение Сегментная организация Страничная организация Название Цели Лекция 8. Управление памятью Операционные системы 27 января 2013 г. Лекция 8 1 / 50

Upload: others

Post on 25-Aug-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

НазваниеЦели

Лекция 8. Управление памятьюОперационные системы

27 января 2013 г.

Лекция 8 1 / 50

Page 2: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

НазваниеЦели

Задачи управления памятью

ЗадачиПеремещаемость кода и данных.Защита памяти.Совместное использование памяти.Логическая организация в виде сегментов, модулей.Двухуровневая память.

Лекция 8 2 / 50

Page 3: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

КонцепцияРеализации OS/360

Фиксированное распределение памяти

Резерв Резерв

Рис. 1 : концепция фиксированного распределения паяти

Лекция 8 3 / 50

Page 4: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

КонцепцияРеализации OS/360

Варианты OS/360

Версии ядра

Single Sequential Scheduler (SSS).Primary Control Program (PCP).

Multiple Sequential Scheduler (MSS).Multiprogramming with a Fixed number of Tasks (MFT).

Multiple Priority Scheduler (MPS).Multiprogramming with a Variable number of Tasks (MVT).

Лекция 8 4 / 50

Page 5: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

КонцепцияРеализации OS/360

Распределение памяти в OS/360

Рис. 2 : организация памяти в OS/360 – MFT

Лекция 8 5 / 50

Page 6: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Реальный режим

03419

сегмент 0 0 0 0

+0151619

0 0 0 0 смещение

=019

физический адрес

Рис. 3 : адресация паяти в реальном режиме процессора 80x86

Лекция 8 6 / 50

Page 7: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Реальный режим (окончание)

Вычисление физического адреса

адрес = сегмент× 16+ смещение

сегментсегментсегментсегментсегмент

Рис. 4 : адресация паяти в реальном режиме процессора 80x86

Лекция 8 7 / 50

Page 8: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Короткие и длинные адреса

Пример (Assembler 8086)

mov bx, 01hmov ax, [bx] ; короткая адресация: ds:[bx]mov es, axmov cx, es:[bx] ; длинная адресация

Пример (Borland C++ 3.1 и т. д.)

int n;int *far lpn = &n;int *near npn = &n;

Лекция 8 8 / 50

Page 9: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Режимы адресации, начиная с 80286

Режимыреальный;защищённый.

Назначение реального режима

Совместимость с предыдущим ПО;Начальная загрузка системы.

Лекция 8 9 / 50

Page 10: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Способы разбиения памяти

Определения

Сегмент: (segment) — область памяти заданного размера.Страница: (page) — диапазон линейных адресов (размер зависит от

архитектуры, ∼ 4Кбайт) и данные по ним.Страничный кадр: (page frame, физическая страница) — единица разбиения

физической памяти, содержит 1 страницу.

Лекция 8 10 / 50

Page 11: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Селектор

012315

индекс TI RPL

Рис. 5 : формат селектора в защищённом режиме процессора 80286

Поле Значения Название ПримечаниеRPL 0 . . . 3 Requested Privilege Level 0 ∼ режим ядраTI 0 . . . 1 Table Indicator 0 ⇒ GDT, 1 ⇒ LDTиндекс 0 . . . 8 191 —

Таблица 1 : значения полей селектора

Лекция 8 11 / 50

Page 12: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Сегментные регистры

Обозн. Название ПримечаниеCS Code Segment 3 CPL—Current Privilege LevelDS Data SegmentSS Stack SegmentES Extra SegmentFS сегмент общего назначенияGS сегмент общего назначенияGDTR Global Descriptor Table Register адрес (32 бит) и размер (16 бит)LDTR Local Descriptor Table Register адрес (32 бит) и размер (16 бит)

Таблица 2 : сегментные регистры процессоров архитектуры X86

Лекция 8 12 / 50

Page 13: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Трансляция адресов (80286)

логический адрес

блок сегментации

физический адрес

Рис. 6 : трансляция адресов в защищённом режиме процессора 80286

Лекция 8 13 / 50

Page 14: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Трансляция адресов (продолжение)

индекс

базовый адрес

базовый адрес

базовый адрес

базовый адрес

0 0 0 0 0 0 0 0 смещение

+

физический адрес

15 3 15 0

23 0

Рис. 7 : трансляция адресов в защищённом режиме процессора 80286

Лекция 8 14 / 50

Page 15: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Поля дескриптора сегмента (8 байт)

Поле Бит Название ПримечаниеBase 32 линейный адрес началаG 1 Granularity 0 ⇒ размер в байтах, иначе

в 4 096-байтных блоках.Limit 20 размер (1 байт . . . 1 Мбайт или

4 Кбайт . . . 4 Гбайт)S 1 System 0 ⇒ хранит системные данные

(LDT, . . . ) иначе обычный сегменткода/данных.

DPL 2 Descriptor Privilege Level Уровень привилегий.P 1 Присутствие 1 ⇒ сегмент присутствует (в Linux

всегда).Type 4 тип сегмента

Таблица 3 : некоторые поля дескриптора сегмента процессора 80286

Лекция 8 15 / 50

Page 16: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Типы сегментов

Тип Таблица S Хранениекода GDT, LDT 1 сегмент кодаданных GDT, LDT 1 сегмент данных или сте-

касостояния задачи (TSS) GDT 0 сегмент с процессорны-

ми регистрами.локальной таблицы де-скрипторов

GDT 0 сегмент с LDT.

Таблица 4 : некоторые виды сегментов процессора 80286

Лекция 8 16 / 50

Page 17: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Работа блока сегментации

Алгоритм

1 TI = 0 ⇒ базовый линейный адрес из GDTR, иначе — из LDTR.2 адрес дескриптора сегмента = базовый линейный адрес+ 8× индекс;3 max {CPL, RPL} > DPL⇒ General Protection Fault (GP);4 Из дескриптора сегмента выбирается поле «базовый адрес» (Base);5 линейный адрес = базовый адрес+ смещение.

Лекция 8 17 / 50

Page 18: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Использование сегментации в ОС

LinuxДля каждого процессора существует GDT, содержащая 4 дескрипторасегментов (Base = 0, G = 1, Limit = 0xFFFFF = 220 − 1):

Для всех процессов ядра:код ядра;данные ядра;

Для всех процессов пользователя:код пользователя;данные пользователя.

+ некоторые специфические сегменты.

Для каждого процесса создаётся LDT по умолчанию ядром. Некоторыеприложения обращаются к нему (Wine, . . . )

Лекция 8 18 / 50

Page 19: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реальный режимЗащищённый режимРеализация в архитектуре 80286Использование в ОС

Использование сегментации в ОС (окончание)

Windows 3.11 GDT, 1 LDT для системной виртуальной машины и по 1 LDT длякаждой ВМ для DOS-приложения (режим V86).Сегменты кода, данных приложений могут помечаться какфиксированные, перемещаемые, перемещаемые + удаляемые, . . .

Windows NTМодель flat: 1 сегмент для кода и данных для приложения, сегментныерегистры не должны меняться им.

Лекция 8 19 / 50

Page 20: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Трансляция адресов (80386)

логический адрес

блок сегментации

линейный адрес

блок управления страницами

физический адрес

Рис. 8 : трансляция адресов в защищённом режиме процессора 80386

Лекция 8 20 / 50

Page 21: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Трансляция адресов (продолжение)

таблица страница смещение

адрес

адрес

адрес

адрес

адрес

адрес

адрес

адрес

+

физический адрес

31 22 21 12 11 0

31 0

Рис. 9 : трансляция адресов в защищённом режиме процессора 80386

Лекция 8 21 / 50

Page 22: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Поля таблицы страниц (4 байт)

Поле Бит ПримечаниеPresent 1 флаг присутствияадрес 20 20 старших бит.Accessed 1 устанавливается, когда блок управления адресует

соответствующий кадрDirty 1 (для таблицы страниц) устанавливается, когда вы-

полняется запись в кадрRead/Write 1 права доступа на запись.User/Supervisor 1 уровень привилегий ( = 3 или < 3).Page Size 1 (для каталога страниц) = 1 ⇒ размер страницы =

4 Мбайт

Таблица 5 : некоторые поля элемента таблицы страниц процессора 80386

Лекция 8 22 / 50

Page 23: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Работа блока управления страницами

Алгоритм

1 Адрес элемента Каталога Таблицы Страниц = *cr3+ 4× каталог;2 Адрес Таблицы Страниц— из поля «адрес» элемента Каталога Таблиц;3 Адрес элемента Таблицы Страниц =

адрес Таблицы Страниц× 4 096+ 4× таблица;4 Адрес страницы— из поля «адрес» дескриптора Таблицы Страниц;5 Физический адрес = адрес страницы× 4 096+ смещение.

Вместимость Каталога Таблиц/Таблицы Страниц

До 1 024 элементов.

Лекция 8 23 / 50

Page 24: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Буфер ассоциативной трансляции

Определение

Буфер ассоциативной трансляции: (translation lookaside buffer, TLB) — кэш,отображающий (недавно вычисленные) линейные адресав физические.

Лекция 8 24 / 50

Page 25: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Расширение размера страниц

0212231

таблица смещение

Рис. 10 : формат смещения в режиме адресации расширенных страниц процессораPentium

Определение

Режим расширения размера страниц: (Page size extension, PSE) — режим,включаемый полем PSE регистра CR4 (поле «Page size»элемента таблицы = 1).

Лекция 8 25 / 50

Page 26: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Механизм расширения физических адресов

011122021293031

pdpt таблица страница смещение

Рис. 11 : формат смещения в режиме расширения физических адресов процессораPentium Pro

Определение

Механизм расширения физических адресов: (Physical Address Extension,PAE) — режим, включаемый полем PAE регистра CR4. Отличия:

поле «адрес» элемента таблицы увеличивается с 32до 36 бит ⇒ элемент таблицы увеличивается с 4 до 8 байт;количество элементов таблиц уменьшается с 1 024 до 512.

Лекция 8 26 / 50

Page 27: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Расширение размера страниц

0111220212930383947

PML4 (9) PDPT (9) каталог (9) таблица (9) смещение (12)

Рис. 12 : формат смещения в режиме long mode архитектуры AMD64 (x86-64)

Лекция 8 27 / 50

Page 28: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Использование страничной адресации в Windows 3.1

Windows 3.1

Страничный (32-битный) режим адресации используется тольковиртуальными драйверами, работающими в 0-м кольце защиты.

Лекция 8 28 / 50

Page 29: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Компоненты диспетчера памяти

Функциональность ntoskrnl.exe

Сервисы управления виртуальной памятью (приложения, драйверыустройств режима ядра).Обработчики ловушек трансляции недействительных адресови нарушения прав доступа.Системные потоки режима ядра.

Лекция 8 29 / 50

Page 30: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Системные потоки диспетчера памяти

Потоки режима ядра

Поток обнуления страниц (zero page thread).Диспетчер рабочих наборов (working set manager).Поток загрузки и выгрузки стеков (process/stack swapper).Подсистема записи модифицированных страниц (modified page writer).Подсистема записи спроецированных страниц (mapped page writer).Поток сегмента разыменования (dereference segment thread).

Лекция 8 30 / 50

Page 31: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Состояния страниц

Состояния страниц в диспетчере памяти

Свободная (free).Зарезервированная (reserved).Переданная (committed).

Последовательность работы со страницами

1 Резервирование (reserving).2 Передача (committing).3 Возврат (decommitting).4 Освобождение (freeing).

Лекция 8 31 / 50

Page 32: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Выделение памяти

Windows API VirtualAlloc()

LPVOID WINAPI VirtualAlloc(__in_opt LPVOID lpvAddress,__in SIZE_T dwSize,__in DWORD flAllocationType,__in DWORD flProtect

);

flAllocationTypeMEM_RESERVEMEM_COMMITMEM_RESERVE | MEM_COMMITMEM_LARGE_PAGESMEM_RESERVE | MEM_PHYSICAL. . .

Таблица 6 : возможные значенияфлагов параметров функции

Лекция 8 32 / 50

Page 33: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Освобождение памяти

Windows API VirtualFree()

BOOL WINAPI VirtualFree(__in LPVOID lpvAddress,__in SIZE_T dwSize,__in DWORD dwFreeType

);

dwFreeType ОграниченияMEM_DECOMMIT —MEM_RELEASE dwSize == 0

Таблица 7 : возможные значенияпараметров функции

Лекция 8 33 / 50

Page 34: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Адресное пространство процесса в 32-битном режиме

2 ГБайт

hhhhhhhhhhhhhhhhhhhhhhhh

Ядро

64 КБайт2 ГБайт − 128 КБайтhhhhhhhhhhhh

hhhhhhhhhhhh

Процесс

64 КБайт

1 ГБайтhhhhhhhhhhhhhhhhhhhhhhhh

Ядро

64 КБайт

3 ГБайт − 128 КБайт

hhhhhhhhhhhhhhhhhhhhhhhh

Процесс

64 КБайт

Рис. 13 : адресное пространство процесса в Windows

Лекция 8 34 / 50

Page 35: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Доступность 3 (4) Гбайт для процесса

Условия доступности более 2 Гбайт для 32-разрядного процесса

Флаг IMAGE_FILE_LARGE_ADDRESS_AWARE в образе исполняемого файла.Настройка 32-разрядной системы (BCDEdit /set increaseuserva 3072)или 64-разрядная система.

Размер адресного пространства для 64-разрядного процесса

8 Тбайт для платформы AMD64 (x86-64).

Лекция 8 35 / 50

Page 36: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Сеанс

Определения

Сеанс: (session) — средство удалённой работы при помощи службтерминалов (Terminal Services) и быстрого переключенияпользователей.

Оконная станция: (window station) — объект, содержащий буфер обмена,таблицу атомов один или несколько рабочих столов и имеющийатрибуты безопасности и права доступа.

Данные сеанса

Оконная станция;Пространство имён;. . .

Лекция 8 36 / 50

Page 37: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Системные пулы памяти

Определения

Пул неподкачиваемой памяти: (nonpaged pool) — диапазон системныхвиртуальных адресов, присутствующих и доступных всё время(⇒ без ошибок страниц).

Пул подкачиваемой памяти: (paged pool) — диапазон системных виртуальныхадресов, которые система может выгружать в страничныйфайл/загружать из файла.

Лекция 8 37 / 50

Page 38: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Структура виртуального адресного пространства

Виды данных в адресном пространстве

Принадлежащие процессу (код/данные);Принадлежащие сеансу (код/данные);Принадлежащие системе (код/данные);

Код ядра;Драйверы;Таблицы страниц процесса;Области системной подкачиваемой/неподкачиваемой памяти.. . .

Лекция 8 38 / 50

Page 39: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Использование PSE

Возможности использования больших страниц

Базовые образы ОС (ntoskrnl.exe и hal.dll);Базовые системные данные (структуры, описывающие состояниястраничных кадров, . . . );Запросы большого ввода/вывода;Для приложений закрытые области памяти, выделенные VirtualAlloc()с использованием флага MEM_LARGE_PAGE;Другие заданные драйверы при настройке в реестре.

Лекция 8 39 / 50

Page 40: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Использование PAE

Определение

Расширения оконного доступа к адресам: (Address Windowing Extensions,AWE) — часть Windows API для доступа к памяти обычнымпроцессам с использованием PAE.

Порядок работы с памятью

1 Выделение физической памяти (AllocateUserPhysicalPages());2 Создание окна (VirtualAlloc() с флагом MEM_PHYSICAL);3 Проецирование части физической памяти на окно

(MapUserPhysicalPages(), MapUserPhysicalPagesScatter()).

Лекция 8 40 / 50

Page 41: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Адресное пространство процесса в 32-битном режиме

1 ГБайт

Ядро

3 ГБайт

Процесс

Ядро

3 ГБайт

Процесс

Рис. 14 : адресное пространство процесса в Linux

Лекция 8 41 / 50

Page 42: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Особенности распределения адресного пространства

Организация виртуального адресного пространства процессов

Ядро сохраняет регистр cr3 в дескрипторе процесса ⇒ каждый процессимеет собственный глобальный каталог таблиц.Первые 3 ГБайт адресного пространства доступны для процессов,различны.Последний 1 ГБайт доступен в режиме ядра, отображается в однуобласть памяти.Потоки ядра работают в 3–4 Гбайтном диапазоне верхних адресов,не ссылаясь ниже ⇒ неважно, какой таблицей страниц они пользуются.Для избежания лишних сбросов TLB-буферов используется таблицадескрипторов последнего процесса.

Лекция 8 42 / 50

Page 43: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Управление динамической памятью

Виды оперативной памятипостоянно выделенная ядру;динамическая.

Запросы на выделение памяти со стороны ядра

Удовлетворяются немедленно:ядро является приоритетным компонентом;ядро доверяет самому себе.

Запросы на выделение памяти со стороны пользовательского процессапроцессу сразу выделяется диапазон ячеек, само выделениеоткладывается до момента обращения (лениво);код процесса может содержать ошибки.

Лекция 8 43 / 50

Page 44: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Исключения при обращении к памяти

Причины

Адреса, указанные вследствие программных ошибок;Адреса принадлежат отсутствующей странице, хотя принадлежатадресному пространству процесса ⇒ соответствующий кадр должен бытьвыделен.

Лекция 8 44 / 50

Page 45: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Обработка исключения обращения к странице

если адрес ∈ адресному пространству процесса, тоесли вид доступа ∼ правам доступа к области, то

допустимое обращение, выделить страничный кадр;иначе

недопустимое обращение, послать SIGSEGV;

иначеесли исключение в режиме пользователя, то

недопустимое обращение, послать SIGSEGV;иначе

ошибка ядра, уничтожить процесс;

Рис. 15 : упрощённый алгоритм обработки исключения обращения к странице

Лекция 8 45 / 50

Page 46: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

«Жадное» выделение памяти

Старая реализация функции fork()

1 Выделение страничных кадров под таблицы страниц потомка.2 Выделение страничных кадров под страницы потомка.3 Инициализация таблиц страниц потомка4 Копирование страниц родителя в страницы потомка.

Лекция 8 46 / 50

Page 47: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

«Ленивое» выделение памяти

Особенности реализации функции fork()

Страничные кадры не копируются, а используются совместно родителеми потомком;Страничные кадры помечаются недоступными для записи;Если родитель или потомок попытается записать в общую страницу,возникнет исключение, ядро создаст копию, оригинал останетсядоступным только для чтения.Если потом произойдёт попытка записи в исходную страницу, ядропроверит, является ли процесс единственным владельцем её (поледескриптора страницы _count == 0). Да ⇒ пометит её как доступную назапись._count == -1 ⇒ страница считается свободной.

Лекция 8 47 / 50

Page 48: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Выделение страниц по требованию

Пример (проверка выделения памяти)

int main(){

try{

char *pchData = new char[100000000];// . . .

}catch (const std::bad_alloc &){

// . . .}

}

Лекция 8 48 / 50

Page 49: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Утилизация страничных кадров

Особенности работы с памятью

ОС Linux не делает проверок размеров доступной памяти ⇒ кеши дискаи т. д. растут неограниченно.

Определение

Алгоритм утилизации страничных кадров: (Page Frame Reclaiming Algorithm,PFRA) — выбирает занятые страничные кадры для выгрузкина диск.

Лекция 8 49 / 50

Page 50: Лекция 8. Управление памятьюstaff.mmcs.sfedu.ru/~dubrov/files/sl_12_os_08_memory.pdfЛекция 8 1 / 50 Начало Фиксированное распределение

НачалоФиксированное распределение

Сегментная организацияСтраничная организация

Реализация в архитектуре x86Использование в Windows 3.1Использование в Windows NTИспользование в Linux

Выгрузка страниц

Виды страниц

Неутилизируемые (динамически выделенные ядру, временнозаблокированные, . . . )Выгружаемые (анонимные в АП режима пользователя)Синхронизируемые (отображение файлов в режиме пользователя,дисковые кэши, . . . )На выброс (неиспользуемые, в кэшах памяти).

Случаи утилизации

Дефицит памяти в системе;Гибернация;Периодическая утилизация.

Лекция 8 50 / 50