#include#include#include#include/*用到了srand函數(shù)*/" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

操作系統(tǒng)的頁面置換C++算法:OPT FIFO LRU CLOC

系統(tǒng) 3109 0

暴力直接上代碼,主要是用了vector來實(shí)現(xiàn),有些方法比較費(fèi)時(shí),不太好,請(qǐng)各位大神斧正。這是個(gè)人的作業(yè), 大笑 ? 這是代碼下載頁http://download.csdn.net/detail/l631068264/7644569? ?里面還有多級(jí)反饋隊(duì)列進(jìn)程調(diào)度的MFC版

      #include <iostream>
#include <algorithm>
#include <vector>
#include <stdio.h>
#include <stdlib.h> /*用到了srand函數(shù)*/ 
#include <time.h> /*用到了time函數(shù)*/ 
using namespace std;

const int AddressSize = 320;//地址數(shù)組大小
const int AddressRange = 319;//地址值范圍
struct TimeNode{
	int data;//頁面序列號(hào)
	int read;//引用位
};
class PageReplace{
public:
	void Create();//創(chuàng)建地址序列
	void AddChangePage(int size);//轉(zhuǎn)換為頁面序列
	void Print();//打印控制
	PageReplace();
	~PageReplace();
private:
	int PageSize;//頁面大小	
	int PageNum;//頁面數(shù)
	int* Address;//地址數(shù)組
	vector< int > PageOrder;//頁面序列
	double OPT(int j);//j 是物理塊數(shù)
	double FIFO(int j);
	double LRU(int j);
	double CLOCK(int j);
};
PageReplace::PageReplace()
{
	Address = new int[AddressSize];
}
PageReplace::~PageReplace()
{
	delete[]Address;
}
void PageReplace::Create()
{
	srand((unsigned)time(NULL));
	int i;
	int Range = AddressRange;
	for (i=0;i<AddressSize;i=i+5)
	{
		Address[i]  = rand()%AddressRange;
		Address[i+1] = Address[i]+1;
		Address[i+2] = rand()%Address[i+1];
		Address[i+3] = Address[i+2]+1;
		//rand%(b-a+1) + a =>[a,b]隨機(jī)數(shù)
		Address[i+4] = Address[i+3]+1+(rand()%AddressRange-Address[i+3]);
	}	
	for (int j=0;j<AddressSize;j++)
	{
		printf("%3d ",Address[j]);
		if ((j+1)%18==0)
		{
			cout<<endl;
		}
	}
	cout<<endl;
}
void PageReplace::AddChangePage(int size)
{   
	//頁面大小	K
	PageSize = size;
	int i,j;
	int AddNum_PerPage = 10*PageSize;//每K 10條指令排列虛地址  每頁指令數(shù)
	PageNum = AddressSize/AddNum_PerPage;//頁面數(shù)
	for (i=0;i<AddressSize-1;i++)
	{//計(jì)算頁號(hào)
		int m = Address[i]/AddNum_PerPage;		
		int n = Address[i+1]/AddNum_PerPage;
		if (m != n)
		{//序列相鄰?fù)瑯拥牟灰?			PageOrder.push_back(m);
		}		
	}
	for (j=0;j<PageOrder.size();j++)
	{
		printf("%2d ",PageOrder[j]);
		if ((j+1)%20==0)
		{
			cout<<endl;
		}
	}
	cout<<endl;
}
double PageReplace::OPT(int j)
{
	vector<int> opt;//取代內(nèi)存塊
	int i,d2,k;
	double l=0;
	for (i=0;i<PageOrder.size();i++)
	{//缺頁推斷
		vector<int >::iterator flag = find(opt.begin(),opt.end(),PageOrder[i]);		
		if (flag == opt.end())
		{	
			l++;//缺頁數(shù)					
			if (opt.size()<j)
			{
				opt.push_back(PageOrder[i]);				
			}
			else
			{//找出當(dāng)前序列位置 最遲訪問
				vector<int>::iterator m = find(PageOrder.begin()+i,PageOrder.end(),PageOrder[i]);
                int max = 0;
				for ( k=0;k<opt.size();k++)
				{										
					vector<int>::iterator n = find(PageOrder.begin()+i,PageOrder.end(),opt[k]);
					if (max < n-m)
					{
						max = n-m;
						d2 = k;//塊下標(biāo)
					}
				}
				opt[d2] = PageOrder[i];
			}
		}
	}
	return (double)l/PageOrder.size();//缺頁率	
}

