操作系统实验四Word下载.docx
《操作系统实验四Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验四Word下载.docx(37页珍藏版)》请在冰点文库上搜索。
计算机操作系统课程设计
实验环境
编程环境:
VisualC++6.0
运行环境:
WindowsXP
主要数据结构及说明
利用数据结构的线性表链式存储结构,C++语言描述数据结构算法,先声明个头指针,头结点,利用C++语言函数定义节点,指针来控制变量,利用C++语言函数来,控制每个方法的执行,用数组模拟内存,用数组的地址模拟内存地址,用数组的大小模拟内存进程大小。
主要设计思想与算法(流程)
通过学习《计算机操作系统》(第三版)课程,通过在WINDOWS环境下,本次课程设计的主要思想就是利用高级语言C++模拟操作系统的实现。
模拟操作系统原理的实现进程控制,能更深刻地领会操作系统工作原理和操作系统实现方法,系统流程图如图所示:
代码:
#include<
iostream>
stdio.h>
typedefstructPCB{
charna;
structPCB*next;
}PCB,*CB;
typedefstructLNode{
charname;
intzt;
intjs;
structPCB*process;
//占用该节点的进程
structPCB*waitinglist;
//等待该节点的进程队列
structLNode*next;
//下一个节点
structLNode*parent;
}LNode,*LinkList;
typedefstructio{
intlx;
structio*next;
}io,*iolist;
LinkListCHCT=(LinkList)malloc(sizeof(LNode));
LinkListCOCT=(LinkList)malloc(sizeof(LNode));
LinkListDCT=(LinkList)malloc(sizeof(LNode));
iolistIO=(iolist)malloc(sizeof(io));
voidcsh()
{
iolistp=(iolist)malloc(sizeof(io));
p->
na='
K'
;
lx=1;
IO->
next=p;
iolistq=(iolist)malloc(sizeof(io));
q->
M'
next=q;
p=(iolist)malloc(sizeof(io));
T'
lx=2;
q=(iolist)malloc(sizeof(io));
P'
next=NULL;
iolistr;
for(r=IO->
next;
r!
=NULL;
r=r->
next)
printf("
%c"
r->
na);
printf("
\n"
);
r=IO->
LinkListp1=(LinkList)malloc(sizeof(LNode));
p1->
name='
1'
zt=0;
js=0;
r->
parent=p1;
process=NULL;
waitinglist=NULL;
DCT->
next=p1;
LinkListp2=(LinkList)malloc(sizeof(LNode));
p2->
2'
r=r->
parent=p2;
next=p2;
p1=(LinkList)malloc(sizeof(LNode));
3'
p2=(LinkList)malloc(sizeof(LNode));
4'
LinkListw;
for(w=DCT->
w!
w=w->
w->
name);
w=DCT->
w->
w=w->
COCT->
w=COCT->
parent=NULL;
CHCT->
}
intadd()
chard,c;
intk;
scanf("
&
c);
getchar();
iolistp1=(iolist)malloc(sizeof(io));
p=IO;
for(p;
p->
next!
p=p->
{
if(p->
na==c)
{
printf("
该设备已存在。
return0;
}
}
LinkListq;
LinkListq1=(LinkList)malloc(sizeof(LNode));
LinkListq2=(LinkList)malloc(sizeof(LNode));
if(p->
next==NULL)
p1->
na=c;
请输入设备类型。
1--输入2--输出3--输入输出。
scanf("
%d"
k);
getchar();
lx=k;
p->
q=DCT;
for(q;
q->
q=q->
%c"
q->
next->
请输入新DCT名字。
d);
q1->
name=d;
q->
next=q1;
parent=q1;
q2=q1;
q=COCT;
请输入你选择的COCT。
0(其他)"
if(d=='
0'
)
请输入新COCT名字。
scanf("
getchar();
q1=(LinkList)malloc(sizeof(LNode));
q1->
q->
q2->
q2=q1;
q=CHCT;
请输入你选择的CHCT。
for(q;
printf("
if(d=='
{
请输入新CHCT名字。
scanf("
getchar();
q1=(LinkList)malloc(sizeof(LNode));
q1->
q->
q2->
}
else
for(q=CHCT->
q!
{
if(q->
name==d)
{
q2->
parent=q;
return0;
}
}
else
for(q=COCT->
if(q->
q2->
return0;
}
return0;
intdelet()
chard;
inta=0;
LinkListp,q;
iolistp1=IO;
for(p1;
p1->
p1=p1->
if(p1->
na==d)
a=1;
p=p1->
parent;
break;
if(a==0)
该设备不存在。
return0;
a=0;
q=DCT;
for(q;
if(q->
next==p)
if(q->
zt==1)
请先结束进程。
return0;
p1->
next=p1->
p=q->
next=q->
break;
parent==p)
q=COCT;
p=q->
q=CHCT;
voidcx()
intd;
1--类型设备表2--设备进程表。
iolistp=IO->
if(d==1)
类型设备DCTCOCTCHCT\n"
for(p;
p!
%d%c%c%c%c\n"
p->
lx,p->
na,p->
parent->
name,p->
if(d==2)
LinkListq=DCT->
DCT的状态。
%d%c"
zt,q->
占用%c等待"
process->
CBp1=q->
waitinglist;
for(p1;
p1!
p1->
q=COCT->
COCT的状态。
q=CHCT->
CHCT的状态。
voidre()
chara,b,c,d;
a);
CBr,z;
na==a)
if(p==NULL)
else
LinkListq;
q=p->
zt==0)
该设备没有要做的进程。
d=q->
na;
LinkListq1=DCT->
for(q1;
q1!
q1=q1->
if(q1->
if(q1->
break;
if(q1->
waitinglist==NULL)
q1=q1->
q1->
q1=q1->
q1->
else
if(q1->
waitinglist->
{
r=q1->
q1->
process=r;
r->
}
else
z=q1->
for(z;
z->
z=z->
next);
r=z->
z->
else
r=q1->
r->
z=q1->
for(z;
r=z->
z->
}
process=z;
waitinglist=r;
r=z;
next=q1->
r=q1->
proces