页面置换算法实验报告 (2).doc_第1页
页面置换算法实验报告 (2).doc_第2页
页面置换算法实验报告 (2).doc_第3页
页面置换算法实验报告 (2).doc_第4页
页面置换算法实验报告 (2).doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

. ;. 操作系统课程设计报告 课课程程名名称称: 操操作作系系统统课课程程设设计计 课程设计题目课程设计题目: 页面置换算法页面置换算法 学院:学院: 计算机科学与技术学院计算机科学与技术学院 专专业业: 科科技技 小小组组成成员员 : : 庞庞思思慧慧 E E0 01 11 11 14 40 08 81 1 王王蒙蒙 E E0 01 11 11 14 41 16 61 1 姚姚慧慧乔乔 E E0 01 11 11 14 43 34 49 9 朱朱潮潮潮潮 E E0 01 11 11 14 44 40 08 8 指导老师:指导老师: 邱剑锋邱剑锋 . ;. 目录目录 1实验目的实验目的 .3 2实验要求实验要求 .3 3实验内容与步骤实验内容与步骤 .3 4算法思想算法思想 .4 5模块设计模块设计 .4 6程序设计程序设计 .5 7测试结果测试结果 .7 8结果分析结果分析 .9 9程序代码程序代码 .9 10课程设计小结课程设计小结 .24 . ;. 页面置换算法模拟设计 1.1.实验目的实验目的 (1)通过模拟实现几种基本页面置换的算法,了解虚拟存储技术的特点。 (2)掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想,并至少用三种 算法来模拟实现。 (3)通过对几种置换算法命中率的比较,来对比他们的优缺点。 2.2.实验要求实验要求 计算并输出下述各种算法在不同内存容量下的命中率。 A A 先进先出的算法(FIFO) B B 最近最少使用算法(LRU) C C 最佳淘汰算法(OPT) 3.3.实验内容与步骤实验内容与步骤 (1)通过随机数产生一个指令序列,共 320 条指令,具体的实施方法是: A 0,319的指令地址之间随机选取一起点 M; B 顺序执行一条指令,即执行地址为 M+1 的指令; C 在前地址0,M+1中随机选取一条指令并执行,该指令的地址为 M; D 顺序执行一条指令,其地址为 M+1; E 在后地址M+2,319中随机选取一条指令并执行; F重复 AE,直到执行 320 次指令。 (2)指令序列变换成页地址流 A.页面大小为 1K; B.用户内存容量为 4 页到 32 页; . ;. C.用户虚存容量为 32K。 在用户虚存中,按每 K 存放 10 条指令排列虚存地址,即 320 条指令在虚存中的 存放方式为: 第 0 条第 9 条指令为第 0 页(对应虚存地址为0,9) ; 第 10 条第 19 条指令为第 1 页(对应虚存地址为10,19) ; 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 第 310 条第 319 条指令为第 31 页(对应虚存地址为310,319) ; (3)计算并输出上述各种算法在不同内存容量下的命中率。 命中率=1-缺页次数/页地址流长度 4.4.算法思想算法思想 在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无 空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁 盘的对换区中。但应将哪 个页面调出,须根据一定的算法来确定。通常,把选择换出页面 的算法称为页面置换算法。一个好的页面置换算法,应具有较低的页面更换频率。从理论 上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调 出。 1.先进先出算法 FIFO: 这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留 时间最久的页面予以淘汰。该算法实现简单只需把一个进程已调入内存的页面,按先后次 序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。 2.最近最久未使用算法 LRU(least recently used): 算法的基本思想:当需要淘汰某一页时,选择离当前时间最近的一段时间内最久没有使用 过的页先淘汰。该算法的主要出发点是,如果某页被访问了,则它可能马上还被访问。或 者反过来说,如果某页很长时间未被访问,则它在最近一段时间不会被访问。 3.最佳淘汰算法 OPT 其所选择的被淘汰的页面将是以后永不使用,或许是未来最长时间内不使用的页面,该算 法可保证获得最低的淘汰率,但在实际运用中无法实现,可用来评价其他算法的命中率。 5.模块设计 . ;. 入口 产生随机数、要调入的页面、离现在处理时间最长的页面、 最长的页面 初始化页面情况 t1N 根据选择的算法进行 置换,缺页数加 1 计算缺页率,并输出数 据 结束 Y N 直接存入内存 开始 输入内存数 调用各种置换算法, ,并显示地址流、 页面流、页面置换过程和命中率 命中率比较 结束结束 总模块图 . ;. 主程序图 6.6.程序设计程序设计 struct Pro /内存页的结构体 int num; /记录页面号 int time; /页面从未被利用的时间 ; #define M 320 /定义指令条数 Pro PM; /产生的随机指令数组 void Input() /产生随机数 int s; /随机数 int i; srand(time(0); s = rand()%M; /coutn-随机产生指令流-n; for (i=0; iM; i+=4) /产生指令队列 pi.num=s; /任选一指令访问点 m . ;. pi+1.num=pi.num+1; /顺序执行一条指令 pi+2.num=(int)(float)pi.num*(rand()/(RAND_MAX+1.0); /执行前地址指令 m pi+3.num=pi+2.num+1; /顺序执行一条指令 s=(int)(float)(319-pi+2.num)*(rand()/(RAND_MAX+1.0) + pi+2.num; for(i=0;iM;i+) pi.time=0; int Search(int e,Pro*page1,int N) /查找内存中是否存在要调入的页面 int t; Pro*page=new ProN; page=page1; for(int i=0;iN;i+) t=e/10; if(t=pagei.num) return i; return -1; int Max(Pro*page1,int N)/查找最久最久未被使用的页面 Pro*page=new ProN; page=page1; int e=page0.time,i=0; while(iN) if(epagei.time) e=pagei.time; /找最长时间 i+; for(i=0;iCLOCKFIFO。实际上, 在内存页面数较少(45 页面)时,3 种算法的命中率差别不大,可是 50%左右。在内存页 面为 725 个页面之间时,3 种算法的访内命中率大致在 52%至 87%之间变化。在内存页面 为 2532 个页面时,由于用户进程的所有指令基本上都已装入内存,从而命中率已较大。 从而算法之间的差别不大。 9.程序代码 / 页面置换算法模拟设计 Dlg.cpp : implementation file #include stdafx.h #include 页面置换算法模拟设计.h #include 页面置换算法模拟设计 Dlg.h #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif / / CMyDlg dialog CMyDlg:CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg:IDD, pParent) /AFX_DATA_INIT(CMyDlg) . ;. m_iFifo = 0; N = 0; MZL = 0.0; /AFX_DATA_INIT / Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); void CMyDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CMyDlg) DDX_Control(pDX, IDC_EDIT4, m_suiji2); DDX_Control(pDX, IDC_EDIT5, m_yemian); DDX_Control(pDX, IDC_EDIT3, m_suiji); DDX_Radio(pDX, IDC_RADIO1, m_iFifo); DDX_Text(pDX, IDC_EDIT1, N); DDX_Text(pDX, IDC_EDIT2, MZL); /AFX_DATA_MAP BEGIN_MESSAGE_MAP(CMyDlg, CDialog) /AFX_MSG_MAP(CMyDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_RADIO1, OnRadio1) ON_BN_CLICKED(IDC_RADIO2, OnRadio2) ON_BN_CLICKED(IDC_RADIO3, OnRadio3) ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) /AFX_MSG_MAP END_MESSAGE_MAP() / / CMyDlg message handlers BOOL CMyDlg:OnInitDialog() CDialog:OnInitDialog(); . ;. / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dialog SetIcon(m_hIcon, TRUE);/ Set big icon SetIcon(m_hIcon, FALSE);/ Set small icon / TODO: Add extra initialization here return TRUE; / return TRUE unless you set the focus to a control / If you add a minimize button to your dialog, you will need the code below / to draw the icon. For MFC applications using the document/view model, / this is automatically done for you by the framework. void CMyDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect( int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / Draw the icon dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); . ;. / The system calls this to obtain the cursor to display while the user drags / the minimized window. HCURSOR CMyDlg:OnQueryDragIcon() return (HCURSOR) m_hIcon; #include #include #include #define M 320 int N; struct Pro /内存页的结构体 int num,time; ; Pro pM; void Input() /输入函数,输入实际页号和实际页数 int s; /随机数 inti; srand(time(0); /每次运行时进程号不同,用来作为初始化随机数队列的种子 s = rand()%M; /coutn-随机产生指令流-n; for (i=0; iM; i+=4) /产生指令队列 pi.num=s; /任选一指令访问点 m pi+1.num=pi.num+1; /顺序执行一条指令 pi+2.num=(int)(float)pi.num*(rand()/(RAND_MAX+1.0); /执行前地址指令 m . ;. pi+3.num=pi+2.num+1; /顺序执行一条指令 s=(int)(float)(319-pi+2.num)*(rand()/(RAND_MAX+1.0) + pi+2.num; for(i=0;iM;i+) pi.time=0; /*p0.num=10;p1.num=22;p2.num=33;p3.num=44;p4.num=50; p5.num=13;p6.num=32;p7.num=22; /测试数 据 1,2,3,4,5,1,3,2 fifo 5,1,2,4 LRU 5,1,3,2 opt 置换 1,2,3,5 */ int Search(int e,Pro*page1,int N) /查找内存中是否存在要调入的页面 int t; Pro*page=new ProN; page=page1; for(int i=0;iN;i+) t=e/10; if(t=pagei.num) return i; return -1; int Max(Pro*page1,int N) /找出离现在时间最长的页面 Pro*page=new ProN; page=page1; int e=page0.time,i=0; while(iN) if(epagei.time) e=pagei.time; /找最长时间 i+; . ;. for(i=0;iN;i+) if(e=pagei.time) return i; /找最长时间的下标 return -1; int Compfu(Pro*page1,int i,int t,Pro pM) /找到最久不使用的页面 Pro*page=new ProN; page=page1; int count=0; for(int j=i;jM;j+) if(paget.num=pj.num/10) break; /当前页面开始往后查找在内存中的页帧号 else +count; return count; void CMyDlg:OnButton1() / TODO: Add your control notification handler code here UpdateData(true); Input(); /地址流 CString str1,tmp1; tmp1=str1=; int k=0,t=0,i=0; for(i=0;iM;i+) tmp1.Format(%-4d,pi.num); str1+=tmp1; k+; if(k%16=0) str1+=nrnrnr; . ;. m_suiji.SetWindowText(_T(str1); /页面流 CString str2,tmp2; tmp2=str2=; for(i=0;iM;i+) tmp2.Format(%-4d,pi.num/10); str2+=tmp2; k+; if(k%16=0) str2+=nrnrnr; m_suiji2.SetWindowText(_T(str2); Pro*page=new ProN; for(int j=0;jN;j+)/初始化页面基本情况 pagej.num=-1; pagej.time=j; if(m_iFifo=0)/FIFO 页面置换 float n=0;/记录缺页数 int i=0; CString str3,tmp3; str3=; m_yemian.SetWindowText(_T(str3); while(i=0) +i;/找到相同的页面 else n+; paget.num=pi.num/10;/如果没有找到相同的页,则进行页面 替换,缺页数加一 / tmp3=; . ;. m_yemian.GetWindowText(_T(str3); for(int i=0;iN;i+) if(pagei.num=-1) tmp3.Format(%s, ); str3+=tmp3; else tmp3.Format(%-4d,pagei.num); str3+=tmp3; str3+=nrnrnr; m_yemian.SetWindowText(_T(str3); / t=(+t)%N; MZL=1-n/M; if(m_iFifo=1) /LRU 页面置换 int p2; float n=0;/记录缺页数 int i=0; int t1=t=0; CString str3,tmp3; str3=; m_yemian.SetWindowText(_T(str3); while(i=0) pagek.time=0; for(p2=0;p2N;p2+) . ;. if(p2!=k) pagep2.time+; else if(t1N) n+; paget.num=pi.num/10;/如果没有找到相同的页,则进行 页面替换,缺页数加一 +t1; t+; paget.time=0; / tmp3=; m_yemian.GetWindowText(_T(str3); for(int i=0;iN;i+) if(pagei.num=-1) tmp3.Format(%s, ); str3+=tmp3; else tmp3.Format(%-4d,pagei.num); str3+=tmp3; str3+=nrnrnr; m_yemian.SetWindowText(_T(str3); / else n+; t=Max(page,N); paget.num=pi.num/10; paget.time=0; / tmp3=; m_yemian.GetWindowText(_T(str3); . ;. for(int i=0;iN;i+) if(pagei.num=-1) tmp3.Format(%s, ); str3+=tmp3; else tmp3.Format(%-4d,pagei.num); str3+=tmp3; str3+=nrnrnr; m_yemian.SetWindowText(_T(str3); / for(p2=0;p2N;p2+) if(p2!=t) pagep2.time+; i+; MZL=1-n/M; if(m_iFifo=2)/OPT 页面置换 int i=0; float n=0;/记录缺页数 int t=0,t1=0; CString str3,tmp3; str3=; m_yemian.SetWindowText(_T(str3); while(i=0)i+; else . ;. if(t1N) n+; paget.num=pi.num/10;/如果没有找到相同的页,则进行页面替换,缺页数加 1 +t1; t+; i+; / tmp3=; m_yemian.GetWindowText(_T(str3); for(int i=0;i=N) int temp=-1,cn; for(t=0;tN;t+)/查找下次访问距离最远的那个页面 if(tempCompfu(page,i,t,p) temp=Compfu(page,i,t,p);/下次命中经历的页面计数 cn=t;/最远的页面号 pagecn.num=pi.num/10; n+; / tmp3=; m_yemian.GetWindowText(_T(str3); . ;. for(int i=0;iN;i+) if(pagei.num=-1) tmp3.Format(%s, ); str3+=tmp3; else tmp3.Format(%-4d,pagei.num); str3+=tmp3; str3+=nrnrnr; m_yemian.SetWindowText(_T(str3); / i+; else break; MZL=1-n/M; UpdateData(false); void CMyDlg:OnRadio1() / TODO: Add your control notification handler code here void CMyDlg:OnRadio2() / TODO: Add your control notification handler code here void CMyDlg:OnRadio3() / TODO: Add your control notification handler code here . ;. void CMyDlg:OnChangeEdit2() / TODO: If this is a RICHEDIT control, the control will not / send this notification unless you override the CDialog:OnInitDialog() / function and call CRichEditCtrl().SetEventMask() / with the ENM_CHANGE flag ORed into the mask. / TODO: Add your control notification handler code here void CMyDlg:OnButton2() / TODO: Add your control notification handler code here MessageBox(_T(确认退出?); ExitProcess(0); void CMyDlg:OnButton3() UpdateData(true); Input(); Pro*page=new ProN; for(int j=0;jN;j+)/初始化页面基本情况 pagej.num=-1; pagej.time=j; int t1=0; int i1=0; float n1=0; float s1,s2,s3; /FIFO 页面置换 n1=0;/记录缺页数 while(i1=0) +i1;/找到相同的页面 else n1+; paget1.num=pi1.num/10;/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论