📄 scr.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 + -