SkillGridИзучай computer science на практике

Память и виртуальные адреса

Почему каждый процесс видит своё адресное пространство и как ОС делает эту иллюзию дешёвой.

13 мин · 38 XP

Если бы процессы работали с физическими адресами напрямую, любая ошибка могла бы затереть данные другой программы, а каждая программа должна была бы знать, куда её загрузили. Ни то, ни другое недопустимо.

Виртуальная память делит адресное пространство на страницы фиксированного размера и отображает их на физические фреймы через таблицу страниц. MMU процессора делает преобразование при каждом обращении, поэтому программа никогда не видит реальных адресов.

CPUMMURAMDisk (swap)read virtual address 0x2A14split into page + offsetlook up page table, find framereturn the bytepage not presentpage fault, load the pagewrite frame into RAMretry the instruction

Страницы, к которым давно не обращались, можно выгрузить на диск и снять отображение. Когда они понадобятся снова, страничное прерывание вернёт их обратно. Так программа может использовать больше памяти, чем есть физически — но не бесплатно.

/* Виртуальный адрес — это НЕ адрес в микросхеме памяти.
 * MMU переводит его в физический на каждом обращении. */
#define PAGE_SHIFT 12          /* страница = 4 КиБ */

int vpn  = vaddr >> PAGE_SHIFT;   /* номер виртуальной страницы */
int off  = vaddr & 0xFFF;         /* смещение внутри страницы   */
int pfn  = page_table[vpn].frame; /* номер физического фрейма   */
int paddr = (pfn << PAGE_SHIFT) | off;

Практика

  1. Почему два процесса могут использовать адрес 0x1000 и не мешать друг другу?

    Подсказки
    • Адрес, который видит программа, — не тот адрес, который видит микросхема памяти.
    • Каждый процесс получает собственную таблицу преобразования.

    12 XP

  2. Расставь шаги обработки страничного прерывания по порядку.

    Подсказки
    • Аппаратура не может исправить это сама — ей придётся обратиться к ядру.
    • Инструкция, вызвавшая прерывание, не теряется — она выполнится снова.

    14 XP

  3. В машине 8 ГБ RAM, а программе нужно 20 ГБ. Объясни, что произойдёт и почему это всё же может работать.

    Подсказки
    • Не вся программа нужна в один и тот же момент.
    • У машины есть место помедленнее, чтобы положить остальное.

    14 XP