




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验2 存储器管理实验目的编程模拟实现存储器页面置换的常用算法,调试分析相关存储器管理程序,加深对存储器页面置换常用算法的理解和实现技巧实验内容1、 自定义存储器管理有关的数据结构;2、 依据最佳置换算法(Optimal)、先进先出置换算法(FIFO)、最近最久未使用算法(LRU)原理,编写对应函数,模拟系统的存储器页面置换功能;3、 为了更好地模拟和评价算法的性能,允许用户自行指定可用页块数并输入需访问的页面号序列;4、 统计以上算法实际需要的总页面数、缺页中断次数以及它们的缺页率;5、 比较/分析以上算法的置换性能,并作出自己的评价。预备知识存储器页面置换常用算法的相关知识参考课堂计算机操作系统教材实验指导1、 请求分页存储器管理模拟系统界面图3.1请求分页存储器管理模拟系统界面图形界面可以自行设计、也可以使用控制台终端输出信息。“访问页面号序列”和“页块数”为输入信息,列表框(或编辑框)“具体的页面置换情况”及其统计数据为输出信息。控制台终端的输出信息可以通过剪贴板复制保存为电子实验记录文件。图形界面可以通过“保存”按钮保存列表框的输出信息。采用编辑框显示的输出信息,也可以通过剪贴板复制保存。Optimal、LRU、FIFIO算法分别由其对应按钮或函数实现。2、全局变量int PageSeqMAXPAGENUM;/用来放置页面号序列的整型数组CString pageSeqNum; /带分隔符的访问页面序列字符串备份int totalPageCount; /实际输入的总页面数int failPageCount;/缺页中断次数int pageBlock9,priority9; /已在内存页面号, 及其优先数bool metathesis,space; /是否缺页, 是否有空页CString str,memo,output; /信息标题, 调页记录, 输出信息3、主对话框类声明class CPageMetathesisDlg : public CDialog/ Constructionpublic:BOOL UpdatePageSeq();void Optimal(int *,int);void LRU(int *,int);void FIFO(int *,int);CPageMetathesisDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Data/AFX_DATA(CPageMetathesisDlg)enum IDD = IDD_PAGEMETATHESIS_DIALOG ;CEditm_BlockCount_Control;CListBoxm_Display;CEditm_PageSeqNum_Control;CStringm_Hint;CStringm_PageSeqNum;intm_BlockCount;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CPageMetathesisDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CPageMetathesisDlg)virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnButtonClr();afx_msg void OnButtonExit();afx_msg void OnButtonLru();afx_msg void OnButtonFifo();afx_msg void OnButtonOptimal();afx_msg void OnButtonSave();/AFX_MSGDECLARE_MESSAGE_MAP();4、参考代码/实现Optimal算法的函数void CPageMetathesisDlg:Optimal(int *addr,int physical_size) char CSnum2;metathesis=true,space=true; str=rn;output=;for(int z=1;z=0;i-)pageBlocki=-1;/设置数组初值为-1priorityi=0;/设置数组优先级为0for(i=0;itotalPageCount;i+)metathesis=true;for(int j=0;metathesis & jphysical_size;j+)if(addri=pageBlockj)metathesis=false;memo=;for(z=0;zphysical_size;z+)if(pageBlockz=-1)/无中断且有空页面,空页面处输出空格memo+= ;else /无中断itoa(pageBlockz,CSnum,10);memo+=CSnum;memo+= ;output+=rn;output+=memo;m_Display.InsertString(m_Display.GetCount(),memo);if(metathesis)/有中断if(space)/有空页面,插入页面中断int m;for(z=0;zphysical_size;z+)if(priorityz=0)priorityz=1;pageBlockz=addri;m=z;z=physical_size;if(priorityphysical_size-1!=0) space=false;/无空页面memo=;for(z=0;zphysical_size;z+)itoa(pageBlockz,CSnum,10);if(mz) memo+= ;else memo+=CSnum;memo+= ;memo+= 插入页面;failPageCount+;output+=rn;output+=memo;m_Display.InsertString(m_Display.GetCount(),memo);else/无空页面,替换页面中断int max=0;for(z=0;zphysical_size;z+)for(int k=i+1;kprioritymax) max=z;if(k=totalPageCount) max=z;z=physical_size;pageBlockmax=addri;memo=;for(z=0;z=0;i-)pageBlocki=-1;/设置数组初值为-1priorityi=0;/设置数组优先级为0for(int z=1;z=physical_size;z+)str+=页块;itoa(z,CSnum,10);str+=CSnum;str+= ;str+=有无中断 页面置换形式;m_Display.InsertString(m_Display.GetCount(),str);for(i=0;itotalPageCount;i+)metathesis=true;for(int j=0;metathesis & jphysical_size;j+)if(addri=pageBlockj)metathesis=false;for(z=0;zpriorityj)priorityz-=1; priorityj=physical_size;memo= ;for(z=0;zphysical_size;z+)if(pageBlockz=-1)/无中断且有空页面,空页面处输出空格memo+= ;else /无中断不为空页面itoa(pageBlockz,CSnum,10);memo+=CSnum;memo+= ;output+=rn;output+=memo;m_Display.InsertString(m_Display.GetCount(),memo);if(metathesis)/有中断if(space)/有空页面,插入页面中断int m;for(z=0;zphysical_size;z+)if(priorityz=0)priorityz=physical_size;pageBlockz=addri;m=z;z=physical_size;else priorityz-=1;if(priorityphysical_size-1!=0) space=false;/无空页面memo= ;for(z=0;zphysical_size;z+)itoa(pageBlockz,CSnum,10);if(mz) memo+= ;else memo+=CSnum;memo+= ;memo+= 插入页面;failPageCount+;output+=rn;output+=memo;m_Display.InsertString(m_Display.GetCount(),memo);else/无空页面,替换页面中断for(z=0;zphysical_size;z+)if(priorityz=1)priorityz=physical_size;pageBlockz=addri;elsepriorityz-=1;memo= ;for(z=0;z=0;i-)pageBlocki=-1;/设置数组初值为-1priorityi=0;/设置数组优先级为0for(int z=1;z=physical_size;z+)str+=页块;itoa(z,CSnum,10);str+=CSnum;str+= ;str+=有无中断 页面置换形式;m_Display.InsertString(m_Display.GetCount(),str);for(i=0;itotalPageCount;i+)metathesis=true;for(int j=0;metathesis & jphysical_size;j+)if(addri=pageBlockj)metathesis=false;memo= ;for(z=0;zphysical_size;z+)if(pageBlockz=-1)/无中断且有空页面,空页面处输出空格memo+= ;else /无中断itoa(pageBlockz,CSnum,10);memo+=CSnum;memo+= ;output+=rn;output+=memo;m_Display.InsertString(m_Display.GetCount(),memo);if(metathesis)/有中断if(space)/有空页面,插入页面中断int m;for(z=0;zphysical_size;z+)if(priorityz=0)priorityz=physical_size;pageBlockz=addri;m=z;z=physical_size;else priorityz-=1;if(priorityphysical_size-1!=0) space=false;/无空页面memo= ;for(z=0;zphysical_size;z+)itoa(pageBlockz,CSnum,10);if(mz) memo+= ;else memo+=CSnum;memo+= ;memo+= 插入页面;failPageCount+;output+=rn;output+=memo;m_Display.InsertString(m_Display.GetCount(),memo);else/无空页面,替换页面中断for(z=0;zphysical_size;z+)if(priorityz=1)priorityz=physical_size;pageBlockz=addri;elsepriorityz-=1;memo= ;for(z=0;zphysical_size;z+)itoa(pageBlockz,CSnum,10);memo+=CSnum;memo+= ;memo+= 替换页面;failPageCount+;output+=rn;output+=memo;m_Display.InsertString(m_Display.GetCount(),memo);/将输出信息保存到磁盘文件void CPageMetathesisDlg:OnButtonSave() / TODO: Add your control notification handler code hereCFileDialog dlgFile(TRUE);HANDLE hFile;CString title, strFilter, fileName;VERIFY(title.LoadString(AFX_IDS_SAVEFILE);strFilter += Page Metathesis DATA File (*.DAT;*.dat);strFilter += (TCHAR)0; / next string pleasestrFilter += _T(*.DAT);strFilter += (TCHAR)0; / last stringdlgFile.m_ofn.Flags |= OFN_OVERWRITEPROMPT | OFN_CREATEPROMPT;CString strDefault;dlgFile.m_ofn.nMaxCustFilter+;dlgFile.m_ofn.lpstrFilter = strFilter;dlgFile.m_ofn.lpstrTitle = title;dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);if(dlgFile.DoModal() = IDOK)hFile = CreateFile(fileName,/ file nameGENERIC_WRITE,/ Only Write Permission0,/ cannot be sharedNULL,/ pointer to security attributesCREATE_ALWAYS,/ how to createFILE_ATTRIBUTE_NORMAL,/ file attributesNULL/ handle to template file );if( hFile = INVALID_HANDLE_VALUE)TRACE(Unable to create a file);fileName.ReleaseBuffer();DWORD sizeWritten;WriteFile( hFile, (LPCTSTR)m_Hint, m_Hint.GetLength(), &sizeWritten, NULL);Wri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 紧固件镦锻工团队目标分解执行考核试卷及答案
- 2026届陕西省汉中学市镇巴县数学七上期末联考模拟试题含解析
- 中药糖浆剂工岗位应急处置技术规程
- 2025版房屋租赁合同
- 2025设备租赁类合同范本
- 2025年农村简陋房屋租赁合同
- 个人房屋买卖合同 (15篇)
- 昆虫蛋白养殖行业现状与未来趋势预测报告
- 山东枣庄市实验中学2026届数学八年级第一学期期末教学质量检测模拟试题含解析
- 2025二手房买卖合同版
- GB/T 12643-2025机器人词汇
- 《酒店服务礼仪培训》课件
- 品质部IQC进料检验标准培训
- 挤出机生产线安全操作规程
- 药品采购与供应链管理
- 函数与基本初等函数 章节总结(解析版)-2025年高考数学一轮复习(新高考专用)
- 麻醉科2025年发展计划
- 分包商安全管理规定(4篇)
- 酒店工装合同范本
- 捷联惯导算法与组合导航原理讲义
- 新课标下的教学实践策略:基于“教学评”一体化的教学设计
评论
0/150
提交评论