2022年操作系统课程设计可变分区存储管理.docx

上传人:H****o 文档编号:12837676 上传时间:2022-04-26 格式:DOCX 页数:15 大小:349.92KB
返回 下载 相关 举报
2022年操作系统课程设计可变分区存储管理.docx_第1页
第1页 / 共15页
2022年操作系统课程设计可变分区存储管理.docx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《2022年操作系统课程设计可变分区存储管理.docx》由会员分享,可在线阅读,更多相关《2022年操作系统课程设计可变分区存储管理.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、工程技术学院电气信息系操作系统 课程设计报告专业:模拟实现可变分区储备治理一、设计目地在娴熟把握运算机分区储备治理方式地原理地基础上 ,利用 C 程序设计语言在 windows 操作系统下模拟实现操作系统地可变分区储备治理地功能 ,一方面加深对原理地懂得 ,另一方面提高依据已有原理通过编程解决实际问题地才能 ,为进行系统软件开发和针对实际问题提出高效地软件解决方案打下基础 .二、各功能模块分析实现1. 设计合理地数据结构来描述储备空间:1) 对于未安排出去地部分 ,用闲暇分区链表来描述 .struct freeListint startAddress;/* 分区起始地址 */ int size

2、;/* 分区大小 */struct freeList *next;/* 分区链表指针 */2) 对于已经安排出去地部分 ,由装入内存地作业占据 .struct usedListint startAddress;/* 分区起始地址 */ int jobID ;/* 分区中存放作业 ID */ struct usedList *next;/* 分区链表指针 */3) 将作业组织成链表 .struct jobListint id ;/* 作业 ID */int size;/* 作业大小(需要地储备空间大小)*/int status; /* 作业状态 0 : new job ,1 : in the m

3、emory , 2 : finished .*/struct jobList *next ;/* 作业链表指针 */以上将储备空间分为闲暇可占用两部分 ,在 usedlist 中设 jobID 而不设size,可以在不增加空间复杂度(与freelist 相比)地同时更便利地实现可变分区储备治理(从后面地一些函数地实现上可以得出这个结论).尽管设置 joblist 增加了空间复杂度 ,但它地存在 ,使得该程序可以便利地直接利用 C 盘中地 Job.txt文件.该文件可以认为是一个和其他进程共享地资源 .通过这个文件 ,其他进程写入数据供读取 .这中思想在操作系统设计中表达地许多 .2. 实现分区

4、储备治理地内存安排功能,挑选适应算法(首次适应算法,正确适应算法 ,最终适应算法 ,最坏适应算法) .基本原理分析:1) Best fit :将闲暇分区按大小从小到大排序,从头找到大小合适地分区 .2) Worst fit: 将闲暇分区按大小从大到小排序,从头找到大小合适地分区 .3) First fit :将闲暇分区按起始地址大小从小到大排序,4) Last fit :将闲暇分区按起始地址大小从大到小排序,由此,可将闲暇分区先做合适地排序后用对应地适应算法给作业安排存 储空间 .排序函数 order(bySize 为零就按分区大小排序,否就按分区起始地址; inc 为零从小到大排序 ,否就从

5、大到小排序;通过 empty 指针返回结果) .void orderstruct freeList *empty,int bySize,int incstruct freeList *p,*q,*temp ;int startAddress,size;forp = *empty - next ;p;p = p - next/* 按 bySize 和 inc 两个参数查找合适地节点 ,用 temp 指向它 */ fortemp = q = p;q;q = q - nextswitchbySizecase 0 : switchincbreak;break;case 0:ifq-size sizet

6、emp=q;default:ifq-size temp-sizetemp=q; break;default: switchincstartAddressbreak;temp-startAddressbreak;case 0:ifq-startAddress startAddresstemp=q; break;/* 交换节点地成员值 */ iftemp .= pstartAddress = p-startAddres;s size = p-size;p-startAddress = temp-startAddres;s p-size = temp-size;temp-startAddress =

7、 startAddres;s temp-size = size;3. 实现分区储备治理地内存回收算法:void insertFreeNodestruct freeList *empty,int startAddress,int size插入回收地空节点分区 ,处理回收分区与闲暇分区地四种邻接关系.况 */邻*/struct freeList *p,*q,*r ;forp = *empty ;p - next;p = p - next; /*处理链表尾部地邻接情ifp = *empty | p - startAddress + p - size next = p - next;/* 插入独立地闲

8、暇节点 */ p - next = r;return ;ifp - startAddress + p - size = startAddress/*与尾部上邻 */点 */p - size += size;/* 合并尾部节return ;q = *empty - next ;/* 处理链表首节点地邻接情形 */ ifstartAddress + size = q - startAddress/*与首节点下邻 */q - startAddress = startAddres;s q - size += size;/* 合并首节点 */else ifstartAddress + size star

9、tAddress/*与首节点不相邻 */elsemakeFreeNode&r,startAddress,size; r - next = *empty - next ;*empty - next = r ;/* 处理链表中间地邻接情形 */ whileq - next & q - startAddress next;ifp - startAddress + p - size = startAddress &q - startAddress = startAddress + size/*上下邻 ,合并节点 */p - size += size + q - size;p - next = q -

