У меня есть проект, в котором меня просят разработать приложение для моделирования того, как выполняются различные алгоритмы замены страниц (с изменением размера рабочего набора и периода стабильности). Мои результаты:
- Вертикальная ось: ошибки страницы
- Горизонтальная ось: рабочий размер набора
- Ось глубины: стабильный период
Являются ли мои результаты разумными? Я ожидал, что 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
), почему это может быть? Является ли объяснение, что по мере того, как стабильность становится низкой, ошибки страниц приближаются к максимуму, поэтому не имеет значения, каков размер рабочего набора?