操作系统课程设计报告模板.docx

上传人:b****8 文档编号:9300998 上传时间:2023-02-04 格式:DOCX 页数:20 大小:234.27KB
下载 相关 举报
操作系统课程设计报告模板.docx_第1页
第1页 / 共20页
操作系统课程设计报告模板.docx_第2页
第2页 / 共20页
操作系统课程设计报告模板.docx_第3页
第3页 / 共20页
操作系统课程设计报告模板.docx_第4页
第4页 / 共20页
操作系统课程设计报告模板.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

操作系统课程设计报告模板.docx

《操作系统课程设计报告模板.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告模板.docx(20页珍藏版)》请在冰豆网上搜索。

操作系统课程设计报告模板.docx

操作系统课程设计报告模板

东莞理工学院城市学院

《计算机操作系统》课程设计

 

题目:

班级:

2011级软件工程班

小组成员:

指导教师:

彭义春老师

时间:

2013.6.—2013.6.

地点:

东莞理工学院城市学院计算机与信息科学系制

2013年6月

目录

工作进度表2

组员分工2

1.目的及意义3

2.课程设计任务及要求4

2.1设计任务4

2.2设计要求4

3.算法及数据结构5

3.1算法总体设计思想5

3.2先来先服务(FCFS)模块5

3.3最短寻道时间优先算法(SSTF)模块6

3.4扫描算法(SCAN)模块7

3.5循环扫描算法(CSCAN)模块8

4.程序设计与实现10

4.1系统流程图10

4.2程序代码10

4.3实验结果15

5.结论19

6.收获、体会和建议20

参考文献20

工作进度表

时间

完成工作

完成人

周一

完成课程设计的需求分析

利锦荣,黄志彬

周二

画算法的程序流程图,设计并编写界面部分代码

利锦荣,黄志彬

周三

根据题目设计编辑代码

利锦荣,黄志彬

周四

将代码在linux环境中运行并调试

利锦荣

周五

编写课程设计报告和心得体会;

黄志彬

组员分工

201143502222利锦荣(组长)

2011502218黄志彬

1、设计并编写界面部分代码; 

2、负责扫描算法(SCAN)和循环扫描算法(CSCAN)的代码编写并调试;

3、将四个磁盘调度算法整合并和队友讨论,优化算法;

4、将代码在linux环境中运行并调试;

5、编写课程设计报告和心得体会;

1、负责先来先服务算法(FCFS)和最短寻道时间优先算法(SSTF)的代码编写并调试;

2、和队友共同讨论并优化算法;

3、画算法的程序流程图;

4、编写课程设计报告和心得体会;

1.目的及意义

本课程设计主要任务就是在多用户操作系统支持下建立多用户多级文件系统的设计。

具体说来,主要是为了达到下述实验目的:

(1)了解并掌握文件系统中用于管理所必须的数据结构。

(2)了解并掌握主要的文件操作命令的实现方法。

(3)通过课程实践掌握课程设计的方法和流程,并总结设计经验,提出更好的改进方法。

2.课程设计任务及要求

2.1设计任务

编程演示三种存储管理方式的地址换算过程,分别为分页方式的地址换算,分段方式的地址换算,段页式的地址换算。

分页方式通过逻辑地址算出页号与叶内地址,然后通过页表来实现向物理地址的转换。

分段方式通过段号和段内地址得到物理地址。

段叶式通过段号得到页表首地址,通过页号得到块号,进而得到物理地址。

2.2设计要求

1、分页方式的地址换算。

具体要求:

(1)随机生成页面大小,但一定为2的幂,系统随机生成一个至少有10行的页表,页号、块号从0开始。

(2)用户给定一个逻辑地址,首先显示此地址的页号和页内地址,然后显示是第几块,最后显示其物理地址。

2、分段方式的地址换算。

具体要求:

(1)由系统随机生成5个左右的段,并随机生成一个段表并显示。

(2)由用户给定一个逻辑地址,包括段号和段内地址,最后显示其物理地址。

3、段页式的地址换算。

具体要求:

(1)先由系统随机生成5个左右的段,然后再由系统随机生成页面大小,但一定为2的幂。

然后生成段表和页表,具体内容参照课本P140的图4-22。