10、next;freeq;/* 删除余外节点 */大小*/else ifp - startAddress + p - size = startAddress &q - startAddress .= startAddress + size /*上邻,增加节点地p - size += size;else ifp - startAddress + p - size .= startAddress &q - startAddress = startAddress + size/*下邻 */始地址 */elseq - startAddress = startAddress;/*修改节点起q - size

11、+= size;/* 修改节点地大小 */* 上下不相邻 */makeFreeNode&r,startAddress,size; r - next = p - next;p - next = r;4. 当碎片产生时 ,进行碎片地拼接 .voidmoveFragmentstruct jobList*jobs,structfreeList*empty,structusedList*used址*/int size,status;struct usedList *p;int address = memoryStartAddress; /* 全局变量 ,初始化时安排储备空间始if*empty-next

12、= NULL/*闲暇分区链表为空 ,提示并返回 */printfnThe memory was used out at all.nMay be you should finish some jobs first orpress any key to try again .;getch;return;*/大小 */forp = *used - next ;p;p = p- next/* 循环地修改占用分区地始址p - startAddress = addres;sgetJobInfojobs,p - jobID,&size,&status ; /* 由作业 ID 获得作业address += s

13、ize;大小*/*empty-next-startAddress = address;/* 修改闲暇分区地首节点始址、*empty - next - size = memorySize - address - memoryStartAddress; *empty - next - next = NULL ;/* 删除首节点后地全部节点 */5. 闲暇分区队列显示: int showFreeListstruct freeList *empty6. 作业占用链表显示 : int showUsedListstruct jobList*jobs,struct usedList*used从头到尾显示 u

14、sed链,同时通过其中地作业 ID 在 jobs 中查对应地大小 .7. 从键盘输入作业到 D 盘地 JOB 文件: void inputJobvoid8. 从 JOB 文件中读出作业并创建作业链表:int makeJobListstruct jobList*jobs9. 显示作业链表: int showJobListstruct jobList *jobs10. 更新作业链表中作业地状态:int updateJobFilestruct jobList *jobs11. 依据作业链表更新 JOB 文件: int updateJobFilestruct jobList *jobs12. 为作业安

15、排储备空间、状态必需为0:int allocatestruct freeList *empty,int size13. 终止一个作业号为 id 地作业 ,释放储备空间 (由*startAddress返回空间地起始地址): int finishJobstruct usedList *used,int id,int *startAddress14. 插入释放地空间到used 链表中 (作业号为id,startAddress 由函数 13 返回):void insertUsedNodestruct usedList *used,int id,int startAddress15. 猎取作业地信息:

16、void getJobInfostruct jobList *jobs,int id,int *size,int *status16. 初始化储备空间起始地址、大小 : void iniMemoryvoid17. 挑选适应算法: char selectFitMethodvoid18. 依据参数 startAddress、size创建闲暇节点 ,由 empty 指针返回:void makeFreeNodestruct freeList *empty,int startAddress,int size19. 以要求地方式打开文件: void openFileFILE *fp,char *filen

17、ame,char *mode20. 显现严峻错误时显示信息并终止程序;void errorMessagevoid三、总体界面与程序流程分析DynamicZonalMemoryManagement其 中 1 、 Initializiation . 按 顺 序 利 用 了 openFile 、 iniMemory 、makeFreeNode、inputJob(挑选利用C 盘 JOB 文件时供应作业信息)、makeJobList、allocate、insertUsedNode(挑选利用 C 盘 JOB 文件时先将状态为 1 地作业放到储备空间中 ,以复原上次地模拟试验 ,或使本次模拟时不出错) se

18、lectFitMethod等自编函数 .2、Putjobintomemoryallocatememory按次序利用了 showJobList(选手动逐个为作业安排储备空间时)、openFile 、 order 、 allocate 、errorMessage 、 insertUsedNode 、updateJobStatusupdateJobFile函 数(自动为如上作业安排储备后状态地变化 )3 、Finishjobreusememory按次序利用了 openFile、showUsedList、 getJobInfo、insertFreeNode、 updateJobStatus、 upda

19、teJobFile、errorMessage等自编函数.(完成部分作业后作业)4 、 Show currentfree list按 顺 序 利 用 了 openFile 、showFreeList函数.(如下图为当前闲暇分区)5 、 Show current memory used by jobs 按 顺 序 利 用 了openFile、showUsedList函数.(如下图为当前作业占用地分区)6 、 Move fragment together 按 顺 序 利 用 了 openFile 、moveFragment函数.整理7、Exit 按次序利用了 openFile、exit0 函数.四、

20、主程序流程图创建分区头节点删除上次地结果文件键盘输入字符 stepstep=1字符 step为?step=2InitializiationPut job into memorystep=6 step=3step=4Move fragment togetherFinishstjeopb=5Show current memory used by jobsstep=7ExitShow current free list五、结果分析与总结程序中创建地两个文件1) Best fit算法验证:如下图安排大小为50 地 8 号作业 ,恰好占用大小为50 地闲暇而非大小为240地.2) Worst fit 算

21、法验证:如下图安排大小为50 地 8 号作业 ,占用大小为 100 闲暇而非大小为 70 地.3) Firstfit 算法验证:如下图安排大小为50 地 8 号作业 ,占用起始地址为 110 闲暇而非 350 地.4) Last fit 算法验证:如下图安排大小为50 地 8 号作业 ,占用起始地址为 350 闲暇而非 110 地.总结: 通过这次课程设计我练习了用 C 语言写系统软件 ,对 OS 中可变分区储备治理有了更深刻地 明白.在写程序地时候也遇到了一 些困难 . 比如在设计数据结构时特殊徘徊,总想找一个很合适地 .但是, 后来才知道 ,关键要多尝试 ,而空想是没有用地 .最终我证明了自己地设计地合理性 .仍有为了使程序更健壮,我尝试着将程序中地输入部 分全部改为字符(串) .胜利地防止了接受整型数据时输入字符后 引起地错误 ,使程序能接受任何输入而正常终止 .很遗憾地是由于时间问题 , 没有把这个模拟程序写成动画形式 ,仍可以加几句代码后实现动态地增加作业 .

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

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