操作系统实验报告Word格式文档下载.docx

上传人:b****3 文档编号:16291839 上传时间:2022-11-22 格式:DOCX 页数:13 大小:48.18KB
下载 相关 举报
操作系统实验报告Word格式文档下载.docx_第1页
第1页 / 共13页
操作系统实验报告Word格式文档下载.docx_第2页
第2页 / 共13页
操作系统实验报告Word格式文档下载.docx_第3页
第3页 / 共13页
操作系统实验报告Word格式文档下载.docx_第4页
第4页 / 共13页
操作系统实验报告Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

操作系统实验报告Word格式文档下载.docx

《操作系统实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

操作系统实验报告Word格式文档下载.docx

StructQueueNode*next;

}

并设全程量:

structQueueNode*ready_head=NULL,//ready队列队首指针

*ready_tail=NULL,//ready队列队尾指针

*blocked_head=NULL,//blocked队列队首指针

*blocked_tail=NULL;

//blocked队列队尾指针

(3)设计子程序:

start_state();

读入假设的数据,设置系统初始状态,即初始化就绪队列和阻塞队列。

dispath();

模拟调度,当就绪队列的队首进程运行一个时间片后,放到就绪队列末尾,每次都是队首进程进行调度,一个进程运行结束就从就绪队列中删除,当到t个时间片后,唤醒阻塞队列队首进程。

calculate();

就绪进程运行一次,usecpu加1,当就绪队列为空时unusecpu加1,CPU利用率为use_cpu/(use_cpu+unuse_cpu)。

5源代码:

#include<

stdio.h>

stdlib.h>

structPCB_type

intstate;

//进程状态

//2--表示"

执行"

状态

//1--表示"

就绪"

状态

//0--表示"

阻塞"

//运行需要的CPU时间(需运行的时间片个数)

};

structQueueNode{

structQueueNode*next;

structQueueNode*ready_head=NULL,//ready队列队首指针

*ready_tail=NULL,//ready队列队尾指针

*block_head=NULL,//blocked队列队首指针

*block_tail=NULL;

 

intuse_cpu,unuse_cpu;

voidstart_state()//读入假设的数据,设置系统初始状态

intn,m;

inti;

structQueueNode*p,*q;

printf("

输入就绪节点个数n:

"

);

scanf("

%d"

&

n);

输入阻塞节点个数m:

m);

p=(structQueueNode*)malloc(sizeof(structQueueNode));

p->

next=NULL;

ready_head=ready_tail=p;

for(i=0;

i<

n;

i++)

{

PCB.state=1;

输入就绪进程%d的pid和cpu_time:

i+1);

%d%d"

p->

PCB.pid,&

PCB.cpu_time);

ready_tail->

next=p;

ready_tail=p;

q=(structQueueNode*)malloc(sizeof(structQueueNode));

q->

block_head=block_tail=q;

m;

next=NULL;

PCB.state=0;

输入阻塞进程%d的pid和cpu_time:

q->

block_tail->

next=q;

block_tail=q;

\n处于就绪状态的进程有:

\n"

p=ready_head->

next;

i=1;

while(p)

