У меня есть проект, в котором меня просят разработать приложение для моделирования того, как выполняются различные алгоритмы замены страниц (с изменением размера рабочего набора и периода стабильности). Мои результаты:




- Вертикальная ось: ошибки страницы
- Горизонтальная ось: рабочий размер набора
- Ось глубины: стабильный период
Являются ли мои результаты разумными? Я ожидал, что LRU получит лучшие результаты, чем FIFO. Здесь они примерно одинаковы.
Для случайного периода стабильности и рабочего размера набора, похоже, не влияет на производительность вообще? Я ожидал подобных графиков, как FIFO и LRU - худшая производительность? Если эталонная строка является очень стабильной (маленькие ветки) и имеет небольшой размер рабочего набора, она должна по-прежнему иметь меньше ошибок страниц, что приложение со многими веткими и большой размер рабочего набора?
Дополнительная информация
My Python Code | Вопрос проекта
- Длина опорной строки (RS): 200000
- Размер виртуальной памяти (P): 1000
- Размер основной памяти (F): 100
- количество ссылок на временную страницу (м): 100
- Размер рабочего набора (e): 2 - 100
- Стабильность (t): 0 - 1
Размер рабочего набора (e) и стабильный период (t) влияет на формирование ссылочной строки.
|-----------|--------|------------------------------------|
0 p p+e P-1
Итак, предположим, что виртуальная память размером P. Чтобы создать опорные строки, используется следующий алгоритм:
- Повторяйте, пока не будет создана ссылочная строка
- выберите
mчисла в [p, p + e].mимитирует или ссылается на количество страниц, на которые ссылается страница - выберите случайное число, 0 <= r < 1
- если r < T
- создать новый p
- else (++ p)% P
- выберите
ОБНОВЛЕНИЕ (В ответ на ответ @MrGomez)
Однако вспомните, как вы высевали свои входные данные: используя random.random, что дает вам равномерное распределение данных с контролируемым уровень энтропии. Из-за этого все значения одинаково вероятны и потому, что вы построили это в пространстве с плавающей запятой, рецидивы очень маловероятны.
Я использую random, но он не является полностью случайным, ссылки генерируются с некоторой локальностью, хотя использование параметров рабочего набора и номера страниц, на которые ссылаются параметры?
Я попытался увеличить относительный numPageReferenced с numFrames в надежде, что он будет ссылаться на страницу, находящуюся в настоящее время в памяти больше, таким образом показывая преимущества производительности LRU над FIFO, но это не дало мне явного результата. Просто FYI, я попробовал одно и то же приложение со следующими параметрами (соотношение Pages/Frames все равно остается неизменным, я уменьшил размер данных, чтобы ускорить работу).
--numReferences 1000 --numPages 100 --numFrames 10 --numPageReferenced 20
Результат

Все еще не такая большая разница. Могу ли я сказать, если я увеличиваю numPageReferenced по сравнению с numFrames, LRU должен иметь лучшую производительность, поскольку он ссылается на страницы в памяти больше? Или, может быть, я что-то неправильно понимаю?
Для случайного я думаю по строкам:
- Предположим, что высокая стабильность и небольшой рабочий набор. Это означает, что ссылки на страницы, скорее всего, будут в памяти. Итак, потребность в алгоритме замены страницы ниже?
Хм, может, мне нужно подумать об этом больше:)
ОБНОВЛЕНИЕ: менее очевидная ошибка при более низкой стабильности

Здесь я пытаюсь показать, что сбой, поскольку рабочий размер набора превышает количество кадров (100) в памяти. Тем не менее, уведомление об изнашивании кажется менее очевидным при более низкой стабильности (высокий t), почему это может быть? Является ли объяснение, что по мере того, как стабильность становится низкой, ошибки страниц приближаются к максимуму, поэтому не имеет значения, каков размер рабочего набора?