操作系统实验(四)——页面置换算法模拟-创新互联
一、OPT 代码一个班(20信安)的同学搜到这篇别直接copy我的,代码仅供参考
创新互联公司2013年开创至今,先为牧野等服务建站,牧野等地企业,进行企业商务咨询服务。为牧野企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
#includeusing namespace std;
listmain_store= {};
listback_store = {1,4,3,1,2,5,1,4,2,1,4,5};
int change_time = 0;// 记录替换次数
int find(list::iterator begin,list::iterator end,int value)
// 寻找list列表中value首次出现的下标,未找到则返回列表长度,即size()
// 这里未找到设置为size(),就是将不再出现的page的权值设置为了大,优先替换
{int i=0;
for(list::iterator iter = begin; iter!=end; iter++,i++)
{if(*iter == value)
{return i;
}
}
return i;
}
void OPT(int new_page)
// 最佳页面置换算法
// 对整型数new_page进行替换
{auto change_page_iter = main_store.begin();
// 如果主存中有page,则无需替换
if(count(main_store.begin(), main_store.end(), new_page)) return;
// 找到主存中出现位置最靠后的page(change_pagh_iter)
for(auto i=main_store.begin(); i!=main_store.end(); i++)
{if(find(back_store.begin(), back_store.end(), *i) >find(back_store.begin(), back_store.end(), *change_page_iter))
{change_page_iter = i;
}
}
// 替换
change_time++;
*change_page_iter = new_page;
}
void printList(lista)
// 打印list列表
{for(auto iter=a.begin(); iter!=a.end(); iter++)
{cout<< *iter<< " ";
}
cout<< endl;
}
int main()
{while(back_store.size())
{int new_page = back_store.front();
back_store.pop_front();
// 检测主存是否有空闲空间
if(main_store.size()<3)
{main_store.push_back(new_page);
printList(main_store);
}
else
{OPT(new_page);
printList(main_store);
}
}
cout<< "页面置换次数:"<< change_time;
}
运行截图二、FIFO
代码#includeusing namespace std;
listmain_store= {};
listback_store = {1,4,3,1,2,5,1,4,2,1,4,5};
int change_time = 0;// 记录替换次数
int ptr=0;
int find(list::iterator begin,list::iterator end,int value)
// 寻找list列表中value首次出现的下标,未找到则返回列表长度,即size()
{int i=0;
for(list::iterator iter = begin; iter!=end; iter++,i++)
{if(*iter == value)
{return i;
}
}
return i;
}
void FIFO(int new_page)
// 先进先出算法
// 对整型数new_page进行替换
{list::iterator change_page_iter = main_store.begin();
// 如果主存中有page,则无需替换
if(count(main_store.begin(), main_store.end(), new_page)) return;
// 找到主存中位置i的迭代器change_pagh_iter
for(int i=0; ichange_page_iter++;
}
// 替换
change_time++;
*change_page_iter = new_page;
ptr = (ptr+1)%main_store.size();
}
void printList(lista)
// 打印list列表
{for(auto iter=a.begin(); iter!=a.end(); iter++)
{cout<< *iter<< " ";
}
cout<< endl;
}
int main()
{while(back_store.size())
{int new_page = back_store.front();
back_store.pop_front();
// 检测主存是否有空闲空间
if(main_store.size()<3)
{main_store.push_back(new_page);
printList(main_store);
}
else
{FIFO(new_page);
printList(main_store);
}
}
cout<< "页面置换次数:"<< change_time;
}
运行截图三、LRU
代码#includeusing namespace std;
listmain_store= {};
listback_store = {1,4,3,1,2,5,1,4,2,1,4,5};
int change_time = 0;// 记录替换次数
int clt=0;
mapm;
int find(list::iterator begin,list::iterator end,int value)
// 寻找list列表中value首次出现的下标,未找到则返回列表长度,即size()
// 这里未找到设置为size(),就是将不再出现的page的权值设置为了大,优先替换
{int i=0;
for(list::iterator iter = begin; iter!=end; iter++,i++)
{if(*iter == value)
{return i;
}
}
return i;
}
void LRU(int new_page)
// 最近最久未使用页面置换算法
// 对整型数new_page进行替换
{auto change_page_iter = main_store.begin();
// 如果主存中有page,则无需替换
if(count(main_store.begin(), main_store.end(), new_page)) return;
// 找到主存中出现位置最靠后的page(change_pagh_iter)
for(auto i=main_store.begin(); i!=main_store.end(); i++)
{if(m[*i]< m[*change_page_iter])
{change_page_iter = i;
}
}
// 替换
change_time++;
*change_page_iter = new_page;
}
void printList(lista)
// 打印list列表
{for(auto iter=a.begin(); iter!=a.end(); iter++)
{cout<< *iter<< " ";
}
cout<< endl;
}
int main()
{while(back_store.size())
{int new_page = back_store.front();
back_store.pop_front();
clt++;
m[new_page] = clt;
// 检测主存是否有空闲空间
if(main_store.size()<3)
{main_store.push_back(new_page);
printList(main_store);
}
else
{LRU(new_page);
printList(main_store);
}
}
cout<< "页面置换次数:"<< change_time;
}
运行截图小结调用了C++的STL库里的list
列表容器和map
容器
写了遍历打印函数,以及重写了列表的find函数
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
标题名称:操作系统实验(四)——页面置换算法模拟-创新互联
链接地址:http://pwwzsj.com/article/hgdig.html