os实验报告

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

武汉大学计算机学院

课程实验(设计)报告

专业(班):信安一班

学号:2008302530008

姓名:蔡璐墩

课程名称:操作系统设计

2010年10月25日

设计一个按时间片轮转法实现处理器调度的程序

一、实习目的

本实习模拟在单处理器环境下的处理器调度,加深了解处理器调度的工作。

二、实习内容

选择一个调度算法,实现处理器调度。

三、设计思想

进程在队列中,每个时间片调度算法总是上一个时间片中进程的下一个投入运行,进程每运行一次已运行时间加1,从而避免了一个作业长期占用处理机,下一时间片调度算法适时再调度,首先判断下一进程是否运行完,未运行完则执行,运行完则转到下一进程,直到就绪队列为空。

四、用到的数据结构

五、主函数

先是完成初始化,将进程指针链接成循环链表,为了能看出运行的过程,在每个时间片后加了个_sleep(600);

六、调试过程

实验平台为dev-cpp

进程p1,p2,p3,p4,p5分别标识为a,b,c,d,e。

七、实验总结

通过处理器调度这个实验,使我学会了处理器如何处理进程调度。这个实验使我认识到了进程调度的整个过程,感受非常深刻。通过实验基本上完成了预期的目的,整体上对于完成较大规模的程序设计有了一定把握,并且对已经学过的数据结构思想有了加深,但在程序编写时仍然存在一定的问题,例如:对基本的结构体掌握的不是很牢靠,同时对个别模块的分析欠妥,以致在编写代码是出现了没有想到的问题,没有很好的掌握一般软件设计的方法:对于编码风格的把握不是很好,写的代码很乱,调试起来不方便。

可变分区管理方式下采用首次适应算法实现主存分配和回收

一、实验目的

本实验模拟存储器分配回收的管理策略,从而对存储器不同管理方式下的管理策略和技术有一定的掌握。

二、实验内容

一个好的计算机系统不仅需要有一个足够容量的,存取速度高,稳定可靠的存储器,而且还应能合理使用这些存储器,当用户提出申请存储空间时,存储管理必须根据申请者的要求,按一定的策略,分析存储空间的使用情况,找出足够

的空闲区域,即使的分配给申请者,当作业撤离活主动归还时,则存储管理相应的收回作业占用空间或归还部分存储空间。本实验设计模拟可变分区管理方式下采用一定的算法,实现存储器的分配和回收。

三、实验分析

在可变分区管理下采用最先适应算法实现主存的分配和采用拼接技术实现主存的回收。

四、设计思想

1)可变分区方式是按作业需要的存储空间的大小分割分区的,当装入一

个作业时,根据作业申请需要的主存量查看是否有足够空间,若有则

分割一个分区分配给该作业,若无,则该作业不能装入。最初整个空

间没有建立许多个分区,只有一个大的分区(可用存储空间),当系统运

行一段时间后,随着作业的分配和空间的回收,整个空间将出现许多

大小不等的分区,有的被作业占用,有的则因作业的退出而回收可用

的空闲分区,当一个作业需要调入时,为了能为其尽快的分配空间,

存储管理必须采用一定的算法。用模块apply()实现。

2)当一个作业撤离时,作业占用的区域应归还,为此采用相应的回收算

法,拼接法就是对于回收区域插入空白链表的相应位置,并且看它是

否相邻的空闲区域能否合成一个较大的空闲区,能则拼接合并。用模

块reclaim()实现。

3)本实验采用首次适应算法,在分配中,为了查找方便及组织内存,为

此建立一个为分配区说明表,一个分配去双链表。存储管理采用首次

适应算法,即从分配去说明表开始找起,选择第一个足以满足请求的

空白分区,按申请的大小分配给作业。

五、用到的数据结构及模块说明

int area[256] 0表示存储块未分配,1表示已分配,这个数组表示主存空间分配情况,每次分配空间的时候,需查找这个数组。

apply()模块实现的功能是为作业分配空间。查询area[256],找到连续的空闲区,如果大小大于需要分配的空间大小,则分配,否则继续查找;当找到适合的连续的空闲区时,如果空闲区大于需要的大小则空闲区分裂为两部分,一部分分给作业。为作业分配空间的同时建立记录和记录的链接。

reclaim()模块的功能是回收作业占用的空间。输入作业名,查找链接表中有没有相同作业名的记录项,有则修改相应记录和area[]中数据,无则提示无此作业。释放作业占用的空间的同时,查看作业前后的空间是否是空闲区,如果是则合并成更大的空闲区,方法是修改链接表和对应的记录。

view()模块的功能是查看主存空间分配情况。能根据地址从低到高显示各个块是被哪个作业占用还是是空闲区。

在主函数中完成了主存空间的初始化,并提供友好的操作输入界面,而且本程序经过不断的修改,提高了输入的健全性,当输入超出范围时能够提示错误并要求重新输入。

六、调试过程

实验平台为dev-cpp

各种错误输入及警告

4个作业申请了4块空间

回收作业1和作业3后

为p1申请了一个大小为6的空间,根据首次适应算法,应在第二个空闲区给它分配,如果第二个空闲区大小为10,又在p1后留下一个大小为4的新空闲区

七、实验总结

三个实验中这个实验最麻烦,因为要用的链表和指针,很容易搞糊涂和弄错,

中间遇到了很多错误,很多错误是能运行通过但结果显示不对,查错的时候刚开

始感到莫名奇妙,后来通过复习c语言和数据结构才更正了错误。并学会了从运

行结果中分析错误可能出自哪里。

给老师检查后修正了老师提出的输入超出范围的情况,同时发现如果输入错

误键盘缓冲区的数据会影响下次运行结果,我上网查到了fflush(stdin)这个函数,

能清除键盘缓冲区的数据。

总的来说,通过内存管理这个实验,使我学会了如何申请一段空闲空间。如

何给作业分配内存,并回收内存。这个实验使我认识到了内存分配和回收的整个

过程,感受非常深刻。

相关文档
最新文档