⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scr.cpp

📁 页面置换算法代码
💻 CPP
字号:
#include "scr.h"

//谓词
class Check_page
{
private:
	int pid;
public:
	Check_page(tmpid):pid(tmpid){}
	bool operator() (Mempage &tmpage)const
	{return tmpage.mem_page == pid;}
};

void Scr_page::do_page(int pid)
{
	total_count++;
	find_page(pid);
	if (pageptr == mem_page.end())
	{
		fault_count++;
		rm_page();
		add_page(pid);
	}
	else
	{
		(*pageptr).ref_bit = 1;
	}
}

void print_page(Mempage pid)
{
	cout << pid.mem_page << "\t";
}

void Scr_page::show_page()
{
	cout << "There are the pages in the memory:" << endl;
	for_each(mem_page.begin(), mem_page.end(), print_page);
	cout << endl <<"The page fault rate is " << 100*(float)fault_count/total_count << "%" << endl;
}

void Scr_page::reset_bit()
{
	for (pageptr = mem_page.begin(); pageptr != mem_page.end(); pageptr++)
		(*pageptr).ref_bit = 0;
}

void Scr_page::add_page(int pid)
{
	Mempage temp = {pid, 0};
	mem_page.push_back(temp);
}

void Scr_page::rm_page()
{
	if ((int)mem_page.size() < max_page)
		return;
	for (pageptr = mem_page.begin(); pageptr != mem_page.end(); pageptr++)
	{
		if ( (*pageptr).ref_bit == 0)
		{
			mem_page.erase(pageptr);
			reset_bit();
			return;
		}
	}
	//如果都已经访问过,采用FIFO算法
	mem_page.pop_front();
	reset_bit();
	return;
}


void Scr_page::find_page(int pid)
{
	pageptr = find_if(mem_page.begin(), mem_page.end(), Check_page(pid));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -