操作系统分区Word文件下载.docx
- 文档编号:20973302
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:12
- 大小:64.75KB
操作系统分区Word文件下载.docx
《操作系统分区Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统分区Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
stdio.h>
malloc.h>
stdlib.h>
conio.h>
#definemaxPCB10
#definemaxPart10
#defineTRUE1
#defineFALSE0
typedefstructPCB_type
{
charname;
//进程名
intaddress,len,valid;
//进程所占分区起止、长度、该PCB有效标识(1有效,0无效)
}PCB;
typedefstructseqlist
PCBPCBelem[maxPCB];
//maxPCB为系统中允许的最多进程数
inttotal;
//系统中实际的进程数
}PCBseql;
typedefstructPartition
{
//分区起址、长度、有效标识(1空闲,0已分配)
}Part;
typedefstructPartlist
PartPartelem[maxPart];
//maxPart为系统中可能的最多分区数
intsum;
//系统中实际的分区数
}Partseql;
intlength=640;
//系统有640的空闲
PCBseql*pcbl;
Partseql*partl;
voidinitpcb(PCBseql*vpcbl,intadr);
//初始化进程表vpcbl
voidgetprint();
voidinitpart();
//初始化分区表vpartl
voidrequest(charname,intlen);
//进程name请求len大小的内存
voidrelease(charname);
//回收name进程所占内存空间
voidprint();
//输出内存空闲分区
/*
voidprintp()
inti;
for(i=0;
i<
(pcbl->
total);
i++)
{
printf("
%c\n"
pcbl->
PCBelem[i].name);
}
}
*/
voidinitpcb(PCBseql*vpcbl,intadr)//初始化进程表vpcbl
inti=1;
PCB*pcbelem;
inttel;
charc;
pcbelem=vpcbl->
PCBelem;
while(TRUE)
请输入第%d进程名称"
i++);
vpcbl->
total++;
scanf("
%c"
&
(pcbelem->
name));
请输入进程所需内存"
);
%d"
tel);
pcbelem->
len=tel;
address=adr+tel;
valid=1;
pcbelem++;
是否要继续输入进程(Enter-是Esc-否)\n"
fflush(stdin);
c=getch();
if(c==27)
{
break;
}
voidinitpart()
charc,name;
intlen;
printf("
请输入你的操作R.请求内存;
P.输出空闲分区;
S.强制进程结束;
(N/n).退出\n"
fflush(stdin);
c=getchar();
while(c!
='
N'
||c!
n'
)
{
if(c=='
R'
||c=='
r'
fflush(stdin);
//做输入的时候要清空缓冲区
printf("
请输入请求内存进程的名称,长度"
scanf("
%c,%d"
name,&
len);
request(name,len);
//进程请求内存
elseif(c=='
P'
p'
\t*****VIEWbegin*****\n"
getprint();
\t*****VIEWend*****\n"
S'
s'
请输入想要回收的进程名称\n"
name);
release(name);
请输入你的操作R.请求内存;
S.强制进程结束\n"
c=getchar();
}
voidinit4IOS(inttem)
Part*newPart=&
partl->
Partelem[0];
tem=tem>
0?
(tem<
length?
tem:
length):
0;
newPart->
address=0;
len=tem;
valid=1;
partl->
sum++;
------->
已为操作系统分配了%dkb内存\n"
tem);
newPart=&
Partelem[1];
address=tem;
length=tem=length-tem;
tem=tem<
(0):
tem;
valid=0;
为操作系统分配后剩余的内存%dkb内存\n"
intgetTagByPcb(charname)
inti=0;
for(;
if(name==pcbl->
PCBelem[i].name)
returni;
returnpcbl->
total+1;
//分配出去就会产生一个碎片将元素后移动一位
voidArrayToRightOne(inti)
intleng=partl->
sum;
while(leng>
i)
partl->
Partelem[leng].address=partl->
Partelem[leng-1].address;
Partelem[leng].len=partl->
Partelem[leng-1].len;
Partelem[leng].valid=partl->
Partelem[leng-1].valid;
leng--;
intfindBylen(intlen)
while(i<
sum)
if(partl->
Partelem[i].valid==0)
if(len<
=partl->
Partelem[i].len)
{
returni;
}
i++;
return0;
voidrequest(charname,intlen)
chartem;
//是name进程的下标
inttemBylen;
inttemByPcb;
temByPcb=getTagByPcb(name);
while(temByPcb>
pcbl->
total)
找不到进程%c,重新输入Y/N"
name);
tem=getchar();
if(tem=='
Y'
)
if(len>
PCBelem[temByPcb].len)
printf("
您请求的容量大于您进程最大要求量%d,"
PCBelem[temByPcb].len);
return;
if(tem=='
return;
//找到一块len内存
if(findBylen(len)==0)
//sort2part();
//收集内存代码没写
if((i=findBylen(len))==0)
警告内存已满无法分配\n"
//分配出去就会产生一个碎片将元素后移动一位10/16
ArrayToRightOne(i);
//直接对partl->
Partelem[i]赋值并加入一个碎片
temBylen=partl->
Partelem[i].len-len;
Partelem[i].len=len;
Partelem[i].valid=1;
//新的碎片
Partelem[i+1].address=partl->
Partelem[i].address+partl->
Partelem[i].len;
Partelem[i+1].len=temBylen;
Partelem[i+1].valid=0;
//更新pcb的状态和容量
pcbl->
PCBelem[temByPcb].address=partl->
Partelem[i].address;
PCBelem[temByPcb].len=pcbl->
PCBelem[temByPcb].len-len;
//更新pcb的len
PCBelem[temByPcb].valid=1;
voidrelease(charname)
intadress,len;
if((getTagByPcb(name))<
0)
找不到进程名%c\n"
return;
elseif(pcbl->
PCBelem[getTagByPcb(name)].valid=0)
%c还没有运行请先运行\n"
现在正回收%c的内存\n"
adress=pcbl->
PCBelem[getTagByPcb(name)].address;
len=pcbl->
PCBelem[getTagByPcb(name)].len;
while(i<
if(adress==partl->
Partelem[i].address)
partl->
Partelem[i].valid=0;
voidgetprint()
------空闲分区begin---------\n"
for(i=0;
第%d块空闲内存起止为%d,容量为%d\n"
i,partl->
Partelem[i].address,partl->
Partelem[i].len);
------空闲分区end---------\n"
voidmain()
intOSsize=40;
constintM=25;
pcbl=(PCBseql*)malloc(sizeof(PCBseql));
partl=(Partseql*)malloc(sizeof(Partseql));
sum=0;
total=0;
init4IOS(OSsize);
//为进程分配内存
initpcb(pcbl,OSsize);
initpart();
scanf("
tem);
实验结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 分区