操作系统模拟页面调度算法(OPT、FIFO、LRU)演示(vc2010调试通过)(二)

#include <iostream>
#include <vector>
#include <list>
#include <iomanip>

/************************************************************************
*@description:  模拟虚拟存储管理器的页面调度
*@author     :  kernel_main
*@create time:  2014.05.22
*@email      :  [email protected]
************************************************************************/

using namespace std;

typedef list<int> LIST_INT;
typedef list<int>::iterator ITER_LIST_INT;

typedef vector<int> VEC_INT;
typedef vector<int>::iterator ITER_VEC_INT;

#define PAGE_NUM 3

typedef enum
{
	RETURN_FIND,
	RETURN_NOT_FIND,
} tag_FIND_FLAG;

void FIFO(VEC_INT arr)
{
	tag_FIND_FLAG flag = RETURN_NOT_FIND;
	LIST_INT list;
	int cur_cnt = 0;
	int not_find_cnt = 0;
	int cnt = 0;

	list.assign(PAGE_NUM,0);

	for (ITER_VEC_INT iter=arr.begin();iter!=arr.end();iter++)
	{
		cout << setw(2) << ++cnt << "--------------push" << setw(3) << *iter << " ==> ";
		flag = RETURN_NOT_FIND;
		for (ITER_LIST_INT iter_list=list.begin();iter_list!=list.end();iter_list++)
		{
			cout << *iter_list << " ";
			if (*iter_list == *iter)
			{
				flag = RETURN_FIND;
			}
		}

		if (RETURN_FIND == flag)
		{
			cout << setw(10) << "命中*" << endl;			
		}
		else
		{
			cout << setw(10) << " 缺页中断^" << endl;			

			 not_find_cnt++;
			 
			 if (PAGE_NUM == list.size())
			 {
				 list.pop_front();
				 list.push_back(*iter);
			 }
			 else
			 {
				list.push_back(*iter);
			 }
		}
	}

	cout << endl << "总共中断次数: " << not_find_cnt << endl;
}

int main()
{
	VEC_INT vec;
	int arr[] = {1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6};


	for (int i=0;i<sizeof(arr)/sizeof(int);i++)
	{
		vec.push_back(arr[i]);
	}

	FIFO(vec);
}
操作系统模拟页面调度算法(OPT、FIFO、LRU)演示(vc2010调试通过)(二)_第1张图片

你可能感兴趣的:(操作系统模拟页面调度算法(OPT、FIFO、LRU)演示(vc2010调试通过)(二))