兰州理工大学操作系统课设Word文档格式.docx

上传人:b****1 文档编号:1479928 上传时间:2023-04-30 格式:DOCX 页数:25 大小:216.52KB
下载 相关 举报
兰州理工大学操作系统课设Word文档格式.docx_第1页
第1页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第2页
第2页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第3页
第3页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第4页
第4页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第5页
第5页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第6页
第6页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第7页
第7页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第8页
第8页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第9页
第9页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第10页
第10页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第11页
第11页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第12页
第12页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第13页
第13页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第14页
第14页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第15页
第15页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第16页
第16页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第17页
第17页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第18页
第18页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第19页
第19页 / 共25页
兰州理工大学操作系统课设Word文档格式.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

兰州理工大学操作系统课设Word文档格式.docx

《兰州理工大学操作系统课设Word文档格式.docx》由会员分享,可在线阅读,更多相关《兰州理工大学操作系统课设Word文档格式.docx(25页珍藏版)》请在冰点文库上搜索。

兰州理工大学操作系统课设Word文档格式.docx

此设计为了了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。

2.函数的调用关系图

3.相关的各模块的伪码算法

typedefstruct

{inti;

//记录区号

char*t;

//记录区的起始地址

intflag;

//表明该区是否是空闲的

}page;

typedefstructnode

{intc;

//在头结点中存放的是该进程所占内存的大小

inti;

//在非头结点中存放的是进程号,在后续结点中存放的是该进程所占的内存的区号

intfg;

//表明该进程号已经存在,如果有新进程要编号必须用另外的编号

structnode*next;

}nd;

nd*head[MAX/4];

pagepg[MAX/4];

intinit(char*);

intgetm(int);

intreleasem(int);

intdisplay();

intsleep(int);

4.调试分析与测试结果

程序运行结果如下图4-1所示:

运行界面

如图4-1运行界面

自动演示界面如图4-2、4-3所示:

图4-2自动演示

图4-3自动界面

手动申请内存如图4-4所示:

图4-4手动申请内存

申请内存选择1,如图4-5所示:

图4-5申请内存

释放内存如图4-6所示:

图4-6释放内存

显示内存状况选择3,如图4-7所示:

图4-7显示内存

设计总结

每一次的实践,都会有很大的收获。

决定做这个题目的时候,就针对此题要解决的几个问题反复思考,重新翻开教科书把相关内容特别是算法原理认真细致的看了一遍,设想会遇到的问题。

在内存动态分配程序设计中,最优适应算法比首次要难一些,要加上对分配后该分区是否能最好地利用的判断。

再一个问题是回收时候的合并,对地址的修改不是很有把握。

着手写程序后,半天才理清回收的内存和上下邻合并的条件与关系,写此处的代码时,逻辑上比较混乱,反复错误反复修改了很多次才调试正确,这也是花了最多时间才得以正确实现的部分。

之前大多用的c语言,对结构体,对象等知识淡忘了很多,这一次的实践让我找回了很多学过的知识点,也弥补了很多的不足之处。

逻辑思维也得到了锻炼,写代码也不再像初学的时候那么繁琐,自己都能感觉到那一点点的进步,顿时也觉得充实起来。

还有一个难点就是为作业找到最佳空闲区,此处是参照了一些资料后,理清了条件,然后用一个while()两个if()语句循环嵌套就实现了此功能。

实践中也发现自身很多的不足,比如上理论课时认为已经理解了的算法原理在用代码实践时,发现还是有模糊和思考不周的地方。

实践中最困难的是以前没有做过界面,所以虽然程序在大家的努力下还算顺利地完成了,功能测试也通过了,可是界面的制作却成了比较大的难题。

好在之前在面向对象课程实验和程序设计课程设计中都用到过MFC,于是确定了用C++来制作界面。

但是因为以前界面程序编写较少,所以界面的编写遇到了许多困难,特别是实现内存分配表和空闲分区表的输出遇到了很大的挫折,最后在查阅资料、认真思考的基础上实现内存分配表和空闲分区表的输出,并最终作出了内存管理子系统。

在添加控件和消息映射的时候,问题不是很大,但是在对相应控件添加代码和给类添加成员函数的时候,要将源代码对应的部分添加进去,且要注意修包含的头文件。

这些地方一直频繁出错,或在功能得不到实现,大家一起边找资料边学习新的知识,通过很多次的尝试,终于做出了界面,虽然不太好看,而且功能也很简单,但这也是也经过大家很大努力才完成的。

学习着,收获着,并快乐着,这真是小组成员们共同的感触。

对于自身不足的地方,大家也有了比较清晰的认识,对未来的发展,也有了个参照,将遇到的困难一个个跨过,并最终完成此次课程设计,真的感觉很有收获很有成就感。

同时也培养了团队合作精神,几次的讨论,大大提升了我们合作的默契度,体会到合作的重要性。

动手能力也得到了提高,当然,我们的设计还有很多的不足之处,有些问题没能很好解决,但通过不断学习和实践,我们一定会做的更好。

致谢

三周的课设的结束了,在此期间李老师也很辛苦,为我们的课程设计给予引导,给了我们很多的帮助。

同时,当我们遇到困难时耐心地为我们作讲解并加以引导,我们感谢李老师对我们的悉心指导。

总之,此次内存管理系统课设遇到好多问题,不仅仅是C程序中的相关知识还有许多专业技术知识。

以后还要在这方面继续努力。

此外,我在克服它的过程中还得到了许多同学的鼓励和帮助。

在此也表示感谢。

参考文献

1.汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.

2.王清,李光明.《计算机操作系统》.冶金工业出版社.

