操作系统试验报告.docx

上传人:b****3 文档编号:26819350 上传时间:2023-06-23 格式:DOCX 页数:32 大小:174.66KB
下载 相关 举报
操作系统试验报告.docx_第1页
第1页 / 共32页
操作系统试验报告.docx_第2页
第2页 / 共32页
操作系统试验报告.docx_第3页
第3页 / 共32页
操作系统试验报告.docx_第4页
第4页 / 共32页
操作系统试验报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

操作系统试验报告.docx

《操作系统试验报告.docx》由会员分享,可在线阅读,更多相关《操作系统试验报告.docx(32页珍藏版)》请在冰豆网上搜索。

操作系统试验报告.docx

操作系统试验报告

计算机科学与应用系

课程设计报告

操作系统原理

Word资料

 

题目简述

需求分析

2.1设计思想

2.2要求

2.3任务

2.4运行环境

2.5开发工具

概要设计与详细设计

3.1系统流程图

3.2算法流程图

编码与实现

10

4.1数据结构和算法设计

4.2程序调试与截图..…

1.0

1.0

课程设计总结

17

参考文献

1.7.

附录

•18

 

动态分区分配算法的模拟

1题目简述

动态分区分配是根据进程的实际需要,动态地为之分配存空间。

在实现可变分区分配时,将涉及到分区分配中所用到的数据结构、分配算法和分区的分配与回收操作。

常用的数据结构有空闲分区表和空闲分区链两种,分区分配算法主要有首次适应算法、最佳适应算法、最坏适应算法等。

本次试验通过C语言进行编程调试并运行,形象地表现出动态分区分配方式,直观地展示了首次适应算法、最佳适应算法、最坏适应算法对存的释放和回收方式之间的区别。

加深了我对三种算法优缺点的理解,帮助我了解一些数据结构和分配算法,进一步加深我对动态分区存储器管理方式及其实现过程的理解。

主要问题在于,如何解决三种算法对存的释放和回收空间的表示。

动态分区分配又称为可变分区分配,这种分配方式并不是事先将主存划分成一块块的分区,而是在作业进入主存时,根据作业的大小动态地建立分区,并使分区的大小正好适适应作业的需要。

因此,分区中的大小是可变的,分区的数目也是可变的。

2需求分析

2.1设计思想

(1)首次适应算法(First_fit)

空闲分区链以地址递增的次序连接。

在分配存时,从联手开始顺序查找,直到找到一个大小能满足要求的空闲分区为止;然后再按照作业大小,从该分区划出一块存空间给请求者,余下的空闲分区仍然留在空闲链中。

若从链首直至链尾都找不到一个能满足要求的分区,则此次存分配失败。

(2)最佳适应算法(Best_fit)

它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。

为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。

该算法保留大的空闲区,但造成许多小的空闲区。

(4)最坏适应算法(Worst_fit)

用。

该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。

优点是可使剩下的空闲分区不至于太小,产生碎片的几率最小,对中、小作业有利,同时该算法查找效率很高。

(4)存回收(Free)

将释放作业所在存块若改为空闲状态,删除其作业名,变为空。

然后判断该空闲块是否与其

他空闲块相连,若释放的存空间与空闲块相连时,则合并其为同一个空闲链表,同时修改开始地址及分区大小。

2.2要求

 

利用结构体进行相关信息处理;

画出查询模块的流程图;

 

2.3任务

(1)

掌握为实现多道程序并发执行,操作系统是如何通过作业调度选择作业进入存;

系统如何为进入存的作业分配存空间,实现多道作业同时驻留存,就绪进程队列中的多个

进程是如何以分式方式共享CPU,作业运行完成离开系统时,系统如何进行存回收,计算进程周转时间;

画出所有模块的流程图;

程序分析与调试。

2.4运行环境

(1)WINDOWS2000/XP系统

(2)MicrosoftVisualC++6.0编译环境

2.5开发工具

C++语言

本程序采用C语言编写,在Windows下的VisualC++环境下编译,模拟可变分区存储管理方式的存分配与回收。

3概要设计与详细设计

3.1系统流程图

图3.1.1系统流程图

 

3.2.1存分配流程图

图321存分配流程图

 

图322首次适应算法流程图

 

图323最佳适应算法流程图

 

325存回收流程图

图3.2.5存回收流程图

4编码与实现

4.1数据结构和算法设计

相关数据结构定义:

空闲分区结构:

typedefstructfreearea()

线性链表结构:

typedefstructDuLNode()

带头结点存空间链表结构:

StatusInitblock()

存分配:

Statusalloc()

显示主存:

voidshow()

测试类(主函数类):

classTestForMemManage