(2)由用户给定一个逻辑地址,包括段号和段内地址,最后显示其物理地址

3.算法及数据结构

3.1算法总体设计思想

在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。

现实生活中,人多去申请一样东西的时候常常会遇到排队的情况,怎么去排队对于办事效率来说是很重要的。

在操作系统中也一样,若有多个方面的进程需要对磁盘进行访问时,也需要排队等待分配,这个时候磁盘调度算法的选择就显得很重要了。

访问磁盘有三个因素,分别是查找磁道时间、等待扇区时间和数据传输时间,其中查找时间是决定因素。

3.2分页系统模块

3.2.1功能

将随机生成的磁道号数组DiscL[]复制给临时数组RLine[],按数组RLine[]的顺序进行磁盘调度得到访问的系列,将前一个访问的磁道数与当前访问的磁道数的差值Temp累加起来得到总的寻道总长度All,再用All除以随机生成的磁道个数HanN得到平均寻道长度Aver。

3.2.2数据结构

intsp_p[30];//段内页号

intlength;//段长

intsp_l;//页表长度

3.2.3算法流程图

.

 

图3.1分页系统的地址变换机构算法流程图

3.3分段系统模块

3.3.1功能

将随机生成的磁道号数组DiscL[]复制给临时数组RLine[],通过一个内循环寻找与当前所在的磁道号之间的寻道长度最短的磁道号并输出,将前一个访问的磁道号与当前访问的磁道数的差值Temp累加起来得到总的寻道总长度All,再用All除以随机生成的磁道号个数TrackN得到平均寻道长度Aver。

3.3.2数据结构

intsp_p[30];//段内页号

intlength;//段长

intsp_l;//页表长度

3.3.3算法流程图

图3.2分段系统算法流程图

 

3.4段页式系统模块

3.4.1功能

将随机生成的磁道号数组DiscL[]复制给临时数组a[],然后对数组a[]进行由小到大排序,通过一个内循环寻找与当前所在的磁道号之间的寻道长度最短的磁道号并输出,根据磁头和当前访问的磁道号大小的比较来确定磁盘扫描方向,接着按照确定的方向输出数组a[]。

将前一个访问的磁道号与当前访问的磁道号的差值Temp累加起来得到总的寻道总长度All,再用All除以随机生成的磁道号个数TrackN得到平均寻道长度Aver。

3.4.2数据结构

intsp_p[30];//段内页号

intlength;//段长

intsp_l;//页表长度

3.4.3算法流程图

 

图3.3段页式系统算法流程图

4.程序设计与实现

4.1系统流程图

 

 

图4.1系统流程图

4.2程序代码

#include

#include

#include

#include

#defineMaddress1040384

#definepagebs1024

typedefstructpagetable{

intpage_p;

}pagetable;

typedefstructsectiontable{

intsection_l;

intsection_a;

}sectiontable;

typedefstructsptable{

intsp_p[30];//段内页号

intlength;//段长

intsp_l;//页表长度

}sptable;

intpage_size,page_number=1,page_dx;

intsection_number;

intsp_snumber,sp_psize,sp_dx;

pagetablept[50];

sectiontablest[50];

sptablesp[50];

