操作系统实习报告文档格式.doc
《操作系统实习报告文档格式.doc》由会员分享,可在线阅读,更多相关《操作系统实习报告文档格式.doc(23页珍藏版)》请在冰豆网上搜索。
四、数据结构及符号说明
进程的定义:
structpcb
{/*定义进程控制块PCB*/
charname[10];
/*进程名*/
charstate;
/*进程状态,就绪或者完成*/
intsuper;
/*进程优先级*/
intneedtime;
/*进程所需时间*/
intruntime;
/*进程已完成时间*/
structpcb*link;
/*指向下一进程*/
}
函数说明:
1.voidinsert()
功能:
进程优先级排列函数,比较进程优先级,将其插入适当的位置。
参数:
super,依据进程优先级super来确定进程的插入位置。
调用:
被进程控制块函数和进程就绪函数调用。
2.voidinput()
进程控制块函数
num,i,name,super,needtime
主函数main()调用
3.voiddisp(PCB*pr)
进程显示函数,用于显示当前进程。
name,state,super,needtime,runtime
被进程查看函数check()调用
4.voidcheck()
进程查看函数,用于显示当前运行进程和就绪队列状态。
PCB*prpr=ready
被主函数main()调用
5.voiddestroy()
进程撤消函数,用于当进程运行结束时,撤消进程。
p->
name
被进程就绪函数running()调用
6.voidrunning()
进程就绪函数,当进程运行时间到,置进程就绪状态。
runtime
7.main()
主函数
五、程序流程图
六、实验源程序
#include<
stdio.h>
stdlib.h>
conio.h>
#definegetpch(type)(type*)malloc(sizeof(type))
charname[10];
charstate;
intsuper;
intneedtime;
intruntime;
structpcb*link;
*ready=NULL,*p;
typedefstructpcbPCB;
voidsort()/*建立对进程进行优先级排列函数*/
{
PCB*first,*second;
intinsert=0;
if((ready==NULL)||((p->
super)>
(ready->
super)))/*优先级最大者,插入队首*/
{
p->
link=ready;
ready=p;
}
else/*进程比较优先级,插入适当的位置中*/
first=ready;
second=first->
link;
while(second!
=NULL)
{
if((p->
(second->
super))/*若插入进程比当前进程优先数大,*/
{/*插入到当前进程前面*/
p->
link=second;
first->
link=p;
second=NULL;
insert=1;
}
else/*插入进程优先数最低,则插入到队尾*/
{
first=first->
second=second->
}
if(insert==0)first->
}
intinput()/*建立进程控制块函数*/
inti,num;
printf("
\n请输入进程数?
"
);
scanf("
%d"
&
num);
for(i=0;
i<
num;
i++)
printf("
\n进程号P%d:
\n"
i);
p=getpch(PCB);
\n输入进程名:
scanf("
%s"
p->
name);
\n输入进程优先数:
super);
\n输入进程运行时间:
needtime);
runtime=0;
state='
w'
;
link=NULL;
sort();
/*调用sort函数*/
}
returnnum;
voiddisp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/
\nqname\tstate\tsuper\tndtime\truneedtime\n"
|%s\t"
pr->
|%c\t"
state);
|%d\t"
runtime);
voidcheck()/*建立进程查看函数*/
PCB*pr;
\n****当前正在运行的进程是:
/*显示当前运行进程*/
disp(p);
pr=ready;
\n****当前就绪队列状态为:
/*显示就绪队列状态*/
while(pr!
disp(pr);
pr=pr->
voiddestroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/
printf("
\n进程[%s]已完成.\n"
free(p);
voidrunning()/*建立进程就绪函数(进程运行时间到,置就绪状态*/
(p->
runtime)++;
if(p->
runtime==p->
needtime)
destroy();
/*调用destroy函数*/
else
(p->
super)--;
/*调用sort函数*/
main()/*主函数*/
intlen,h=0;
charch;
len=input();
while((len!
=0)&
&
(ready!
=NULL))
ch=getchar();
h++;
\nTheexecutenumber:
%d\n"
h);
p=ready;
ready=p->
R'
check();
running();
\n按任一键继续......"
\n\n进程已经完成.\n"
ch=getchar();
实习二主存空间的分配和回收
主存储器空间的分配和回收。
通过本实习帮助理解在不同的存储管理方式下应怎样进行存储空间的分配和回收。
第一题:
在可变分区管理方式下采用首次适应算法实现主存分配和回收。
(1)可变分区方式是按作业需要的主存空间大小来分割分区的。
当要装入一个作业时,根据作业需要的主存容量查看是否有足够的空闲空间,若有,则按需分配,否则,作业无法装入。
假定内存大小为128K,初始状态见右图。
空闲区说明表格式为:
起始地址——指出空闲区的起始地址;
长度——一个连续空闲区的长度;
状态——有两种状态,一种是“未分配”状态,另一种是“空表目”状态。
(2)采用首次适应算法分配。
运行时,输入一系列分配请求和回收请求。
四、程序流程
为了说明哪些区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,格式如下:
起址
长度
状态
第一栏
14K
12K
未分配
第二栏
32K
96K
M
空表目
其中:
起址——指出一个空闲区的主存起始地址。
长度——指出从起始地址开始的一个连续空闲的长度。
状态——有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的
分配算法流程图:
回收算法流程图:
#definen10/*假定系统允许的最大作业为,假定模拟实验中n值为10*/
#definem10/*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/
#de