{printf(“进程%d的pid和state和cpu_time:

%5d%5d%5d\n"

i,p->

PCB.pid,p->

PCB.state,p->

p=p->

i++;

voiddispath()//模拟调度

intx=0,t;

use_cpu=0;

unuse_cpu=0;

输入t:

t);

开始调度\n"

while(ready_head!

=ready_tail||block_head!

=block_tail)

if(ready_head!

=ready_tail)

ready_head->

next=p->

p->

if(ready_head->

next==NULL)

{

ready_tail=ready_head;

}

PCB.state=2;

printf("

进程%d调度\t"

p->

PCB.pid);

use_cpu++;

x++;

PCB.cpu_time--;

if(p->

PCB.cpu_time)

ready_tail=p;

else

printf("

进程%d完成\t"

free(p);

else

unuse_cpu++;

空闲一个时间片\t"

if(x==t&

&

block_head!

q=block_head->

block_head->

next=q->

q->

if(block_head->

{

block_tail=block_head;

}

ready_tail->

ready_tail=q;

x=0;

voidcalculate()//计算CPU利用率

\ncpu的利用率%.2f\n"

(float)use_cpu/(use_cpu+unuse_cpu));

voidmain()

{start_state();

dispath();

6运行结果:

7实验总结:

实验帮我复习了数据结构和C语言,且巩固课本知识,知道了如何定义结构体,如何在队列中增删节点。

模拟进程调度帮我们巩固了进程三状态之间的变迁。

懂得调式的重要性。

总之,我们明白了理论联系实际。

多看书,多上机。

实验三可变分区存储管理

通过这次实验,加深对存管理的认识,进一步掌握存的分配、回收算法的思想。

阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。

编写程序模拟实现存的动态分区法存储管理。

存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,存回收时假定不做与相邻空闲区的合并。

假定系统的存共640K,初始状态为操作系统本身占用64K。

在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的存空间;

在t2时间之后,作业C完成;

在t3时间之后,作业E请求50K的存空间;

在t4时间之后,作业D完成。

要求编程序分别输出t1、t2、t3、t4时刻存的空闲区的状态。

4.设计思想

模拟存分配和回收,要设置两个链队列,一个空闲区链和一个占用区链,空闲区链节点有起始地址,大小和指向下一节点的指针等数据域,占用区链节点有起始地址,大小,作业名和指向下一节点的指针等数据域,本实验用最坏适应算法,每次作业申请存都是从空闲链队头节点分配,如果相等,就删除空闲头结点,如果小于申请的,就不分配,否则就划分存给作业,剩下的存大小,重新插入空闲链队,按从大到小,接着把作业占用的存放到占用区链节点的末尾。

每次作业运行完,就要回收其占用的存大小,把作业节点按从大到小插入到空闲链队中。

5.源代码:

structfreelinkNode{

intlen;

intaddress;

structfreelinkNode*next;

structbusylinkNode{

charname;

structbusylinkNode*next;

structfreelinkNode*free_head=NULL;

//自由链队列(带头结点)队首指针

structbusylinkNode*busy_head=NULL;

//占用区队列队(带头结点)首指针

structbusylinkNode*busy_tail=NULL;

//占用区队列队尾指针

voidstart(void)/*设置系统初始状态*/

structfreelinkNode*p;

structbusylinkNode*q;

free_head=(structfreelinkNode*)malloc(sizeof(structfreelinkNode));

free_head->

//创建自由链头结点

busy_head=busy_tail=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));

busy_head->

//创建占用链头结点

p=(structfreelinkNode*)malloc(sizeof(structfreelinkNode));

address=64;

len=640-64;

//OS占用了64K

q=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));

name='

S'

;

/*S表示操作系统占用*/

len=64;

address=0;

busy_tail=q;

voidrequireMemo(charname,intrequire)/*模拟存分配*/

freelinkNode*w,*u,*v;

busylinkNode*p;

if(free_head->

next->

len>

=require)

p=(structbusylinkNode*)malloc(sizeof(structbusylinkNode));

name=name;

address=free_head->

address;

len=require;

busy_tail->

busy_tail=p;

else

Can'

tallocate"

w=free_head->

next=w->

if(w->

len==require)

free(w);

w->

address=w->

address+require;

w->

len=w->

len-require;

u=free_head;

v=free_head->

while((v!

=NULL)&

(v->

w->

len))

{u=v;

v=v->

u->

next=w;

next=v;

voidfreeMemo(charname)/*模拟存回收*/

intlen;

intaddress;

busylinkNode*q,*p;

q=busy_head;

p=busy_head->

while((p!

(p->

name!

=name))

{q=p;

p=p->

if(p==NULL)

%cisnotexist"

name);

if(p==busy_tail)

{busy_tail=q;

{q->

len=p->

len;

address=p->

free(p);

w=(structfreelinkNode*)malloc(sizeof(structfreelinkNode));

len=len;

address=address;

{u=v;

v=v->

voidpast(inttime)/*模拟系统过了time时间*/

过了时间%d后:

time);

voidprintlink()/*输出存空闲情况(自由链的结点)*/

freelinkNode*p;

存的空闲情况为:

p=free_head->

while(p!

=NULL)

{printf("

存的起始地址和存的大小%5d\t%5d:

address,p->

len);

intt1=1,t2=2,t3=3,t4=4;

start();

past(t1);

requireMemo('

A'

8);

B'

16);

C'

64);

D'

124);

printlink();

past(t2);

freeMemo('

past(t3);

E'

50);

past(t4);

);

6.运行结果:

7.实验总结:

巩固编程能力,和调式能力,复习课本知识,明白理论联系实际的重要性,动手能力非常重要,多看书,多独立思考,品味痛苦的过程,享受成功的喜悦。

院系:

数计学院

班级:

大类6班

学号:

*********

姓名:

明章辉

指导教师:

徐军利

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1