voidcreatePT(){

inti,j,p;

srand((unsigned)time(0));

page_number=rand()%5+5;

page_size=(int)pow(2,rand()%5+9);//页面大小2的9~13幂,即512B~8K

page_dx=Maddress/page_size;//系统总页数

for(i=0;i

pt:

p=rand()%page_dx;

for(j=0;j

if(p==pt[j].page_p){gotopt;}

pt[i].page_p=p;

}

}

voidshowpage(){

inti;

printf("内存地址0-1040384\n");

printf("页面大小:

%d\n",page_size);

printf("页号\t\t块号\t\t块号始地址\n");

for(i=0;i

printf("%-5d\t\t%-5d\t\t%-5d\n",i,pt[i].page_p,page_size*pt[i].page_p);

}

intpage(){

intlogic,pnum,w;

printf("请输入给定的逻辑地址:

");

scanf("%d",&logic);

pnum=logic/page_size;

w=logic%page_size;

if(pnum>page_number){printf("该逻辑地址越界!

\n");return0;}

printf("页面大小为%d\n",page_size);

printf("-------------------------------------\n");

printf("页号\t\t块号\t\t页内地址\n");

printf("%-5d\t\t%-5d\t\t%-5d\n",pnum,pt[pnum].page_p,w);

printf("--------------------------------------\n");

printf("物理地址(块号*页面大小+页内地址):

%d\n\n",page_size*pt[pnum].page_p+w);

return1;

}

voidcreateST(){

inti,j,size,address,p;

srand((unsigned)time(0));

section_number=rand()%5+5;//5-10个段号

for(i=0;i

st:

size=rand()%7169+pagebs;//一个段长1024-8192

address=rand()%Maddress;//基地址从0-1048576

p=size+address;

if(p>Maddress){i--;continue;}

for(j=0;j

if(p>=st[j].section_a&&p<=(st[j].section_a+st[j].section_l))

{

gotost;}

}

st[i].section_a=address;

st[i].section_l=size;

}

}

voidshowsection(){

inti;

printf("内存地址0-1040384\n");

printf("段号\t\t基址\t\t段长\n");

for(i=0;i

printf("%-5d\t\t%-5d\t\t%-5d\n",i,st[i].section_a,st[i].section_l);

}

intsection(){

intlogic_n,logic_l,pnum,w;

printf("请输入给定的逻辑地址,如\"段号,段长\":

");

scanf("%d,%d",&logic_n,&logic_l);

if(logic_n>section_number||logic_l>st[logic_n].section_l)

{

printf("逻辑地址越界!

\n");

return0;

}

printf("该段段长为%d\n",st[logic_n].section_l);

printf("--------------------------------\n");

printf("段号\t\t基址\t\t位移量\n");

printf("%-5d\t\t%-5d\t\t%-5d\n",logic_n,st[logic_n].section_a,logic_l);

printf("--------------------------------\n");

printf("物理地址(基址+位移量):

%d\n\n",st[logic_n].section_a+logic_l);

}

voidcreateSPT(){

inti,j,address,p,t,q,k,pages;

srand((unsigned)time(0));

sp_snumber=rand()%5+5;//5-10个段号

sp_psize=(int)pow(2,rand()%2+9);//页大小为512-1024

pages=Maddress/sp_psize;//系统页面数

for(i=0;i

sp:

sp[i].length=rand()%3072+pagebs;//一个段长1024-8192

sp[i].sp_l=sp[i].length/sp_psize+1;//段页表的段内页表大小

for(t=0;t

sp[i].sp_p[t]=rand()%pages;

for(q=0;q<(i-1);q++)

for(k=0;k

if(sp[i].sp_p[t]==sp[q].sp_p[k])

{

gotosp;

}

for(k=0;k

if(sp[i].sp_p[t]==sp[i].sp_p[k])

{gotosp;}

}

}

}

voidshowSPT(){

inti,j;

printf("内存地址0-1040384\n");

printf("页面大小%d\n",sp_psize);

printf("段号\t\t段内页号\t段长\t\t块号\t\t块号始地址\n");

for(i=0;i

for(j=0;j

printf("%-5d\t\t%-5d\t\t%-5d\t\t%-5d\t\t%-5d\n",i,j,sp[i].length,sp[i].sp_p[j],(sp[i].sp_p[j]*sp_psize));

}

intSPT(){

intlogic_n,logic_p,logic_a,pnum,w;

printf("请输入给定的逻辑地址,如\"段号,段内页号,页内地址\":

");

scanf("%d,%d,%d",&logic_n,&logic_p,&logic_a);

if(logic_n>sp_snumber)

{

printf("段号超长!

\n");

return0;

}

elseif(logic_p>sp[logic_n].sp_l){

printf("页号超长!

\n");

return0;

}

elseif((sp[logic_n].sp_p[logic_p]+logic_a)>sp[logic_n].length){printf("页内地址超长!

\n");return0;}

printf("页面大小为%d\n",sp_psize);

printf("该段段长为%d\n",sp[logic_n].length);

printf("--------------------------------\n");

printf("段号\t\t段内页号\t块号\t\t页内地址\n");

printf("%-5d\t\t%-5d\t\t%-5d\t\t%-5d\n",logic_n,logic_p,sp[logic_n].sp_p[logic_p],logic_a);

printf("--------------------------------\n");

printf("物理地址(块号*页面大小+页内地址):

%d\n\n",sp[logic_n].sp_p[logic_p]*sp_psize+logic_a);

return1;

}

intmain(){

intnum;

createPT();

createST();

createSPT();

do

{

printf("-------三种存储管理方式的地址换算----------\n");

printf("*******1.显示页表***********************\n");

printf("*******2.显示段表***********************\n");

printf("*******3.显示段页表*********************\n");

printf("*******4.分页方式地址换算****************\n");

printf("*******5.分段方式地址换算****************\n");

printf("*******6.段页式地址换算******************\n");

printf("*******7.结束运行***********************\n");

printf("-----------------------------------\n");

printf("请输入选项:

");

scanf("%d",&num);

switch(num)

{case1:

showpage();

break;

case2:

showsection();

break;

case3:

showSPT();

break;

case4:

page();

break;

case5:

section();

break;

case6:

SPT();

break;

case7:

exit

(1);

}

}while

(1);

return1;

}

4.3实验结果

(1)linux环境中运行:

图4.2linux环境中运行

(2)选择1:

显示页表

图4.3显示页表结果截图

(2)选择4:

分页方式地址换算

图4.4分页方式地址换算结果截图

(4)选择2:

显示段表

图4.5显示段表结果截图

(5)选择5:

分段方式地址换算

图4.6分段方式地址换算结果截图

(6)选择3:

显示段页表

图4.7显示段页表结果截图

(7)选择6:

段页式地址换算

图4.8段页式地址换算截图

(8)选择0:

结束运行

图4.9结束运行截图

5.结论

编程演示三种存储管理方式的地址换算过程,分别为分页方式的地址换算,分段方式的地址换算,段页式的地址换算。

分页方式通过逻辑地址算出页号与叶内地址,然后通过页表来实现向物理地址的转换。

分段方式通过段号和段内地址得到物理地址。

段叶式通过段号得到页表首地址,通过页号得到块号,进而得到物理地址。

程序主要有三个功能,分别是分页方式的地址换算,分段方式的地址换算,段页式的地址换算。

Switch函数包含4个case语句,分别用page,Segment,SegPagt完成分页方式的地址换算,分段方式的地址换算,段页式的地址换算。

6.收获、体会和建议

利锦荣:

在这次的操作系统课程设计中,通过查找资料,我对这些知识理解更加深刻。

在这次课程设计作业的过程中由于在设计方面我的经验还不是很丰富,理论基础知识把握得有点不牢固,在设计中难免会出现这样那样的困难。

苦思冥想一段时间后,在这方面的知识比较缺乏,于是我们查阅网上资源,找到了方法,把任务解决了。

这些都暴露出了前期我在这些方面知识的欠缺和经验的不足。

对于我来说,收获最大的是方法和能力;那些分析和解决题目的能力。

在整个课程设计的过程中,我发现我们学生在经验方面十分缺乏,空有理论知识,没有理性的知识;有些东西可能与实际脱节。

但通过这次的课程设计,我们将学习的知识和实际的情况结合了起来,提高了我们对知识的理解,加强了我们对知识的运用能力。

黄志彬:

 这次课程设计,让我彻底明白了三种存储管理方式的地址换算算法,还让我知道做事情要心中个整体的概念,然后再去脚踏实地的去学习,得到自己想要的结果,开始的时候我没有进行深入的考虑,只是认为简单,但是做的时候就发现并不是这样,调试了很久都没没有成功,然后我就去查看资料,彻底的去了解要用到的知识点及算法,经过努力,我得到了自己期望的结果。

这次课程设计,不仅让我对操作系统这门课程有了更深入的了解,还给了我很大的启示,做一件事情,就要从根本上去了解它,然后寻求解决的方案,这样才能达到自己的目的,一味的去追求结果是个很不好的习惯,我们应该在解决问题的过程中去提高自己。

参考文献

[1]汤小丹,梁红兵,哲风屏,汤子瀛.计算机操作系统(第三版)[M].西安:

西安电子科技大学出版社,2007

[2]谭浩强.C程序设计(第四版)[M].北京:

清华大学出版社,2010

[3]严蔚敏,吴伟民.数据结构[M].北京:

清华大学版社,2002

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

当前位置:首页 > 高等教育 > 医学

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

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