Реалізація сторінкової організації пам'яті

Реклама: http://blsinter.ru косметика для готелей оптом.

Віртуальної пам'яті потрібно диск для зберігання всієї програми і всіх даних. Копію програми, збережену на диску, зручніше розглядати як оригінал, а фрагменти, регулярно записуються в основну пам'ять, - як копії. Природно, оригінал в такому випадку повинен оперативно оновлюватися. Коли зміни вносяться в копію програми в основній пам'яті, вони в кінцевому підсумку повинні бути відображені в оригіналі.

ВАП розбивається на ряд сторінок рівного розміру, зазвичай від 512 байт до 64 Кбайт, хоча іноді зустрічаються сторінки по 4 Мбайт. Розмір сторінки завжди повинен бути ступенем двійки. Фізичне адресний простір теж розбивається на частини рівного розміру таким чином, щоб кожна така частина основної пам'яті вміщала рівно одну сторінку. Ці частини основної пам'яті називаються сторінковими кадрами. На рис. 6.2 основна пам'ять містить тільки один сторінковий кадр. На практиці зазвичай є кілька тисяч сторінкових кадрів.

На рис. 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 сторінкових кадрів

Сторінкова організація пам'яті || Зміст || Виклик сторінок на вимогу і робоче безліч