操作系统课程设计--模拟页式存储.doc_第1页
操作系统课程设计--模拟页式存储.doc_第2页
操作系统课程设计--模拟页式存储.doc_第3页
操作系统课程设计--模拟页式存储.doc_第4页
操作系统课程设计--模拟页式存储.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

燕山大学课程设计说明书 课程设计名称:操作系统 题目:模拟页式存储 班级:2010级应用3班 开发小组名称:方小雨 课题负责人:方小雨 课题组成员:姓名 :方小雨 学号:100104010097 班级:2010级应用3班 自评成绩:B 课题开发日期:2013.01.07-2013.01.11目录1. 概述1.1 目的31.2 主要完成的任务31.3 使用的开发工具31.4 解决的束腰问题32 使用的基本概念和原理33 总体设计3.1 基本技术路线的确定43.2 软件的总体结构、模块关系、总体流程的确定43.3 创立的进程或线程的确定44 详细设计4.1 利用线程操作的函数44.2 模块内部的流程和实现算法54.3 设计的过程、构件、类、对象、函数及参数的确定和解释65 编码设计5.1 开发环境的设置和建立65.2 程序设计时要注意的事项75.3 关键构建/插件的特点和使用75.4 主要程序的代码设计及注释75.5 技术难点、经常犯的错误196 测试时经常出现的问题及其解决方法197 软件使用说明7.1 基本功能197.2 需要运行的环境197.3 操作198 总结209 参考文献20 模拟页式存储1.概述1.1 目的通过使用程序设计语言设计一个程序,模拟页式存储管理中的FIFO、LRU、LFU、OPT四个页面置换算法运行的过程,加深对页面置换算法的理解。1.2主要完成的任务 通过使用程序设计语言设计一个程序,模拟页式存储管理中FIFO、LRU、LFU、OPT四页面置换算法运行的过程。基本要求如下:(1)采用四个线程同时完成每个算法;(2)能够设定驻留内存页面的个数、内存的存取时间、缺页中断的时间、快表的时间,并提供省缺值;(3)能够随机输入存取的逻辑页面的页号序列;(4)能够随机产生存取的逻辑页面的页号序列;(5)能够设定页号序列中页面个数和范围;(6)提供良好图形界面,同时能够展示四个算法运行的结果。(7) 计算每种页面置换算法每个页面的存取时间。 (8) 能够将每次的实验输入和实验结果存储起来,下次运行时或以后可查询; (9) 完成多次不同设置的实验,总结实验数据,看看能得出什么结论。1.3使用的开发工具 使用的软件为VC+6.0。1.4解决的主要问题用程序实现FIFO、LRU、LFU、OPT四个算法,模拟页式存储,并提供较好的设计界面。2 使用的基本概念和原理该程序主要用到线程,线程的基本概念为:线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程基本不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。同一个进程的线程可以并发执行。原理:线程可以创建和撤消线程,从而实现序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。大多数支持多处理器的操作系统都提供编程接口来让进程可以控制自己的线程与各处理器之间的关联度。有时候,线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。3 总体设计3.1 基本技术路线的确定 采用C+面向对象设计。3.2 软件的总体结构、模块关系、总体流程的确定软件总共分为5块,第一块为过程演示,第二块为参数设置,第三块为开始、停止功能,第四块为实验结果,第五块为保存、清空、打开功能。第二个模块的参数的设置以后,通过第三个模块的开始功能执行,然后在第一个模块进行过程演示和在第四个模块输出实验结果,第五个模块把实验结果存储起来。总体流程图如下: 开始 参数设置 过程演示 实验结果显示 清空保存 N Y 结束 图一3.3 创立的线程的确定 该程序要创立四个线程:threadFIFO、threadLRU、threadLFU、threadOPT,来同时完成每个算法,同时将执行过程显示出来。4 详细设计4.1 利用线程操作的函数CreateThread(NULL,0,threadFIFO,(LPVOID)¶m1,0,&TreadeFIFO);(创建FIFO线程)CreateThread(NULL,0,threadLRU,(LPVOID)¶m1,0,&TreadeLRU);(创建LRU线程)CreateThread(NULL,0,threadLFU,(LPVOID)¶m1,0,&TreadeLFU);(创建LFU线程)CreateThread(NULL,0,threadOPT,(LPVOID)¶m1,0,&TreadeOPT);(创建OPT线程)DWORD WINAPI threadFIFO(LPVOID lparam);(FIFO线程的定义)DWORD WINAPI threadLRU(LPVOID lparam);(LRU线程的定义)DWORD WINAPI threadLFU(LPVOID lparam);(LFU线程的定义)DWORD WINAPI threadOPT(LPVOID lparam);(OPT线程的定义)4.2 模块内部的流程和实现算法参数设定模块:该模块主要分为内存数、页面数、页号范围、页面序列、内存存取时间、缺页中断时间、快表时间的设定。其代码形式如下:CEdit * m_edit;m_edit=(CEdit *)GetDlgItem(IDC_EDIT1);m_edit-GetWindowText(m_RAMPAGE);这几个编辑框要建立相应的类向导,然后在随机生成的按钮下添加随机生成数函数。其代码形式如下:m_PAGELIST.Empty();int i ;i=atoi(m_PAGE);if(i20)MessageBox(进程页面数必须是10-20!);return;for(int j =0;jSetWindowText(m_PAGELIST);各个参数设定好之后要开始执行,在开始执行按钮下添加四个创建线程函数,将执行过程(驻留内存进程号)及每个页面的存取时间显示到ListBox中,其代码形式如下:g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3)将页面置换次数显示到Static中。另外还要在程序中加入四个页面置换算法函数。其代码形式如下CString str;str.Format(%s%d%s,中断,num,次);g_static-SetWindowText(str); 在保存、清空、打开功能是在相应的按钮下添加函数。4.3 设计的过程、构件、类、对象、函数及参数的确定和解释界面的设计:首先需要设定内存数、页面数、页面序列、内存存取时间、缺页中断时间、快表时间,这些都用编辑控件,并建立类向导,执行过程的演示要用ListBox控件,置换次数要用Static控件。在程序开始进行四个线程函数的声明,然后创建一个结构体,然后再声明四个结构体的对象。缺省值的设定:CEdit * edit1=(CEdit * )GetDlgItem(IDC_EDIT1);edit1-SetWindowText(3);CEdit * edit2=(CEdit * )GetDlgItem(IDC_EDIT2);edit2-SetWindowText(10);CEdit * edit3=(CEdit * )GetDlgItem(IDC_EDIT3);edit3-SetWindowText(1); CEdit * edit4=(CEdit * )GetDlgItem(IDC_EDIT4);edit4-SetWindowText(9);CEdit * edit5=(CEdit * )GetDlgItem(IDC_EDIT5);edit5-SetWindowText(2126314268);CEdit * edit6=(CEdit * )GetDlgItem(IDC_EDIT6);edit6-SetWindowText(10); CEdit * edit7=(CEdit * )GetDlgItem(IDC_EDIT7);edit7-SetWindowText(1000);CEdit * edit8=(CEdit * )GetDlgItem(IDC_EDIT8);edit8-SetWindowText(2);5 编码设计5.1 开发环境的设置和建立开发环境为MFC AppWizardexe,应用程序类型为基本对话框。5.2 程序设计时要注意的事项(1)、控件的名称或ID要与程序中对应;(2)、控件传值有时要用指针,也有的要通过成员函数传值;(3)、数组的大小要足够大,防止访问冲突;5.3 关键构件/插件的特点和使用Listbox控件:列表框中的项目是通过程序插入到其中的,用户无法向清单中输入数据,当选择其中的项目,并在用户单击一个按钮或者执行某个操作时,由应用程序完成对指定项目的具体操作。 CStatic控件:用于显示文本,但不能够接受用户输入,VC+中广泛用于标识信息、显示位图、图标等。CEdit控件:提供了窗口编辑的基本功能,用户能在该控件中录入文本。它提供给用户编辑或修改单行或多行文本,也可以根据需要,将编辑框中的文本设置为只读,使用户不可修改。CButton控件:经常使用按钮控件进行命令操作。5.4 主要程序的代码设计及注释创建一个线程:param1.g_list=m_listfifo;param1.PAGE=atoi(m_PAGE);param1.RAMPAGE=atoi(m_RAMPAGE);param1.g_static=(CStatic *)GetDlgItem(IDC_STATIC_FIFO);memset(param1.PAGELIST,0,sizeof(param1.PAGELIST);param1.NTIME=atoi(m_NTIME); param1.QTIME=atoi(m_QTIME);for( int i =0;iRAMPAGE;intpage = buffer-PAGE;int * pagelist = buffer-PAGELIST;CListBox * g_list = buffer-g_list;CStatic * g_static = buffer-g_static; int ntime=buffer-NTIME;int qtime=buffer-QTIME;int time=3*ntime+qtime;CString str3;str3.Format(%d,time);int RAM10;memset(RAM,0,sizeof(RAM);int ram_num=1;RAM0=pagelist0;Sleep(SLEEP);g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3 );num+;int list_num=1;while(ram_num=0;i-)if(pagelistlist_num=RAMi)norn=1;list_num+;break;if(norn=0)RAMram_num=pagelistlist_num;g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;Sleep(SLEEP);ram_num+;list_num+;int index =0;while(list_num=0;i-)if(pagelistlist_num=RAMi)norn2=1;list_num+;break;if(norn2=0)RAM(index)%(rampage)=pagelistlist_num;list_num+;index+;g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;Sleep(SLEEP);CString str;str.Format(%s%d%s,中断,num,次);g_static-SetWindowText(str);return 1;LRU算法:DWORD WINAPI threadLRU(LPVOID lparam)int num=0;para * buffer = (para*)lparam;int rampage = buffer-RAMPAGE;intpage = buffer-PAGE;int * pagelist = buffer-PAGELIST;CListBox * g_list = buffer-g_list;CStatic * g_static = buffer-g_static; int ntime=buffer-NTIME;int qtime=buffer-QTIME;int time=3*ntime+qtime;CString str3;str3.Format(%d,time);int RAM10;memset(RAM,0,sizeof(RAM);int ram_num=1;RAM0=pagelist0;Sleep(SLEEP);g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;int list_num=1;while(ram_num=0;i-)if(pagelistlist_num=RAMi)norn=1;list_num+;break;if(norn=0)RAMram_num=pagelistlist_num;g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;Sleep(SLEEP);ram_num+;list_num+;while(list_num=0;i-)if(pagelistlist_num=RAMi)int temp = RAMi;for(int j = i+1 ;jrampage;j+)RAMj-1 =RAMj;RAMrampage-1=temp;norn2=1;list_num+;break;if(norn2=0)for(int k = 0;kInsertString(0,inttoCString(RAM)+ +时间:+str3);num+;Sleep(SLEEP);CString str;str.Format(%s%d%s,中断,num,次);g_static-SetWindowText(str);return 1;LFU算法:DWORD WINAPI threadLFU(LPVOID lparam)int num=0;para * buffer = (para*)lparam;int rampage = buffer-RAMPAGE;intpage = buffer-PAGE;int * pagelist = buffer-PAGELIST;CListBox * g_list = buffer-g_list;CStatic * g_static = buffer-g_static; int ntime=buffer-NTIME;int qtime=buffer-QTIME;int time=3*ntime+qtime;CString str3;str3.Format(%d,time);int RAM10;memset(RAM,0,sizeof(RAM);int ram_num=1;RAM0=pagelist0;Sleep(SLEEP);g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;int list_num=1;while(ram_num=0;i-)if(pagelistlist_num=RAMi)norn=1;list_num+;break;if(norn=0)RAMram_num=pagelistlist_num;g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;Sleep(SLEEP);ram_num+;list_num+;while(list_num=0;i-)if(pagelistlist_num=RAMi)indexi+;norn2=1;list_num+;break;if(norn2=0)int miniindex;int tempindex=255;for(int k =0;krampage;k+)if(indexkInsertString(0,inttoCString(RAM)+ +时间:+str3);num+;Sleep(SLEEP);CString str;str.Format(%s%d%s,中断,num,次);g_static-SetWindowText(str);return 1;OPT算法:DWORD WINAPI threadOPT(LPVOID lparam)int num=0;para * buffer = (para*)lparam;int rampage = buffer-RAMPAGE;intpage = buffer-PAGE;int * pagelist = buffer-PAGELIST;CListBox * g_list = buffer-g_list;CStatic * g_static = buffer-g_static; int ntime=buffer-NTIME;int qtime=buffer-QTIME;int time=3*ntime+qtime;CString str3;str3.Format(%d,time);int RAM10;memset(RAM,0,sizeof(RAM);int ram_num=1;RAM0=pagelist0;Sleep(SLEEP);g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;int list_num=1;while(ram_num=0;i-)if(pagelistlist_num=RAMi)norn=1;list_num+;break;if(norn=0)RAMram_num=pagelistlist_num;g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;Sleep(SLEEP);ram_num+;list_num+;int index10;memset(index,0,sizeof(index);while(list_num=0;i-)if(pagelistlist_num=RAMi)norn2=1;list_num+;break;if(norn2=0)for(int k = 0 ; krampage;k+)int g_num = list_num;while(!(RAMk=pagelistg_num)g_num+;indexk+;int maxindex;int tempindex=0;for(k =0;ktempindex)maxindex=k;tempindex=indexk;RAMmaxindex=pagelistlist_num;list_num+;g_list-InsertString(0,inttoCString(RAM)+ +时间:+str3);num+;Sleep(SLEEP);CString str;str.Format(%s%d%s,中断,nu

温馨提示

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

评论

0/150

提交评论