计算机操作系统报告
- 格式:doc
- 大小:699.00 KB
- 文档页数:33
淮阴工学院
计算机操作系统报告
姓名: 学号:
班级:
学院: 计算机与软件工程学院
专业: 计算机科学与技术
指导教师:
月
2017 年1
2
实验一:存储器的分配与回收算法实现
一、实验内容
1. 模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,
并不实际启动装入作业。
2. 采用最先适应法、最佳适应法、最坏适应法分配主存空间。
3. 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若
找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。
4. 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲
区,登在空闲区表中。
5. 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。
二、实验要求:
1.详细描述实验设计思想、程序结构及各模块设计思路;
2.详细描述程序所用数据结构及算法;
3.明确给出测试用例和实验结果;
4.为增加程序可读性,在程序中进行适当注释说明;
5.认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;
6.实验报告撰写要求结构清晰、描述准确逻辑性强;
三、实验过程
1.设计思想:
运用可变分区的存储管理算法设计主存分配和回收。一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。
设计思路:
利用链表对已有作业进行排序,并根据地址判断该作业状态。 2.所用数据库结构:
循环链表
3.测试用例和结果:
初始内存状况:(选择最坏适应法)
*******************************************
=开始地址= =大小= =结束地址= =状态=
*******************************************
80 60 140 0
*******************************************
30 40 70 0
*******************************************
0 20 20
*******************************************
第一次分配32,
第二次分配14,
第三次分配23
最终结果:
空闲内存如下:
********************************************************
=开始地址= =大小= =结束地址= =状态=
********************************************************
44 26 70 0
********************************************************
0 20 20 0
********************************************************
135 5 140 0
********************************************************
已分配区如下:
**************************************************************
开始地址大小结束地址状态进程号
**************************************************************
80 32 112 1 1
**************************************************************
112 23 135 1 1
**************************************************************
30 14 44 1 2
**************************************************************
4.注释已在代码中
5.实验总结:
存储器的分配与回收算法实现方法,采用最先适应法、最佳适应法、最坏适应法分配主存空间。当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。
本次实验对于队列数据结构有些陌生,发现自己对课程的掌握不太牢固,课后应进行仔细的复习,加深印象。对某些算法的理解不太透彻,应该巩固完善。在网络和同学的帮助下最终得以解决。并使我更加深刻的了解了计算机操作系统中内存分配的执行过程,内存回收的执行过程的方式。对以后的学习和应用奠定了良好的基础。
6.实验源代码:
#include
#include
#include
#include
#include
//链式结构
typedef struct rt
{
//起始地址
int startaddress;
//内存区大小
int size;
//内存区状态
int state;
struct rt *next;
struct rt *last;
//已分配区的进程号
int thread;
}memory;
//空闲区链表
memory *head=NULL;
//已分配区链表
memory *top=NULL;
//全局进程号
int threadnum;
//按首地址排序
void sort()
{
//循环指针变量
memory *p,*q;
int r;
int t;
//交换记录变量
int s;
p=head;
//冒泡排序
for(p=p->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(q->startaddress
{
t=p->startaddress;p->startaddress=q->startaddress;q->startaddress=t;
s=p->size;p->size=q->size;q->size=s;