double PageReplace::FIFO(int j)
{	
	int i;
	double l=0;
	vector<int> fifo;

	for (i=0;i<PageOrder.size();i++)
	{
		vector<int >::iterator flag = find(fifo.begin(),fifo.end(),PageOrder[i]);
		if (flag==fifo.end())
		{	
			l++;
			if (fifo.size()<j)
			{
				//頭插入
				fifo.push_back(PageOrder[i]);
			}
			else{
				fifo.erase(fifo.begin());
				fifo.push_back(PageOrder[i]);
			}
		}
	}
	return (double)l/PageOrder.size();
}
double PageReplace::LRU(int j)
{	
	vector<int> lru;
	int i;
	double l=0;
	for (i=0;i<PageOrder.size();i++)
	{
		vector<int >::iterator flag = find(lru.begin(),lru.end(),PageOrder[i]);
		if (flag == lru.end())
		{//缺頁
			l++;
			if (lru.size()<j)
			{	//頭插入
				lru.push_back(PageOrder[i]);
			}
			else{
				lru.erase(lru.begin());
				lru.push_back(PageOrder[i]);
			}
		}
		else
		{//不缺頁
			for (int m =0 ;m<lru.size();m++)
			{
				if (lru[m] == PageOrder[i])
				{
					lru.erase(lru.begin()+m);
					lru.push_back(PageOrder[i]);
					break;
				}
			}
		}
	}
	return (double)l/PageOrder.size();
}
double PageReplace::CLOCK(int j)
{
	int i,m,flag;
	double l=0; 
	TimeNode p;
	vector<TimeNode> time;
	for (i=0;i<PageOrder.size();i++)
	{
		for (m=0;m<time.size();m++)
		{
			if(time[m].data ==PageOrder[i])
			{
				 flag = m;
				break;
			}
		}
		//vector<TimeNode>::iterator flag = find(time.begin(),time.end(),PageOrder[i]);
		if (flag<0)
		{
			l++;
			if (time.size()<j)
			{
				p.data = PageOrder[i];
				p.read = 0;
				time.push_back(p);
			}
			else
			{
				for (m=0;m<time.size();m++)				
					if (time[m].read == 0)
					{
						time.erase(time.begin()+m);
						p.data = PageOrder[i];
						p.read = 0;
						time.push_back(p);
						break;
					}			
			}
		}
		else
		{
			time[flag].read = 1;
		}
		//相當(dāng)于定時(shí)器 每調(diào)用5個(gè)頁面全部引用位清0
		if ((i+1)%5 == 0)
		{
			for (m=0;m<time.size();m++)	
				time[m].read = 0;
		}
	}
	return (double)l/PageOrder.size();
}
void PageReplace::Print()
{
	int i;
	printf("頁面大小 %d K\n",PageSize);
	printf("輸入分配內(nèi)存塊數(shù)( 1 ~ %d )\n",PageNum);
	scanf("%d",&i);
	printf("OPT 算法 缺頁中斷率: %.2f%%\n",OPT(i)*100);
	printf("FIFO 算法 缺頁中斷率: %.2f%%\n",FIFO(i)*100);
	printf("LRU 算法 缺頁中斷率: %.2f%%\n",LRU(i)*100);
	printf("CLOCK 算法 缺頁中斷率: %.2f%%\n",CLOCK(i)*100);
	cout<<endl;	
}

int main()
{
	PageReplace p;
	bool flag=true;
	while(flag)
	{
		cout<<"1. 頁面置換實(shí)驗(yàn)  0. 退出"<<endl;
		int choice,size;
		cin>>choice;
		switch (choice)
		{
		case 1:
			cout<<"生成新序列"<<endl;
			p.Create();
			cout<<"輸入頁面大小(1/2/4/8/16)單位 K    按0 退出頁面大小選擇"<<endl;
			cin>>size;
			while (size)
			{
				p.AddChangePage(size);
				p.Print();
				
				cout<<"輸入頁面大?。?/2/4/8/16)單位 K    按0 退出頁面大小選擇"<<endl;
				cin>>size;
			}
			break;
		case 0:
			flag = false;
			break;
		}
	}	
	return 0;
}
    


操作系統(tǒng)的頁面置換C++算法:OPT FIFO LRU CLOCK 計(jì)算缺頁率


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产亚洲精品2021自在线 | 国产午夜亚洲精品第一区 | 国产av毛片 | 另类视频在线观看 | 毛片一级片 | 国产高清卡一卡新区 | 国产精品美女久久久久久免费 | 麻豆自拍偷拍 | 日韩欧美在线中文字幕 | 伦一区二区三区中文字幕v亚洲 | 欧区一欧区二欧区三史无前例 | 深夜福利一区二区 | 一区二区三区波多野结衣 | 涩涩97| 日韩精品视频一区二区三区 | 精品一区二区三区在线视频 | 欧美成年视频 | 成人免费大片黄在线播放 | 久久久久久久免费视频 | 欧美日韩高清一区 | 狠狠草视频 | 国产福利一区二区 | 日本黄色大片免费观看 | 综合久久久久综合 | 国产合集福利视频在线视频 | 国产精品美女www爽爽爽视频 | 欧美日日日 | 九九福利影院 | 亚洲国产婷婷香蕉久久久久久99 | 久草这里只有精品 | 久久国产精品久久 | 欧美高清成人 | 久章草影院 | 色鬼久久 | 欧美一级精品片在线看 | 国产一区二区三区免费 | 欧美国产另类 | 99午夜高清在线视频在观看 | 天天操网 | 国产啪| 精品综合 |