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

advertisement
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Название
Цели
Лекция 8. Управление памятью
Операционные системы
27 января 2013 г.
Лекция 8
1 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Название
Цели
Задачи управления памятью
Задачи
Перемещаемость кода и данных.
Защита памяти.
Совместное использование памяти.
Логическая организация в виде сегментов, модулей.
Двухуровневая память.
Лекция 8
2 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Концепция
Реализации OS/360
Фиксированное распределение памяти
Резерв
Резерв
Рис. 1 : концепция фиксированного распределения паяти
Лекция 8
3 / 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
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Концепция
Реализации OS/360
Распределение памяти в OS/360
Рис. 2 : организация памяти в OS/360 – MFT
Лекция 8
5 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Реальный режим
19
4 3
сегмент
0
0000
+
19
1615
0000
0
смещение
=
19
0
физический адрес
Рис. 3 : адресация паяти в реальном режиме процессора 80x86
Лекция 8
6 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Реальный режим (окончание)
Вычисление физического адреса
адрес = сегмент × 16 + смещение
сегмент
сегмент
сегмент
сегмент
сегмент
Рис. 4 : адресация паяти в реальном режиме процессора 80x86
Лекция 8
7 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Короткие и длинные адреса
Пример (Assembler 8086)
mov
mov
bx, 01h
ax, [bx]
; короткая адресация: ds:[bx]
mov
mov
es, ax
cx, es:[bx]
; длинная адресация
Пример (Borland C ++ 3.1 и т. д.)
int n;
int *far lpn = &n;
int *near npn = &n;
Лекция 8
8 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Режимы адресации, начиная с 80286
Режимы
реальный;
защищённый.
Назначение реального режима
Совместимость с предыдущим ПО;
Начальная загрузка системы.
Лекция 8
9 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Способы разбиения памяти
Определения
Сегмент: (segment) — область памяти заданного размера.
Страница: (page) — диапазон линейных адресов (размер зависит от
архитектуры, ∼ 4 Кбайт) и данные по ним.
Страничный кадр: (page frame, физическая страница) — единица разбиения
физической памяти, содержит 1 страницу.
Лекция 8
10 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Селектор
15
3
индекс
2
TI
1
0
RPL
Рис. 5 : формат селектора в защищённом режиме процессора 80286
Поле
RPL
TI
индекс
Значения
0 ... 3
0 ... 1
0 . . . 8 191
Название
Requested Privilege Level
Table Indicator
—
Примечание
0 ∼ режим ядра
0 ⇒ GDT, 1 ⇒ LDT
Таблица 1 : значения полей селектора
Лекция 8
11 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Сегментные регистры
Обозн.
CS
DS
SS
ES
FS
GS
GDTR
LDTR
Название
Code Segment
Data Segment
Stack Segment
Extra Segment
Примечание
3 CPL — Current Privilege Level
Global Descriptor Table Register
Local Descriptor Table Register
сегмент общего назначения
сегмент общего назначения
адрес (32 бит) и размер (16 бит)
адрес (32 бит) и размер (16 бит)
Таблица 2 : сегментные регистры процессоров архитектуры X86
Лекция 8
12 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Трансляция адресов (80286)
логический адрес
блок сегментации
физический адрес
Рис. 6 : трансляция адресов в защищённом режиме процессора 80286
Лекция 8
13 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Трансляция адресов (продолжение)
15
3
индекс
15
00000000
0
смещение
базовый адрес
базовый адрес
базовый адрес
+
базовый адрес
23
0
физический адрес
Рис. 7 : трансляция адресов в защищённом режиме процессора 80286
Лекция 8
14 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Поля дескриптора сегмента (8 байт)
Поле
Base
G
Limit
Бит
32
1
Название
Granularity
20
S
1
System
DPL
P
2
1
Descriptor Privilege Level
Присутствие
Type
4
Примечание
линейный адрес начала
0 ⇒ размер в байтах, иначе
в 4 096-байтных блоках.
размер (1 байт . . . 1 Мбайт или
4 Кбайт . . . 4 Гбайт)
0 ⇒ хранит системные данные
(LDT, . . . ) иначе обычный сегмент
кода/данных.
Уровень привилегий.
1 ⇒ сегмент присутствует (в Linux
всегда).
тип сегмента
Таблица 3 : некоторые поля дескриптора сегмента процессора 80286
Лекция 8
15 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Типы сегментов
Тип
кода
данных
Таблица
GDT, LDT
GDT, LDT
S
состояния задачи (TSS)
GDT
0
локальной таблицы дескрипторов
GDT
0
1
1
Хранение
сегмент кода
сегмент данных или стека
сегмент с процессорными регистрами.
сегмент с LDT.
Таблица 4 : некоторые виды сегментов процессора 80286
Лекция 8
16 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Работа блока сегментации
Алгоритм
1 TI = 0 ⇒ базовый линейный адрес из GDTR, иначе — из LDTR.
2 адрес дескриптора сегмента = базовый линейный адрес + 8 × индекс;
3 max {CPL, RPL} > DPL ⇒ General Protection Fault (GP);
4 Из дескриптора сегмента выбирается поле «базовый адрес» (Base);
5 линейный адрес = базовый адрес + смещение.
Лекция 8
17 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Использование сегментации в ОС
Linux
Для каждого процессора существует GDT, содержащая 4 дескриптора
сегментов (Base = 0, G = 1, Limit = 0xFFFFF = 220 − 1):
Для всех процессов ядра:
код ядра;
данные ядра;
Для всех процессов пользователя:
код пользователя;
данные пользователя.
+ некоторые специфические сегменты.
Для каждого процесса создаётся LDT по умолчанию ядром. Некоторые
приложения обращаются к нему (Wine, . . . )
Лекция 8
18 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реальный режим
Защищённый режим
Реализация в архитектуре 80286
Использование в ОС
Использование сегментации в ОС (окончание)
Windows 3.1
1 GDT, 1 LDT для системной виртуальной машины и по 1 LDT для
каждой ВМ для DOS-приложения (режим V86).
Сегменты кода, данных приложений могут помечаться как
фиксированные, перемещаемые, перемещаемые + удаляемые, . . .
Windows NT
Модель flat: 1 сегмент для кода и данных для приложения, сегментные
регистры не должны меняться им.
Лекция 8
19 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Трансляция адресов (80386)
логический адрес
блок сегментации
линейный адрес
блок управления страницами
физический адрес
Рис. 8 : трансляция адресов в защищённом режиме процессора 80386
Лекция 8
20 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Трансляция адресов (продолжение)
31
22 21
12 11
страница
таблица
0
смещение
адрес
адрес
адрес
адрес
адрес
+
адрес
адрес
адрес
31
0
физический адрес
Рис. 9 : трансляция адресов в защищённом режиме процессора 80386
Лекция 8
21 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Поля таблицы страниц (4 байт)
Поле
Present
адрес
Accessed
Бит
1
20
1
Dirty
1
Read/Write
User/Supervisor
Page Size
1
1
1
Примечание
флаг присутствия
20 старших бит.
устанавливается, когда блок управления адресует
соответствующий кадр
(для таблицы страниц) устанавливается, когда выполняется запись в кадр
права доступа на запись.
уровень привилегий ( = 3 или < 3).
(для каталога страниц) = 1 ⇒ размер страницы =
4 Мбайт
Таблица 5 : некоторые поля элемента таблицы страниц процессора 80386
Лекция 8
22 / 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
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Буфер ассоциативной трансляции
Определение
Буфер ассоциативной трансляции: (translation lookaside buffer, TLB) — кэш,
отображающий (недавно вычисленные) линейные адреса
в физические.
Лекция 8
24 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Расширение размера страниц
31
22 21
0
таблица
смещение
Рис. 10 : формат смещения в режиме адресации расширенных страниц процессора
Pentium
Определение
Режим расширения размера страниц: (Page size extension, PSE) — режим,
включаемый полем PSE регистра CR4 (поле «Page size»
элемента таблицы = 1).
Лекция 8
25 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Механизм расширения физических адресов
31 30 29
pdpt
21 20
таблица
12 11
страница
0
смещение
Рис. 11 : формат смещения в режиме расширения физических адресов процессора
Pentium Pro
Определение
Механизм расширения физических адресов: (Physical Address Extension,
PAE) — режим, включаемый полем PAE регистра CR4. Отличия:
поле «адрес» элемента таблицы увеличивается с 32
до 36 бит ⇒ элемент таблицы увеличивается с 4 до 8 байт;
количество элементов таблиц уменьшается с 1 024 до 512.
Лекция 8
26 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
PML4 (9)
PDPT (9)
каталог (9)
таблица (9)
0
12
11
21
20
30
29
47
39
38
Расширение размера страниц
смещение (12)
Рис. 12 : формат смещения в режиме long mode архитектуры AMD64 (x86-64)
Лекция 8
27 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Использование страничной адресации в Windows 3.1
Windows 3.1
Страничный (32-битный) режим адресации используется только
виртуальными драйверами, работающими в 0-м кольце защиты.
Лекция 8
28 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Компоненты диспетчера памяти
Функциональность ntoskrnl.exe
Сервисы управления виртуальной памятью (приложения, драйверы
устройств режима ядра).
Обработчики ловушек трансляции недействительных адресов
и нарушения прав доступа.
Системные потоки режима ядра.
Лекция 8
29 / 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
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Состояния страниц
Состояния страниц в диспетчере памяти
Свободная (free).
Зарезервированная (reserved).
Переданная (committed).
Последовательность работы со страницами
1 Резервирование (reserving).
2 Передача (committing).
3 Возврат (decommitting).
4 Освобождение (freeing).
Лекция 8
31 / 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
flAllocationType
MEM_RESERVE
MEM_COMMIT
MEM_RESERVE | MEM_COMMIT
MEM_LARGE_PAGES
MEM_RESERVE | MEM_PHYSICAL
...
Таблица 6 : возможные значения
флагов параметров функции
Лекция 8
32 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Освобождение памяти
Windows API VirtualFree()
BOOL WINAPI VirtualFree(
__in
LPVOID lpvAddress,
__in
SIZE_T dwSize,
__in
);
DWORD
dwFreeType
Лекция 8
dwFreeType
MEM_DECOMMIT
MEM_RELEASE
Ограничения
—
dwSize == 0
Таблица 7 : возможные значения
параметров функции
33 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Адресное пространство процесса в 32-битном режиме
2 ГБайт
hhh
h hhhhhhhh
hhhh
h
hhhh
h
64 КБайт
2
ГБайт
hhhh − 128 КБайт
h hh hhhhh
hhhh
h
hhhh
h











