操作系统课设内存管理文档格式.docx
- 文档编号:22690536
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:31
- 大小:347.26KB
操作系统课设内存管理文档格式.docx
《操作系统课设内存管理文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统课设内存管理文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
最后的UI设计,采用的是VC++6.0自带的程序运行命令行形式。
3功能模块图
3.1opks1.c(基本分页管理系统)
3.2opks2.c(页面置换算法模拟)
4主要程序流程图
opks1.cmain()
create():
showyb():
showkb():
shownc();
work():
Opks2.cmain():
creat():
in();
print():
OPT();
FIFO():
LRU():
5程序说明
5.1开发及运行环境
本程序的开发及运行环境为MicrosoftVisualC++6.0。
5.2代码结构
5.2.1opks1.c(基本页面存储管理系统)
顶层目录:
opks1.c:
基本分页存储管理系统
二层目录:
intmain():
主函数
三层目录:
voidCreatA();
内存初始化
voidshowyb();
显示页表
voidshowkb();
显示快表
voidshownc();
显示内存块使用情况
5.2.1opks2.c(页面置换算法模拟)
opks2.c:
页面置换算法模拟
voidcreat();
初始化
voidOPT();
最佳置换算法
voidFIFO();
先进先出置换算法
voidLRU();
最近最久未使用置换算法
voidin();
数据输入函数
voidprint();
数据输出函数
6主要代码
6.1opks1.c(基本分页管理系统)
#include<
stdio.h>
stdlib.h>
string.h>
//#defineNULL0
intmax;
//逻辑和物理地址空间大小
int*A;
//内存物理块,0:
未使用,非0:
已使用
intcount;
//记录内存未使用物理块数
intkysize;
//块页大小
int*yb;
//页表
structkb
{
intyh;
//页号
intkh;
//块号
structkb*front;
structkb*next;
};
intmain()
//structLNode*L=NULL;
inti=0;
structkba,b,c,d,e,*head;
voidCreatA();
//内存初始化
//显示页表
voidshowkb();
//显示快表
voidshownc();
//显示内存块使用情况,不分进程
structkb*work(structkb*L);
CreatA();
a.kh=0;
a.yh=0;
b.kh=0;
b.yh=0;
c.kh=0;
c.yh=0;
d.kh=0;
d.yh=0;
e.kh=0;
e.yh=0;
head=&
a;
a.next=&
b;
b.next=&
c;
c.next=&
d;
d.next=&
e;
e.next=NULL;
a.front=NULL;
b.front=&
c.front=&
d.front=&
e.front=&
printf("
\n*******基本分页算法*******\n"
);
do
{
\n***********菜单*************\n"
printf("
1装入\n"
2查看页表\n"
3查看快表\n"
4查看内存\n"
5退出程序\n"
****************************\n"
请输入你的选择(select):
"
scanf("
%d"
&
i);
switch(i)
{
case1:
head=work(head);
break;
case2:
showyb();
case3:
showkb(head);
case4:
shownc();
case5:
谢谢使用\n\n"
exit(0);
}
}while(i!
=0);
return0;
}
voidCreatA(){
inti;
请输入逻辑和物理地址空间大小:
\n"
max);
请输入物理块大小:
kysize);
A=(int*)malloc((max-1)*sizeof(int));
count=max-1;
yb=(int*)malloc((max/kysize)*sizeof(int));
请手动输入页表\n"
for(i=0;
i<
(max/kysize);
i++)
yb[i]);
for(i=0;
=max;
A[i]=0;
}
//装入
structkb*work(structkb*L)
{
intlgad;
//逻辑地址
intname;
//代表了名,标志,数据
intk1,k2,k3;
//k1为页号,k2为偏移地址,k3为物理地址
structkb*p;
请输入逻辑地址:
lgad);
请输入数据\n"
name);
k1=lgad/kysize;
k2=lgad%kysize;
p=L;
while(p->
yh!
=k1&
&
p->
next!
=NULL)
{p=p->
next;
if(p->
=k1)
{p->
front->
next=NULL;
front=NULL;
next=L;
L->
front=p;
yh=k1;
kh=yb[k1];
elseif(p->
yh==k1&
next==NULL)
front!
next=p->
next->
front=p->
front;
front==NULL&
yh==k1)
k3=p->
kh*kysize+k2;
A[k3]=name;
returnL;
returnp;
voidshowyb()
printf("
\n****************************\n"
|页表|\n"
printf("
%d"
yb[i]);
voidshowkb(structkb*L)
|快表|\n"
while(p!
%d%d\n"
p->
yh,p->
kh);
p=p->
//显示内存块使用情况,不分进程
voidshownc()
|内存物理块分配情况|\n"
i<
max;
i++)
%d\t"
A[i]);
if(i%10==9)
}
6.2opks2.c(页面置换算法模拟)
#include<
malloc.h>
intznum;
//驻留集大小
intqnum;
//请求序列大小
int*zl;
//驻留集
int*qq;
//请求序列
intmain()
voidcreat();
//初始化
voidOPT();
voidFIFO();
voidLRU();
voidin();
voidprint();
creat();
\n******************菜单******************\n"
1请输入页面请求序列\n"
2请选择最佳(Optimal)置换算法\n"
3请选择先进先出置换(FIFO)置换算法\n"
4请选择最近最久未使用(LRU)置换算法\n"
OPT();
FIFO();
LRU();
voidcreat()
请输入驻留集大小:
znum);
zl=(int*)malloc(znum*sizeof(int));
znum;
zl[i]=0;
//输入数据
voidin()
请输入页面请求序列大小:
qnum);
qq=(int*)malloc(qnum*sizeof(int));
请输入页面请求序列:
qnum;
qq[i]);
voidprint()
zl[i]);
voidOPT()
intcout=0;
//记录缺页数
//floatv;
//缺页率
inti,j,q,max,t,y,z;
intbz;
int*jl=(int*)malloc(znum*sizeof(int));
y=i=0;
z=znum;
while(i<
z)
for(bz=0,j=0;
j<
i;
j++)
{if(zl[j]==qq[i]){bz=1;
y--;
z++;
break;
}}
if(bz==0){zl[y]=qq[i];
cout++;
}//若缺页
%d:
"
qq[i]);
print();
y++;
i++;
}//将前znum个不同的页装入驻留集
for(;
if(bz==0)//若缺页
for(q=i,j=0;
j++)//记录现驻留集中各页将来的最近访问时间
{for(;
q<
q++){jl[j]=q;
if(zl[j]==qq[q])break;
for(max=0,q=0;
q++)//找出最大的将来最近访问时间
{if(max<
jl[q])max=jl[q];
for(q=0;
q++)//找出该最大时间对应的页在数组中的位置
{if(jl[q]==max){t=q;
zl[t]=qq[i];
//将该页换出
cout++;
缺页率:
%d分之%d"
qnum,cout);
for(j=0;
zl[j]=0;
voidFIFO()
inti,j,t,y,z;
//int*jl=(int*)malloc(znum*sizeof(int));
for(;
for(j=1;
{t=j-1;
zl[t]=zl[j];
j=j-1;
zl[j]=qq[i];
//采用栈操作
voidLRU()
inti,j,q,t;
bz=0;
{if(zl[j]==qq[i]){bz=1;
if(bz==0){for(j=j-1;
j>
0;
j--){t=j-1;
zl[j]=zl[t];
}zl[j]=qq[i];
if(bz==1&
j!
=0){q=zl[j];
}zl[j]=q;
}//不缺页,且不为栈顶
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 内存 管理