【课程设计】基于Linux的模拟存储器设计与实现说明书.doc

上传人:一*** 文档编号:4164036 上传时间:2019-10-01 格式:DOC 页数:9 大小:597.50KB
下载 相关 举报
【课程设计】基于Linux的模拟存储器设计与实现说明书.doc_第1页
第1页 / 共9页
【课程设计】基于Linux的模拟存储器设计与实现说明书.doc_第2页
第2页 / 共9页
【课程设计】基于Linux的模拟存储器设计与实现说明书.doc_第3页
第3页 / 共9页
【课程设计】基于Linux的模拟存储器设计与实现说明书.doc_第4页
第4页 / 共9页
【课程设计】基于Linux的模拟存储器设计与实现说明书.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、中北大学 操作系统课程设计 说 明 书 学 院 、 系 : 软件学院 专 业 : 软件工程 学 生 姓 名: 学 号: 设 计 题 目 : 基于 Linux 的模拟存储器管理 的 设 计 与 实 现 起 迄 日 期 : 指 导 教 师 : 2012 年 1 月 7 日 1 1 需求分析 软件设计功能:模拟内存及外存的分配,手动输入得到进程调度序列,根据页面置换算法 的选择进行相应的页面置换操作,以图表的形式在屏幕上输出各进程页面置换过程并且显 示出相应页面置换算法的缺页率及置换率,通过缺页率及置换率的对比看出各算法的优劣。 软件设计的目的:存储器管理是操作系统的重要功能之一,其中的页面置换算法

2、是虚拟存 储管理实现的关键,通过本次实验理解内存页面调度的机制,在模拟实现 FIFO、LRU、NRU 和 OPT 几种经典页面置换算法的基础上,比较各种置换算法的效率和优缺点,从而了解虚 拟存储实现的过程。 软件设计的任务:模拟实现四种经典页面置换算法,在屏幕上输出各进程页面置换过程, 每种页面置换算法的缺页率和置换率,对比各算法的优劣。 最终获得的成果:课程设计任务书,课程设计说明书 以及模拟存储器管理系统软件。 2 总体设计 2.1 当运行程序时,程序提示用户输入数据,当用户按照其输入数据后就对数据进 行分析, 分析其属于哪个进程,然后再选择算法,对其进行运算。 构件图: F I F O

3、算 法 模 块 存储器管理程序 L R U 算 法 模 块 N U R 算 法 模 块 O P T 算 法 模 块 2 2.2 主要函数有: 2.21:所有算法都会用到的函数有: ( 1) init():初始化 (2) getSequ():用于取得从控制台输入的序列 (3)destroySequ():初始化序列数组 (4)int classifyPageDetail(int pageValue):判断页号为 pageValue 的页 属于哪个进程 (5)setResult():求得缺页率与置换率 (6)selectType():选择操作的函数 2.22:各算法中的函数: 主要就是些数据的添加、

4、删除、修改以及判断的一些基本函数与各算法实现其特 定功能的函数,这些由小组中分配到任务的人自行制定需要的函数。 2.23:输出函数 (1) printSequ():输出之前输入的调度序列 (2) print1():输出各进程的调度序列及缺页率置换率 (3) printComInfo():输出各种算法的比较信息 (4) paintMian():输出主界面 3详细设计 小组分配做的是 LRU(Least Recently Used)算法即最近最久未使用置换算法。 LRU 算法是根据页面调入内存后的使用情况进行决策,选择最近最久未使用的页面予以淘 汰。 实现 LRU 算法采用了数组,用数组模拟计算机

5、中实现该算法所需要的硬件支持-寄存器。 初始数组: void InitArr(PROCESS *pro) int i; for(i=0;ipagei=(Page *)malloc(sizeof(Page); 判断指定页面所属哪个进程后调用 coreOfLru 函数,其中调用 sort2 函数判断页面是否在 内存中,根据指定页面在内存中的情况,调用 add2 和 update2 函数: int sort2(int value,PROCESS *pro) int i; for(i=0;istepNow;i+) if(pro-pagei!=NULL return -1; void add2(int

6、value,PROCESS *pro) int m; m=pro-stepNow; pro-pagem-addr=value; pro-pagem-time=0; void update2(int value,PROCESS *pro) int i,j; int max=0; for(i=0;ipagei)-timemax) max=(pro-pagei)-time; j=i; pro-pagej-addr=value; pro-pagej-time=0; void coreOfLru(int value,PROCESS *pro) int j,k; if(sort2(value,pro)co

7、unt+; if(pro-stepNowstepNow+; else pro-m+; update2(value,pro); if(pro-page0!=NULL) for(j=0;jstepNow;j+) 5 pro-detailpro-stepNowj=pro-pagej-addr; printf(“%d “,pro-detailpro-stepNowj); else int n=sort2(value,pro); pro-pagen-time=0; for(k=0;kpagek-time+; 调用 LRU 算法后求出置换率及缺页率,求出后销毁数组: void destroy2(PROCE

8、SS *pro) int i; for(i=0;istepNow;i+) free(pro-pagei); void destroyArr() if(pro1.page0!=NULL) destroy2( if(pro2.page0!=NULL) destroy2( if(pro3.page0!=NULL) 6 destroy2( 输入页面调度顺序(输入 0 或 45 之外的数并回车表示输入完毕): 输入页面掉度的顺序后,显示出页面调度的总数及显示出主操作界面,并选择操作序号: 7 选择操作序号 2 即 LRU 算法后,显示出各进程的页面置换过程及相应进程的调度页数, 缺页次数,缺页率,置换率

9、: 4.心得体会 8 这次的操作系统课程设计是在 Linux 平台下,采用 C 语言进行设计,并用 gcc 进行编译, 调试通过的。小组分配做的是基于 Linux 的模拟存储器的设计与实现,开始的困难就是不 清楚到底做什么,需求分析阶段花费较长时间,在如何模拟内存分配上小组成员存在很大 分歧,最后才弄明白设计的重点在于页面调度上而不是模拟内外存的分配上。再一次的用 实践证明了需求分析的重要性。小组成员每人实现一个算法,提炼出实现各算法的公共部 分,再整合。初次接触 Ubuntu,立刻熟悉 vi 命令以及如何使用 gcc 编译调试。深入掌握 了如何实现页面置换操作,纠正学习理论时的错误理解认识,同时又掌握了进程并发。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。