Материал: ОСиС. Лабораторная работа 10

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рисунок 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

Источник: https://studfile.net/preview/16437652/