4.2程序调试与截图

1)首界面

2)首次适应算法

测试数据:

为作业申请空闲区800KB。

作业1申请资源100kb,作业2申请资源120kb,作业3申请资源130kb,作业4申请资源14Okb,释放作业1和作业3,作业5申请资源160kb,这时,按照表从头开始查询,第一个找到满足条件的就停止查找,并分配资源。

运行结果如下图所示:

NPT■n-KHn才JtXtr,hHKRMMKt4旺FWltWtRMXWKFWMMHnKMrthMK

j首頁s昂仕适酋法s最妖适应算^^

me

谙揃A牺蠱匸.丄谙僵人屉113R讴号八1谨嬴人亟?

甘配的主存大小1单位土隣h分配成场

120

13A

5h

收一收

回追毗心画退

7Zi

HtfIP

2~k

宀引炷F八号■fT!

THV^atfpi

-谙谑请F

S

回週

..大矗•-旷岸Ulf.

谨请诫F.

 

2=咼收內g

谨输A®宙強仆’1

W影曇緒罢纭M单位z卡讨即庙0

K-V-HH^K-HMlHt-M-MKl»eMWSTHid--H-KWMM-M-mCMM-MVKH*廿SHEM■出C賈壇g:

;當笔

i青输lA您雷強作.J

++*+**+r*+»***++t****+*++****++■»+4***++

 

拭“

情"

£

1H

fl0分一

忡^:

已一

flB分悄:

3已

HiHp-fl3KQKHnm0B分-flH分-Bo一541-1■¥SJ」-誉*

31-L-K41匸-FfcIv-J_

+--_h■■■■I.:

-~-:

1■■■■-*X■H-?

ZITt_+_:

i;-J»-G一壘舊一"“片杞八存一尹一A底仝,伏一F型.」.状丁h耙*衣一…杞「啟一

■4■■■t1?

01tJ-*Tfttt■_■zt

九蠱一鼬蠱蠱

 

 

O:

;豐加耳矍冬||賈樹扌孚

靄竝器雋轧一KH

XM-H>-HHnMHK-kHHHH4KMP

1「耀内存2土0收丙^^

船錢郛己H*S由

愴输人您的龍作;3

+-t-t-l+-tl-t-t-t-i-t-|--H-If-t*t*+*-tt+-t1-t-■->■♦■■■+♦■-■-■■-

-*王存分配情加…

+Tt+T-r**■-■-+■*t*■-!

-+■■■■■-+-T*-»+-r-t-T-T-r+++-t*1-*-1-T*■+■-■-"冷区号:

E'ret

醴北如0

分凶大小1100hit

衣…d空阳

号,z址.iW

仆12aKE

盍r已分配

 

BnH

K瞬

0n

:

.

一n一

丁杓M已一

4血尘5号址尘区_^-叵碇li沂绘F技小力灶.灯長

 

3)最佳适应算法

测试数据:

为作业申请空闲区800KB。

作业1申请资源105kb,作业2申请资源115kb,作业3申请资源125kb,作业4申请资源135kb,释放作业2和作业4,作业5申请资源145kb,这时,在每次的分配存中,总是找到既满足要求又是最小空闲分区,然后分配资源,这样,就避免了“大材小用”的问题。

运行结果如下图所示:

总慕斎如竝追应算凄适应亘法

1:

堂取内讦

3=杳趟配

憲霜翌■好匡的主存夫小洋站叫1囱I功!

:

1i1__亘打竈韩尹认叭朮

H尘e-lu-rR

叩心.

卄剃

K

Mil

押S0

K

H

«1—E

沖:

号处

卄■花出理內P收

(Z--

.存

-.•尸泮

攀!

*L*n^±c^^-

i)In-j单一yxj小一t-bw一丄>耳】I号n一二好配匚畐一除的巻!

-二人人入遊育青八2

■A

刖退

