操作系统课程设计Word文档下载推荐.docx
- 文档编号:18025072
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:34
- 大小:335.87KB
操作系统课程设计Word文档下载推荐.docx
《操作系统课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
个进程"
endl;
请输入进程的pid"
cin>
>
running[sum+1].pid;
请输入新的进程的优先级"
cin>
running[sum+1].priority;
请输入新的进程的大小"
running[sum+1].size;
请输入新的进程的详情"
running[sum+1].detail;
running[sum+1].isrun=1;
sum++;
returnrunning[sum-1].isrun;
choose();
}
voiddisplay()
pid;
if(pid>
0&
&
pid<
=20&
running[pid].isrun==1)
进程的pid是:
"
running[pid].pid<
进程的优先级是:
running[pid].priority<
进程的大小是:
running[pid].size<
进程的相关信息:
running[pid].detail<
所查看运行进程不存在"
voidreplace()
intpid1,pid2;
请输入第一个替换进程的pid"
pid1;
请输入第二个替换进程的pid"
pid2;
if(pid1>
pid1<
running[pid1].isrun==1)
if(running[pid1].priority>
running[pid2].priority){
ready[20].pid=running[pid1].pid;
ready[20].priority=running[pid1].priority;
ready[20].size=running[pid1].size;
ready[20].detail=running[pid1].detail;
running[pid1].pid=running[pid2].pid;
running[pid1].priority=running[pid2].priority;
running[pid1].size=running[pid2].size;
running[pid1].detail=running[pid2].detail;
running[pid2].pid=ready[20].pid;
running[pid2].priority=ready[20].priority;
running[pid2].size=ready[20].size;
running[pid2].detail=ready[20].detail;
cout<
替换完成"
被替换进程的pid是:
ready[20].pid<
被替换进程的优先级是:
ready[20].priority;
被替换进程的大小是:
ready[20].size<
被替换进程的详情是:
ready[20].detail<
进程优先级不够大"
{cout<
voidkill()
intkpid;
请输入进程的pid:
kpid;
if(kpid>
kpid<
20&
running[kpid].isrun==1)
running[kpid].isrun=0;
voidchoose(){
intchoose;
是否继续操作?
继续,请输入1,退出:
按任意键"
请输入你的选择:
choose;
if(choose=1){
menu();
else{
exit(0);
voidmenu(){
intn,i;
n=1;
while(n==1)
system("
cls"
);
cout<
进程模拟"
1.创建进程2.查看进程信息"
3.撤销进程4.终止进程"
5.退出"
cin>
i;
switch(i)
{
case1:
create();
break;
case2:
display();
case3:
replace();
case4:
kill();
case5:
exit(0);
default:
n=0;
}
intmain()
menu();
return0;
运行结果如下:
任务三、基本存储器管理
一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。
当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。
当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。
主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收。
从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本次实验任务:
1、在可变(动态)分区管理方式下,采用最先适应算法。
2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。
conio.h>
#definen10//系统最大作业数
#definemaxsize20//空闲区最大内存
#defineminisize100
struct
{
floataddr;
//已分配分区起始地址
floatsize;
//已分配分区长度,单位为字节
intflag;
}useed[n];
//已分配区表
//空闲区起始地址
//空闲区大小
//0为空,1未分配
}frees[maxsize];
voidallo(chara,floatxk)
inti,k;
floatad;
k=-1;
for(i=0;
i<
maxsize;
i++)
if(frees[i].size>
=xk&
frees[i].flag==1)
if(k==-1||frees[i].size<
frees[k].size)
k=i;
if(k==-1)
{
cout<
无可用空闲区"
return;
if(frees[k].size-xk<
=minisize)
frees[k].flag=0;
ad=frees[k].addr;
xk=frees[k].size;
}
else
frees[k].size=frees[k].size-xk;
ad=frees[k].addr+frees[k].size;
i=0;
while(useed[i].flag!
=0&
n)
i++;
if(i>
=n)
error,未初始化"
if(frees[k].flag==0)
frees[k].flag=1;
frees[k].size=frees[k].size+xk;
useed[i].addr=ad;
useed[i].size=xk;
useed[i].flag=a;
voidfindc(charx)
inti,k,a,s,t;
floatS,L;
s=0;
while((useed[s].flag!
=x||useed[s].flag==0)&
s<
s++;
if(s>
=n)
没有找到该作业"
useed[s].flag=0;
S=useed[s].addr;
L=useed[s].size;
a=-1;
k=-1;
i=0;
while(i<
maxsize&
(a==-1||k==-1))
if(frees[i].flag==1)
if(frees[i].addr+frees[i].size==S)k=i;
if(frees[i].addr==S+L)a=i;
if(k!
=-1)
if(a!
frees[k].size=frees[a].size+frees[k].size+L;
frees[a].flag=0;
frees[k].size=frees[k].size+L;
frees[a].addr=S;
frees[a].size=frees[a].size+L;
t=0;
while(frees[t].flag==1&
t<
maxsize)
t++;
if(t>
=maxsize)
内存空闲表没有空间,回收空间失败"
useed[s].flag=a;
frees[t].addr=S;
frees[t].size=L;
frees[t].flag=1;
intmain()
inti,a;
floatxk;
frees[0].addr=10240;
frees[0].size=10240;
frees[0].flag=1;
for(i=1;
frees[i].flag=0;
n;
useed[i].flag=0;
while
(1)
选择操作:
endl<
0-退出"
1-分配内存"
2-回收已分配内存"
3-显示内存信息"
cin>
a;
switch(a)
case0:
case1:
cout<
输入作业名:
请输入作业大小:
xk;
allo(a,xk);
case2:
输入要回收分区的作业名"
findc(a);
case3:
输出空闲分区:
起始地址分区长度标志"
frees[i].addr<
frees[i].size<
frees[i].flag<
按任意键,输出已分配信息"
getch();
查看已分配分区:
if(useed[i].flag!
=0)
useed[i].addr<
useed[i].size<
useed[i].flag<
default:
输入有误!
!
return1;
任务五、死锁的避免
一、目的
在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。
所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。
我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;
而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。
二、内容
利用银行家算法来避免死锁的发生
iomanip>
#definemax_s20
#definemax_p100
intavailable[max_s];
intmax[max_p][max_s];
intallocation[max_p][max_s];
intneed[max_p][max_s];
intrequest[max_s];
intrequestPID;
intsource;
intprocess;
//1:
表示请求的资源>
还分配的资源
//2:
系统剩余的资源
//3:
表示不存在安全序列
//0:
成功
intbanker(intstSq[])
inti,j,k;
for(i=0;
i<
source;
i++)
if(request[i]>
need[requestPID][i])
available[i])
return2;
available[i]-=request[i];
allocation[requestPID][i]+=request[i];
need[requestPID][i]-=request[i];
intfinish[max_p]={0};
intwork[max_s];
intcurS;
work[i]=available[i];
for(k=0;
k<
process;
k++)
boolflag=false;
process&
!
flag;
if(finish[i]==0)
flag=true;
for(j=0;
j<
source&
flag;
j++)
if(need[i][j]>
work[j])
flag=false;
curS=i;
if(!
flag)
available[j]+=request[j];
allocation[requestPID][j]-=request[j];
need[requestPID][j]+=request[j];
return3;
finish[curS]=k+1;
work[j]+=allocation[curS][j];
j=0;
while(finish[j]!
=i+1)
j++;
stSq[i]=j;
voidsetCS()
source=3;
process=5;
inta[]={4,5,8};
intmax[20][100];
intm[][max_s]={
{8,5,4},
{5,3,3},
{10,1,3},
{3,3,3},
{5,4,4},
};
intal[][max_s]={
{1,2,1},
{3,1,1},
{4,1,3},
{3,2,2},
{1,1,3}
intre[]={0,2,2};
inti,j;
当前可用资源数:
available[i]=a[i];
setw(5)<
available[i];
进程所需资源的最大数量:
j++)
max[i][j]=m[i][j];
max[i][j];
进程已分配到资源量:
allocation[i][j]=al[i][j];
allocation[i][j];
进程还需的资源量:
need[i][j]=max[i][j]-allocation[i][j];
need[i][j];
requestPID=1;
进程"
requestPID<
正在请求的资源:
request[i]=re[i];
request[i];
}
voidmain()
setCS();
intstSq[max_p]={0};
银行家算法的演示"
interror=banker(stSq);
err
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计