3.孙钟秀等.操作系统教程.高等教育出版社

4.曾明. 

Linux操作系统应用教程.陕西科学技术出版社.

5.张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社.

6.孟静, 

操作系统教程--原理和实例分析.高等教育出版社

7.周长林,计算机操作系统教程.高等教育出版社

8.张尧学,计算机操作系统教程,清华大学出版社

9.任满杰,操作系统原理实用教程,电子工业出版社

附录:

源程序

#include<

stdio.h>

stdlib.h>

ctype.h>

time.h>

#defineMAX128

#defineS1

{

inti;

//记录页面号

char*t;

//记录页面的起始地址

intflag;

//表明该页面是否是空闲的

intc;

//在非头结点中存放的是进程号,在后续结点中存放的是该进程所占的内存的页号

intfg;

structnode*next;

//intf=0;

intmain()

char*p;

intn,m,j,k,i,l;

p=(char*)malloc(MAX*sizeof(char));

init(p);

for(i=0;

i<

MAX/4;

i++)

{

pg[i].i=i;

pg[i].t=p+i*4;

pg[i].flag=0;

}

//for(i=0;

100;

i++)printf("

%c----%d\n"

p[i],p[i]);

while

(1)

printf("

************************************************\n"

);

printf("

*********1.自动演示内存管理*********\n"

*********2.手动管理*********\n"

*********0.退出*********\n"

scanf("

%d"

&

l);

if(l==2)

{

while

(1)

{

printf("

**********************************************\n"

**************1.申请内存**************\n"

**************2.释放内存**************\n"

**************3.显示内存状况**************\n"

**************4.退出**************\n"

**********************************************"

输入选择:

"

scanf("

k);

switch(k)

{

case1:

system("

cls"

getm(0);

getchar();

break;

case2:

releasem(0);

case3:

display();

case0:

return0;

default:

printf("

输入错误,重新输入:

"

}

}

}

elseif(l==1)

longt;

inti;

srand((unsigned)time(&

t));

//用来设置随机时间的种子

system("

for(i=0;

5;

-"

sleep

(1);

printf("

->

sleep

(1);

现在"

开始"

演示"

内存"

管理\n"

4;

getm

(1);

display();

sleep(3);

elsebreak;

}

intinit(char*p)

head[i]=(nd*)malloc(sizeof(nd));

head[i]->

next=NULL;

fg=0;

MAX;

*(p+i)=95;

return0;

intgetm(intx)

inti,j,m,n,k=0,flag=0,a=0,b=0;

nd*p,*q;

charch;

longt;

srand((unsigned)time(&

if(x==0)

while

(1)

输入进程号:

/*

if(isdigit(ch)==0)

jingchenhaofeifa,chongxinshuru\n"

continue;

n=ch-48;

*/

scanf("

n);

if(n<

0||n>

10)

进程号非法,重新输入\n"

continue;

q=head[n];

if(head[n]->

fg==1)

{printf("

该进程号存在,重新输入!

\n"

continue;

elsehead[n]->

fg=1;

输入该进程申请的内存大小:

m);

head[n]->

c=m;

break;

if(x==1)

{

n=rand()%10;

fg==1){continue;

新进程--->

进程号:

%d\n"

n);

m=rand()%MAX;

if(m>

MAX/10)break;

该进程申请的内存大小:

m);

if(m%4==0)j=m/4;

elsej=m/4+1;

for(i=0,k=0;

if(pg[i].flag==0)k++;

if(k>

=j)

head[n]->

i=n;

if(a>

=j){break;

if(pg[i].flag==0)

{

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

q->

next=p;

p->

i=i;

q=p;

flag=1;

pg[i].flag=1;

if(a==j-1&

&

m%4!

=0)

{`

for(b=0;

b<

m%4;

b++)*(pg[i].t+b)=(n+48);

else

a++;

return0;

if(x==0){printf("

\n内存剩余空间不足,请先释放一部分内存!

!

\n\n\n"

return0;

//system("

\n内存剩余空间不足,开始释放一部分内存!

//sleep(S);

{

releasem

(1);

//display();

//sleep(S);

if(m%4==0)j=m/4;

elsej=m/4+1;

if(pg[i].flag==0)k++;

if(k<

j)continue;

else

head[n]->

for(i=0;

if(a>

if(pg[i].flag==0)

{

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

q->

p->

q=p;

p->

flag=1;

pg[i].flag=1;

if(a==j-1&

{

for(b=0;

}

else

a++;

}

return0;

intreleasem(intx)

intn=0,i=0,j=0,flag=0;

nd*p;

//*******************************************************************************

输入要释放内存的进程号:

fg==0){printf("

fg==0){continue;

释放进程%d的内存\n"

sleep(S);

p=head[0];

i=0;

if((*head[i]).i==n)

flag=1;

head[i]->

p=head[i]->

next;

while(p!

=NULL)

pg[p->

i].flag=0;

//for(j=0;

j<

j++)*(pg[i].t+j)=95;

p=p->

intdisplay()

FILE*fp;

fp=fopen("

d:

mem1.txt"

"

a++"

模拟内存分配状况\n"

if(pg[i].flag==1)

//printf("

%c"

*(pg[i].t));

fprintf(fp,"

*(pg[i].t+1));

*(pg[i].t+2));

fprintf(fp,"

*(pg[i].t+3));

else{printf("

____"

if((i+1)%4==0){printf("

}

\n\n"

起始地址:

pg[0].t);

进程状况:

if(head[i]->

{printf("

%d分配内存大小%d\n"

i,head[i]->

c);

fclose(fp);

intsleep(intx)

longt,j,k;

j=time(&

t);

k=time(&

if(k

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2