武汉大学计算机学院
课程实验(设计)报告
专业(班):信安一班
学号: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)这个函数,
能清除键盘缓冲区的数据。
总的来说,通过内存管理这个实验,使我学会了如何申请一段空闲空间。
如
何给作业分配内存,并回收内存。
这个实验使我认识到了内存分配和回收的整个
过程,感受非常深刻。
用位示图管理磁盘存储空间i
一、实习内容
模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。
二、实习目的
磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。
用户作业在执行期间常常要在磁盘上建立文件或把已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。
一个文件存放到磁盘上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。
怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。
三、实验分析
连续的磁盘存储空间的分配和回收。
四、设计思想
(1) 为了提高磁盘存储空间的利用率,可在磁盘上组织成链接文件、索引文件,这类文件可以把逻辑记录存放在不连续的存储空间。
为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。
位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。
(2) 申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。
假设现在有一个盘组共8个柱面,每个柱面有2个磁道(盘面),每个磁道分成4个物理记录。
那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:
柱面号=字节号
磁道号= 位数/ 4
物理记录号= 位数% 4
(3) 归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。
按照(2)中假设的盘组,归还块在位示图中的位置计算如下:
字节号=柱面号
位数=磁道号⨯4+物理记录号
五、用到的数据结构及模块说明
int area[8][8]; 表示位示图,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。
apply()模块的功能为分配外存。
首先查找位示图,看是否磁盘空间够。
如果够,则将空闲的块分配,分配的磁盘物理地址如下转化:柱面号=字节号,磁道号= 位数/ 4,物理记录号= 位数% 4。
reclaim()模块的功能是回收外存。
归还块在位示图中的位置如下转化:字节号=柱面号,位数=磁道号⨯4+物理记录号。
view()模块的功能是查看磁盘存储位示图。
在主函数中完成了外存空间的初始化,并提供友好的操作输入界面,而且本程序经过不断的修改,提高了输入的健全性,当输入超出范围时能够提示错误并要求重新输入。
六、调试过程
实验平台为dev-cpp
申请分配大小为6的空间
位示图
回收柱面0,磁道0,物理记录2的块
位示图
又再申请了一个大小为2的空间,占用了刚才回收的柱面0,磁道0,物理记录2的块,及下一个空闲的块
七、实验总结
给老师检查后修正了老师提出的输入超出范围的情况,用switch()语句,解决了输入选择项是1-4外程序崩溃的问题。
总的来说,通过管理磁盘存储空间这个实验,使我学会了如何申请一段空闲空间。
如何给作业分配外存,并回收外存。
这个实验使我认识到了外存分配和回收的整个过程,感受非常深刻。