A5. Заміщення сторінок
У модулі 12 алгоритми заміщення описані словами. Тут вони перетворяться на числа, зокрема на один результат, який суперечить здоровому глузду: для FIFO більше пам’яті може означати більше сторінкових винятків.
Відтворити аномалію Беладі власними руками значно переконливіше, ніж прочитати про неї.
Що має вийти
Section titled “Що має вийти”./pagesim --frames 3 --algo fifo trace.txt./pagesim --frames 3 --algo all trace.txtВхід — траса звернень: номери сторінок, по одному на рядок.
Порожні рядки й рядки з # ігноруються.
Вихід — рядок на алгоритм: назва, кількість винятків, кількість влучань, розділені пробілами. Автоперевірка спирається саме на цей формат.
fifo 9 3lru 10 2clock 10 2optimal 7 5-
FIFO та оптимальний.
Оптимальний потребує знання майбутнього — і саме тому реалізується легко: уся траса вже перед вами. Він потрібен як нижня межа, з якою порівнюється решта.
-
LRU.
Точний LRU тут реалізувати можна, бо ви симулятор, а не апаратура. Зверніть увагу, скільки роботи це вимагає на кожне звернення — і чому в реальних системах так не роблять.
-
Годинниковий алгоритм.
Кільце сторінок, біт звернення, стрілка. Порівняйте його результат з точним LRU: різниця має бути невеликою. Саме цей факт і виправдовує заміну LRU наближенням.
-
Аномалія Беладі.
Знайдіть трасу, на якій FIFO з чотирма фреймами дає більше винятків, ніж з трьома. Класична:
1 2 3 4 1 2 5 1 2 3 4 5.Перевірте, що на LRU і на оптимальному аномалії немає — це і є практична різниця між стековими алгоритмами й нестековими.
-
Робочий набір.
Побудуйте графік «кількість фреймів → винятки» для кожного алгоритму. На реальному трасі буде помітне коліно: після певної точки додавання пам’яті майже нічого не дає. Це і є розмір робочого набору.
-
Справжня траса.
Згенеруйте трасу з реальної програми, а не випадкову. Найпростіше —
valgrind --tool=lackey --trace-mem=yesі взяти старші біти адрес. Порівняйте результати з випадковою трасою: різниця показує, наскільки все тримається на локальності (модуль 2).
Автоперевірка
Section titled “Автоперевірка”Перевірка лежить в архіві з файлами курсу, і команди нижче виконуються з розпакованого каталогу.
cd labs/a5-page-replacement./check.sh ./pagesimПеревірка ганяє траси з наперед відомими відповідями, включно з класичною послідовністю Беладі — і окремо контролює, що на LRU аномалія не відтворюється.
Часті помилки
Section titled “Часті помилки”Перше завантаження не рахується винятком. Рахується. Холодні промахи теж є винятками, і без них ваші числа не збіжаться з жодним підручником.
Годинниковий не скидає біт. Тоді він вироджується у FIFO. Стрілка мусить скидати біт у тих сторінок, які пропускає.
Оптимальний дивиться на все майбутнє. Достатньо знайти найближче наступне звернення для кожної сторінки, що зараз у кадрах.
Аномалія «не відтворюється». Перевірте, чи у вас справді FIFO, а чи ви випадково реалізували LRU. Якщо звернення до вже завантаженої сторінки пересуває її в кінець черги, це вже не FIFO.
Далі, якщо цікаво
Section titled “Далі, якщо цікаво”Додати другий шанс із двома бітами (звернення + зміни), як у Linux, і подивитися, наскільки він ближчий до оптимального за звичайний годинниковий.