Рисунок 4 — Работа алгоритма ReverseLRU при трех страницах Проверим LRU (рис. 5).
Рисунок 5 — Работа алгоритма LRU при трех страницах Проверим LFU (рис. 6).
Рисунок 6 — Работа алгоритма LFU при трех страницах
11
Попробуем теперь проверять работу на ссылочной строке «1 2 3 4 1 2 5 1 2 3 4 5» и при числе страниц, равным 4.
Проверим FIFO (рис. 7).
Рисунок 7 — Работа алгоритма FIFO при четырех страницах Проверим Clock (рис. 8).
Рисунок 8 — Работа алгоритма Clock при четырех страницах Проверим ReverseLRU (рис. 9).
12
Рисунок 9 — Работа алгоритма ReverseLRU при четырех страницах Проверим LRU (рис. 10).
Рисунок 10 — Работа алгоритма LRU при четырех страницах Проверим LFU (рис. 11).
Рисунок 11 — Работа алгоритма LFU при четырех страницах
13
По нажатию на кнопку «Информация» можно узнать информацию о программе (рис. 12).
Рисунок 12 — Информация о программе Если пользователь некорректно ввел данные в ссылочную строку и
нажал на кнопку «Начать», отображается сообщение об ошибке (рис. 13).
Рисунок 13 — Информация об ошибке чтения Код программы
Таблица 1 — Файл Paging.pro
#-------------------------------------------------
#
# Project created by QtCreator 2020-11-12T20:43:06
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Paging
TEMPLATE = app
#The following define makes your compiler emit warnings if you use
#any feature of Qt which as been marked as deprecated (the exact warnings
#depend on your compiler). Please consult the documentation of the
#deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS
#You can also make your code fail to compile if you use deprecated APIs.
#In order to do so, uncomment the following line.
#You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 |
# disables all the APIs |
||
deprecated |
before Qt |
6.0.0 |
|
SOURCES += |
main.cpp\ |
|
|
mainwindow.cpp \ fifo_paging.cpp \ lru_paging.cpp \ clock_paging.cpp \ lfu_paging.cpp \ reverselru_paging.cpp
14
HEADERS += mainwindow.h \ abstract_paging.h \ fifo_paging.h \ lru_paging.h \ clock_paging.h \ lfu_paging.h \ reverselru_paging.h
FORMS += mainwindow.ui
Таблица 2 — Файл abstract_paging.h
#ifndef ABSTRACT_PAGING_H #define ABSTRACT_PAGING_H
#include <list> #include <stdexcept>
// Абстрактный класс замещения страниц class AbstractPaging {
public:
// Конструктор с параметром
AbstractPaging(int pageCount) : mPageCount(pageCount) { if (pageCount <= 0)
throw std::invalid_argument("FrameCount <= 0");
}
//Передача на рассмотрение страницы page virtual void refer(int page) = 0;
//Получение списка страниц
virtual const std::list<int> getList() = 0; // Получение числа отказов страниц
virtual int getPageFaultCount() { return mPageFault; }
//Очистка данных, возврат к начальному состоянию virtual void clear() = 0;
//Виртуальный деструктор (обязательно)
virtual ~AbstractPaging() {}
protected:
//Максимальное число страниц в памяти int mPageCount;
//Текущее число отказов страниц
int mPageFault = 0;
};
#endif // ABSTRACT_PAGING_H
Таблица 3 — Файл clock_paging.h
#ifndef CLOCK_PAGING_H #define CLOCK_PAGING_H
#include "abstract_paging.h" #include <vector>
// Конкретный класс замещения страниц Clock class ClockPaging : public AbstractPaging {
public:
//Конструктор с параметром ClockPaging(int pageCount);
//Передача на рассмотрение страницы page void refer(int page) override;
//Получение списка страниц
const std::list<int> getList() override;
// Очистка данных, возврат к начальному состоянию
15