琴配F“曇-二I*13/*

6W

 

 

卄+

 

 

e

1U5KU

2lUS115KB已分忻

y5力一

X1I

4

fX-Xfe

 

i:

富费骸鶴虫晶些2

KVHH-K-fe^-H-KVH-lTM-H-MnCKWCtr-M-anChEHK-K-M-ltKMirMMMirHM-ICK1:

箜龜[勺干2:

g炊內

3:

HVn'ff.«:

B出

歳A綢亂岸EM4

khHpcmHhkH-h7iH-H"rtHK址址衬nHhmkJrri-M-kK-HkhHf*rfM-H>i;E里応■琴2;凰臓內芦曲鏑邑3岀

♦■■■++♦+*-■--■->++t++*f-+-t■+-+++->■■■■■--■-■■-h-*-l-+-t*+*l-++

…干存分塑情呪十

巒;

Rp&e

les

JJ5KE

 

Mce底5135KB空闲

 

B11

KS

\—-

U55

5佣;;己

§3,闲«s5一丹?

^灯主_

 

4)最坏适应算法

测试数据:

为作业申请空闲区800KB。

作业1申请资源80kb,作业2申请资源100kb,作业3申请资源120kb,作业4申请资源140kb,释放作业1和作业3,作业5申请资源160kb,这时,在扫描整个空闲分区链表时,总是找到既满足要求又是最大空闲分区,然后把它分割给作业。

行结果如下图所示:

最坏适应算注

 

N;査看方配辭踌备;2诗WA芾垂务丽刖圭存大小t单位:

冋〉;1HB

晡M*JttchH-hJtKnHWTthmHhHHri”HHtttntKHH-taXX

"£墾玄伊2:

B收內

舌威噩欄鼠*"c

龄ir迪要分配曲主存丸忖年t问八12«分曹城巾

4大

■存壽的业慕请请專

1=kgnV子2=B收內仔

3:

«>&也也

谙抄燿日4fF=i胃』j勇/爲羸昱it芬卜弹位呃A讪

町■W.■MX.MJHJW屋鼻江具川■■,W耳H

.asL旳

…i存分配情况-1

ia

F区丈小=RRHH驳Ai已分鉅

片三

删弐;慣1=180

F、[7衣丿\:

laahb收.-=已吩'配

耙点:

30Uq'E才丿1*14nMB缺■妄*已弁配

p区号:

5血电地£t=44(1r区大小IIfiflKB'fr恙己*配

2:

Hl

 

1=好鼻力存

3:

鱼<7即列人扌酣議i佶塢A祝憂耶累眈-区叫;m

耳HhKXMK^mmkmhhM-h4KKTChMXnMKkAh斗Hn-rf-M

"外区吕:

free上给也汕B吩区犬小ISOK’:

K态I亨|tl

Fmo1R»12BKE空l+J

4

J(M»

14MKH

己为配

;5

:

44U

:

iceKD-EjT配

IFw«

IAna

5zeaKE

:

主闱

5课程设计总结

为期五周的课程设计,对于我个人来说是相当有难度的。

在设计的过程中,有很多问题不是很清楚,所以做起来就就很困难,刚开始的时候都有点无从下手的感觉。

很多时候在遇到问题时,基本知识都了解,但是就不知道怎么才能把它们都整合到一块,也就是说知识都是很零散的,没有一个完整的系统。

而且,又由于基础知识不牢固,使得我在这次的课程设计中感到更加力不从心。

在设计的过程中,每走一步就会发现,思路想出来很容易,但涉及到实现的时候,总是有点手无足措。

对于本次的课程设计,里面还有很多需要改进的地方。

一个程序的顺利出炉,少不了反复地调试和修改。

在调试的过程中,总是会发生很多错误,但在解决这些错误的时候,开始很模糊的概念就会变得越来越清晰。

其实很多错误都是很类似的,只要解决了一个,其余的就会迎刃而解了。

千里之行,始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义,我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。

这次的课程设计,使我树立了正确的设计思想,培养实事、严肃认真、高度负责的学习作风,加强操作能力的训练和培养严谨的科学作风更尤为重要。

在这次设计过程中,充分体现出自己单独设计课程的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。

选择作业进

通过本次实验,我掌握了实现多道程序并发执行,操作系统是如何通过作业调入存以及系统是如何为进入存的作业分配存空间,实现多道作业同时驻留存,就绪进程队列中的

多个进程是如何以分式方式共享CPU,作业运行完成离开系统时,系统如何进行存回收。

最后,感谢我们的荆立夏老师,老师严谨细致、一丝不苟的作风将会一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的教学思路给予我无尽的启迪;这次课程设计的每个实验细节和每个数据,都离不开老师您的细心指导。

而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。

祝愿老师您在以后的工作和生活中继续保持健康的身体和愉快的心情,再次感谢!

同时,也很感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊和温暖。

参考文献

 

[1]

玲玲.C语言程序设计[M].大学出版社,2010.1

[2]

谭浩强.程序设计基础与C语言.:

大学出版社,2010.1

[3]

严蔚敏、吴伟民等.数据结构(C语言版).北京:

清华大学出版社,2008.

[4]

汤子瀛、梁红兵等.《计算机操作系统第三版》.北京:

电子科技大学出版社,2009.

附录

 

源代码

#include#include#defineFree0//空闲状态

#defineBusy1//已用状态

#defineOK1

//完成

#defineERROR0//出错

#defineMAX_length800//最大存空间为800KBtypedefintStatus;

typedefstructfreearea//定义一个空闲区说明表结构{

intID;//分区号

longsize;//分区大小longaddress;//分区地址

intstate;//状态

}ElemType;

 

//

线性表的双向链表存储结构

 

typedefstructDuLNode//doublelinkedlist

{

ElemTypedata;

structDuLNode*prior;//前趋指针

structDuLNode*next;//后继指针

}DuLNode,*DuLinkList;

DuLinkListblock_first;//头结点

DuLinkListblock_last;//尾结点

Statusalloc(int);//存分配

Statusfree(int);//存回收

StatusFirst_fit(int,int);//首次适应算法

StatusBest_fit(int,int);//最佳适应算法

StatusWorst_fit(int,int);//最坏适应算法voidshow();//查看分配

StatusInitblock();//开创空间表

//开创带头结点的存空间链表

StatusInitblock()

block_first=(DuLinkList)malloc(sizeof(DuLNode));block_last=(DuLinkList)malloc(sizeof(DuLNode));

block_first->prior=NULL;

block_first->next=block_last;block_last->prior=block_first;

block_last->next=NULL;

block_last->data.address=0;

block_last->data.size=MAX_length;

block_last->data.ID=0;

block_last->data.state=Free;

returnOK;

//

存分配

Statusalloc(intch)

intID,request;cout<<"请输入作业(分区号):

";

cin>>ID;

cout<<"请输入需要分配的主存大小(单位:

KB):

";

cin>>request;

if(request<0||request==0)

"<

cout<<"分配大小不合适,请重试!

returnERROR;

if(ch==2)//选择最佳适应算法{

if(Best_fit(ID,request)==OK)

cout<<"分配成功!

"<

else

 

returnOK;

}

else//默认首次适应算法

if(First_fit(ID,request)==OK)

cout<<"分配成功!

"<

else

"<

cout<<"存不足,分配失败!

returnOK;

if(ch==3)//选择最坏适应算法

if(Worst_fit(ID,request)==OK)

cout<<"分配成功!

"<

else

 

cout<<"存不足,分配失败!

"<

 

returnOK;

}

else//默认首次适应算法

if(First_fit(ID,request)==OK)

cout<<"分配成功!

"<

else

cout<<"存不足,分配失败!

"<

returnOK;

//

首次适应算法

StatusFirst_fit(intID,intrequest)//传入作业名及申请量

{

//为申请作业开辟新空间且初始化

DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));

temp->data.ID=ID;

temp->data.size=request;

temp->data.state=Busy;

DuLNode*p=block_first->next;

while(p)

{

if(p->data.state==Free&&p->data.size==request)

//有大小恰好合适的空闲块

p->data.state=Busy;

p->data.ID=ID;

returnOK;

break;

if(p->data.state==Free&&p->data.size>request){

//有空闲块能满足需求且有剩余"

temp->prior=p->prior;

temp->next=p;

temp->data.address=p->data.address;

p->prior->next=temp;

p->prior=temp;

p->data.address=temp->data.address+temp->data.size;

p->data.size-=request;

returnOK;

break;

p=p->next;

}

returnERROR;

//

最佳适应算法

StatusBest_fit(intID,intrequest){

intch;//记录最小剩余空间

DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));

temp->data.ID=ID;

temp->data.size=request;temp->data.state=Busy;

DuLNode*p=block_first->next;

DuLNode*q=NULL;//记录最佳插入位置while(p)//初始化最小空间和最佳位置

if(p->data.state==Free&&

(p->data.size>request||p->data.size==request))q=p;

ch=p->data.size-request;

break;

p=p->next;

while(p)

if(p->data.state==Free&&p->data.size==request){

//空闲块大小恰好合适

p->data.ID=ID;

p->data.state=Busy;

returnOK;

break;

if(p->data.state==Free&&p->data.size>request)

//空闲块大于分配需求

if(p->data.size-request

ch=p->data.size-request;//更新剩余最小值

q=p;//更新最佳位置指向

p=p->next;

}

if(q==NULL)returnERROR;//没有找到空闲块

else

//找到了最佳位置并实现分配

temp->prior=q->prior;

temp->next=q;

temp->data.address=q->data.address;

q->prior->next=temp;

q->prior=temp;

q->data.address+=request;

q->data.size=ch;

returnOK;

//

最坏适应算法

StatusWorst_fit(intID,intrequest){

intch;//记录最大剩余空间

DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));

temp->data.ID=ID;

temp->data.size=request;temp->data.state=Busy;

DuLNode*p=block_first->next;

DuLNode*q

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

当前位置:首页 > 医药卫生 > 基础医学

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

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