Ядро















hhhh1 ГБайт
h hh hhhhh
hhhh
h
hhhh
h





Ядро




64 КБайт
3 ГБайт − 128 КБайт
Процесс
hhh
h hhhhhhhh
hhhh
h
hhhh
h




64 КБайт











Процесс










64 КБайт
Рис. 13 : адресное пространство процесса в Windows
Лекция 8
34 / 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
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Сеанс
Определения
Сеанс: (session) — средство удалённой работы при помощи служб
терминалов (Terminal Services) и быстрого переключения
пользователей.
Оконная станция: (window station) — объект, содержащий буфер обмена,
таблицу атомов один или несколько рабочих столов и имеющий
атрибуты безопасности и права доступа.
Данные сеанса
Оконная станция;
Пространство имён;
...
Лекция 8
36 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Системные пулы памяти
Определения
Пул неподкачиваемой памяти: (nonpaged pool) — диапазон системных
виртуальных адресов, присутствующих и доступных всё время
(⇒ без ошибок страниц).
Пул подкачиваемой памяти: (paged pool) — диапазон системных виртуальных
адресов, которые система может выгружать в страничный
файл/загружать из файла.
Лекция 8
37 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Структура виртуального адресного пространства
Виды данных в адресном пространстве
Принадлежащие процессу (код/данные);
Принадлежащие сеансу (код/данные);
Принадлежащие системе (код/данные);
Код ядра;
Драйверы;
Таблицы страниц процесса;
Области системной подкачиваемой/неподкачиваемой памяти.
...
Лекция 8
38 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Использование PSE
Возможности использования больших страниц
Базовые образы ОС (ntoskrnl.exe и hal.dll);
Базовые системные данные (структуры, описывающие состояния
страничных кадров, . . . );
Запросы большого ввода/вывода;
Для приложений закрытые области памяти, выделенные VirtualAlloc()
с использованием флага MEM_LARGE_PAGE;
Другие заданные драйверы при настройке в реестре.
Лекция 8
39 / 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
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Адресное пространство процесса в 32-битном режиме
1 ГБайт
3 ГБайт
























