Реалізація сторінкової організації пам'яті
Віртуальної пам'яті потрібно диск для зберігання всієї програми і всіх даних. Копію програми, збережену на диску, зручніше розглядати як оригінал, а фрагменти, регулярно записуються в основну пам'ять, - як копії. Природно, оригінал в такому випадку повинен оперативно оновлюватися. Коли зміни вносяться в копію програми в основній пам'яті, вони в кінцевому підсумку повинні бути відображені в оригіналі.
На рис. 6.3, а показаний один з можливих варіантів поділу перших 64 Кбайт віртуального адресного простору на сторінки по 4 Кбайт. Адреса може бути байтом, а може бути словом, наприклад, в комп'ютері, в якому послідовно розташовані слова мають послідовні адреси. Віртуальну пам'ять, зображену на рис. 6.3, можна реалізувати за допомогою таблиці сторінок, в якій кількість елементів дорівнює кількості сторінок в віртуальному адресному просторі. Тут для простоти ми показали тільки перші 16 елементів. Коли програма намагається звернутися до слова з перших 64 Кбайт віртуальної пам'яті, щоб викликати команду або дані або щоб зберегти дані, спочатку вона генерує віртуальний адресу від 0 до 65 532 (передбачається, що адреси слів повинні ділитися на 4). Для цього можуть використовуватися будь-які стандартні механізми адресації, в тому числі індексування і непряма адресація.
На малюнку 6.3, б зображена фізична пам'ять, що складається з восьми сторінкових кадрів по 4 Кбайт. Цю пам'ять можна обмежити до 32 К, оскільки: 1) це вся пам'ять машини (для процесора, вбудованого в пральну машину або мікрохвильову піч, цього достатньо) або 2) решта пам'яті зайнята іншими програмами.
Мал. 6.3. Перші 64 Кбайт віртуального адресного простору розділені на 16 сторінок по 4 Кбайт кожна (а); 32 Кбайт основної пам'яті розділені на 8 сторінкових кадрів по 4 Кбайт кожен (б)
А тепер подивимося, як 32-розрядний віртуальний адреса можна відобразити на фізичну адресу основної пам'яті. Зрештою, пам'ять сприймає тільки реальні, а не віртуальні адреси, тому таке відображення має бути зроблено. Кожен комп'ютер з віртуальною пам'яттю містить пристрій для відображення віртуальних адрес на фізичні. Це пристрій називається диспетчером пам'яті (Memory Management Unit, MMU). Він може знаходитися на мікросхемі процесора або на окремій мікросхемі поруч з процесором. У нашому прикладі диспетчер пам'яті відображає 32-розрядний віртуальний адреса на 15-розрядний фізичну адресу, тому йому потрібно 32-розрядний вхідний регістр і 15-розрядний вихідний.
Щоб зрозуміти, як працює диспетчер пам'яті, розглянемо приклад на рис. 6.4. Коли в диспетчер пам'яті надходить 32-розрядний віртуальний адреса, він розділяє цю адресу на 20-розрядний номер віртуальної сторінки і 12-розрядний зсув усередині цієї сторінки (оскільки сторінки в нашому прикладі мають розмір 4 Кбайт). Номер віртуальної сторінки використовується в якості індексу в таблиці сторінок для знаходження потрібної сторінки. На рис. 6.4 номер віртуальної сторінки дорівнює 3, тому в таблиці вибирається елемент 3.
Спочатку диспетчер пам'яті перевіряє, чи знаходиться потрібна сторінка в поточний момент в пам'яті. Оскільки у нас є 220 віртуальних сторінок і всього 8 сторінкових кадрів, не всі віртуальні сторінки можуть перебувати в пам'яті одночасно. Диспетчер пам'яті перевіряє біт присутності в даному елементі таблиці сторінок. У нашому прикладі цей біт дорівнює 1. Це означає, що сторінка в даний момент знаходиться в пам'яті.
Мал. 6.4. Формування адреси основної пам'яті з адреси віртуальної пам'яті
Далі з обраного елемента таблиці потрібно взяти значення сторінкового кадру (в нашому прикладі - 6) і скопіювати його в старші 3 біта 15-розрядної вихідного регістра. Потрібно саме 3 біта, тому що у фізичній пам'яті знаходиться 8 сторінкових кадрів. Паралельно з цією операцією молодші 12 біт віртуального адреси (поле зміщення сторінки) копіюються в молодші 12 біт вихідного регістра. Потім отриманий 15-розрядний адреса відправляється в кеш-пам'ять або основну пам'ять для пошуку.
На рис. 6.5 показаний можливий варіант відображення віртуальних сторінок на фізичні сторінкові кадри. Віртуальна сторінка 0 знаходиться в сторінковому кадрі 1. Віртуальна сторінка 1 знаходиться в сторінковому кадрі 0. Віртуальної сторінки 2 немає в основний пам'яті. Віртуальна сторінка 3 знаходиться в сторінковому кадрі 2. Віртуальної сторінки 4 немає в основний пам'яті. Віртуальна сторінка 5 знаходиться в сторінковому кадрі 6 і т. Д.
Мал. 6.5. Можливе відображення перших 16 віртуальних сторінок в основну пам'ять, яка містить 8 сторінкових кадрів
⇐ Сторінкова організація пам'яті || Зміст || Виклик сторінок на вимогу і робоче безліч ⇒