Ядро
Процесс
3 ГБайт




























Ядро
Процесс












Рис. 14 : адресное пространство процесса в Linux
Лекция 8
41 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Особенности распределения адресного пространства
Организация виртуального адресного пространства процессов
Ядро сохраняет регистр cr3 в дескрипторе процесса ⇒ каждый процесс
имеет собственный глобальный каталог таблиц.
Первые 3 ГБайт адресного пространства доступны для процессов,
различны.
Последний 1 ГБайт доступен в режиме ядра, отображается в одну
область памяти.
Потоки ядра работают в 3–4 Гбайтном диапазоне верхних адресов,
не ссылаясь ниже ⇒ неважно, какой таблицей страниц они пользуются.
Для избежания лишних сбросов TLB-буферов используется таблица
дескрипторов последнего процесса.
Лекция 8
42 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Управление динамической памятью
Виды оперативной памяти
постоянно выделенная ядру;
динамическая.
Запросы на выделение памяти со стороны ядра
Удовлетворяются немедленно:
ядро является приоритетным компонентом;
ядро доверяет самому себе.
Запросы на выделение памяти со стороны пользовательского процесса
процессу сразу выделяется диапазон ячеек, само выделение
откладывается до момента обращения (лениво);
код процесса может содержать ошибки.
Лекция 8
43 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Исключения при обращении к памяти
Причины
Адреса, указанные вследствие программных ошибок;
Адреса принадлежат отсутствующей странице, хотя принадлежат
адресному пространству процесса ⇒ соответствующий кадр должен быть
выделен.
Лекция 8
44 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Обработка исключения обращения к странице
если адрес ∈ адресному пространству процесса, то
если вид доступа ∼ правам доступа к области, то
допустимое обращение, выделить страничный кадр;
иначе
недопустимое обращение, послать SIGSEGV;
иначе
если исключение в режиме пользователя, то
недопустимое обращение, послать SIGSEGV;
иначе
ошибка ядра, уничтожить процесс;
Рис. 15 : упрощённый алгоритм обработки исключения обращения к странице
Лекция 8
45 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
«Жадное» выделение памяти
Старая реализация функции fork()
1 Выделение страничных кадров под таблицы страниц потомка.
2 Выделение страничных кадров под страницы потомка.
3 Инициализация таблиц страниц потомка
4 Копирование страниц родителя в страницы потомка.
Лекция 8
46 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
«Ленивое» выделение памяти
Особенности реализации функции fork()
Страничные кадры не копируются, а используются совместно родителем
и потомком;
Страничные кадры помечаются недоступными для записи;
Если родитель или потомок попытается записать в общую страницу,
возникнет исключение, ядро создаст копию, оригинал останется
доступным только для чтения.
Если потом произойдёт попытка записи в исходную страницу, ядро
проверит, является ли процесс единственным владельцем её (поле
дескриптора страницы _count == 0). Да ⇒ пометит её как доступную на
запись.
_count == -1
⇒ страница считается свободной.
Лекция 8
47 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Выделение страниц по требованию
Пример (проверка выделения памяти)
int main()
{
try
{
char *pchData = new char[100000000];
// . . .
}
catch (const std::bad_alloc &)
{
// . . .
}
}
Лекция 8
48 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Утилизация страничных кадров
Особенности работы с памятью
ОС Linux не делает проверок размеров доступной памяти ⇒ кеши диска
и т. д. растут неограниченно.
Определение
Алгоритм утилизации страничных кадров: (Page Frame Reclaiming Algorithm,
PFRA) — выбирает занятые страничные кадры для выгрузки
на диск.
Лекция 8
49 / 50
Начало
Фиксированное распределение
Сегментная организация
Страничная организация
Реализация в архитектуре x86
Использование в Windows 3.1
Использование в Windows NT
Использование в Linux
Выгрузка страниц
Виды страниц
Неутилизируемые (динамически выделенные ядру, временно
заблокированные, . . . )
Выгружаемые (анонимные в АП режима пользователя)
Синхронизируемые (отображение файлов в режиме пользователя,
дисковые кэши, . . . )
На выброс (неиспользуемые, в кэшах памяти).
Случаи утилизации
Дефицит памяти в системе;
Гибернация;
Периодическая утилизация.
Лекция 8
50 / 50
Download