《操作系统》实验报告.docx

上传人:b****8 文档编号:9528199 上传时间:2023-05-19 格式:DOCX 页数:115 大小:1.08MB
下载 相关 举报
《操作系统》实验报告.docx_第1页
第1页 / 共115页
《操作系统》实验报告.docx_第2页
第2页 / 共115页
《操作系统》实验报告.docx_第3页
第3页 / 共115页
《操作系统》实验报告.docx_第4页
第4页 / 共115页
《操作系统》实验报告.docx_第5页
第5页 / 共115页
《操作系统》实验报告.docx_第6页
第6页 / 共115页
《操作系统》实验报告.docx_第7页
第7页 / 共115页
《操作系统》实验报告.docx_第8页
第8页 / 共115页
《操作系统》实验报告.docx_第9页
第9页 / 共115页
《操作系统》实验报告.docx_第10页
第10页 / 共115页
《操作系统》实验报告.docx_第11页
第11页 / 共115页
《操作系统》实验报告.docx_第12页
第12页 / 共115页
《操作系统》实验报告.docx_第13页
第13页 / 共115页
《操作系统》实验报告.docx_第14页
第14页 / 共115页
《操作系统》实验报告.docx_第15页
第15页 / 共115页
《操作系统》实验报告.docx_第16页
第16页 / 共115页
《操作系统》实验报告.docx_第17页
第17页 / 共115页
《操作系统》实验报告.docx_第18页
第18页 / 共115页
《操作系统》实验报告.docx_第19页
第19页 / 共115页
《操作系统》实验报告.docx_第20页
第20页 / 共115页
亲,该文档总共115页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《操作系统》实验报告.docx

《《操作系统》实验报告.docx》由会员分享,可在线阅读,更多相关《《操作系统》实验报告.docx(115页珍藏版)》请在冰点文库上搜索。

《操作系统》实验报告.docx

《操作系统》实验报告

 

《操作系统》实验报告

 

时间:

2013年11月19日——2013年12月11日

地点:

科技楼423室

班级:

计科1111班

学号:

姓名:

电话:

上交时间:

2013年12月11日

 

注意:

所有程序都应有一定的注释说明,用VC实现,附上实验结果。

 

实验1:

进程管理

要求:

编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;撤销某个进程。

提示:

1、进程状态简单处理为:

0为不在内存,1为在内存,2为阻塞,3为挂起。

2、撤销进程指将进程的状态从运行变为阻塞。

3、程序的结构可以处理为在主函数中用switch语句调用各种表示进程管理功能的函数。

 

源程序代码:

#include

#include

#include

#include

#include

usingnamespacestd;

constMax=100;

intTread[3][Max];//[号码][大小][状态]

intn=-1;

intmem=64;

inta;

voidT()

{

cout<<"**********************************"<

cout<<"*进程演示系统*"<

cout<<"**********************************"<

cout<<"*1.创建进程*"<

cout<<"*2.调入内存*"<

cout<<"*3.杀死进程*"<

cout<<"*4.查看进程*"<

cout<<"*5.退出*"<

cout<<"----------------------------------"<

cout<<"<提示:

状态0为不在内存,1为在内存,2为阻塞,3为挂起。

>"<

cout<<"请输入(1—5):

"<

}

voidmain()

{

while

(1)

{

T();

intsw=0;

cin>>sw;

switch(sw)

{

case1:

n++;

cout<<"请输入进程号码:

";

cin>>Tread[0][n];

cout<

cout<<"请输入进程大小:

";

cin>>Tread[1][n];

cout<

Tread[2][n]=0;

cout<<"操作成功!

"<

cout<

break;

case2:

cout<<"进程号"<

for(a=0;a<=n;a++)

{

cout<

}

cout<<"将几号进程调入内存?

"<

intp;

intq;

cin>>q;

for(a=0;a<=n;a++)

{

if(Tread[0][a]==q&&Tread[1][a]!

=1)

{

if(mem>Tread[1][a])

{

Tread[2][a]=1;

mem=mem-Tread[1][a];

}

else

{

cout<<"内存不够!

"<

cout<<"请选择要挂起的进程:

(0结束)"<

cout<<"进程号"<

for(a=0;a<=n;a++)

{

cout<

}

cin>>p;

if(p!

=0)

{

for(q=0;q<=n;q++)

{

if(p==Tread[0][q])

{

Tread[2][q]=3;

mem=mem+Tread[1][q];

}

}

}

}

}

}

cout<<"操作成功!

"<

break;

case3:

cout<<"进程号"<

for(a=0;a<=n;a++)

{

cout<

}

cout<<"将几号进程杀死?

"<

cin>>q;

for(a=0;a<=n;a++)

{

if(Tread[0][a]==q)

{

if(Tread[2][a]==1)

{

mem=mem+Tread[1][a];

}

Tread[0][a]=Tread[0][n];

Tread[1][a]=Tread[1][n];

Tread[2][a]=Tread[2][n];

n--;

}

}

cout<<"操作成功!

"<

break;

case4:

cout<<"进程号"<

for(a=0;a<=n;a++)

{

cout<

}

break;

case5:

chart;

cout<<"退出?

(Y/N)"<

cin>>t;

if(t=='Y'||t=='y')

exit(0);

break;

default:

break;

}

system("pause");

system("cls");

}

}

 

 

 

实验2:

进程调度

要求:

1、设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转调度算法。

2、建立进程就绪队列。

3、编制两种进程调度算法:

优先权调度(实现动态优先级)和时间片轮转调度。

提示:

1、假设利用两种算法对五个进程进行调度,每个进程有运行、就绪、阻塞三种状态,初始状态为就绪态。

2、为了便于处理,程序中的某进程运行时间以时间片为单位计算。

各进程的优先数或轮转时间数以及进程需运行的时间片数的初值由用户给定。

3、在优先权调度算法中,优先数可以先取50,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。

在时间片轮转调度算法中,采用固定时间片,即每执行一次进程,该进程的执行时间片数为已执行了2个单位,这时CPU时间片数加2,进程还需要的时间片数减2,并将该进程排列到就绪队列的队尾。

4、对于优先数一致的情况,采用FIFO策略解决。

 

源程序代码:

#include"stdio.h"

#include"stdlib.h"

#include"iostream.h"

#defineNULL0

#definefalse0

#definetrue1

bool_state=0;

structPCB

{

intID;

intpriority;

intCPUtime;

intALLtime;

intState;

PCB*next;

};

voidinit();/*产生idle进程,输入用户进程数目,调用insert()*/

voidprint(PCB*pcb);/*输出进程属性信息*/

voidprint_init(PCB*pcb);/*输出所有PCB的初始值*/

voidinsert();/*生成进程属性信息,插入进程就绪队列*/

voidRun_priority(PCB*pcb);/*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程*/

voidblock(PCB*pcb);/*调用destroy()将进程插入阻塞队列*/

voidwakeup();/*唤醒进程,插入就绪队列*/

voidproc_priority();/*优先权调度算法模拟*/

voidproc_loop();/*轮转法调度算法模拟*/

voidupdate(PCB*pcb);/*更新进程信息*/

voidpushback_queue(PCB*queue,PCB*item);/*将item插入到队列的尾部*/

voidinsert_queue(PCB*queue,PCB*item);/*将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/

voidsort_queue(PCB*&queue);/*对queue中的结点进行排序,按照优先级从大到小*/

PCB*ready_queue,*block_queue,*idleprocess;/*就绪队列,阻塞队列及闲逛进程指针变量*/

intmain(intargc,char*argv[])

{

inti=0;

while

(1)

{

cout<<"\\************PROCESS*************/";

cout<<("\nPleaseselectanumin(1,2,0)");

cout<<("\n1--priority");

cout<<("\n2--loop");

cout<<("\n0--exit\n");

cout<<"----------------------------------";

cout<

cout<<"Pleaseselectanum:

";

cin>>i;

while(i)

{

if(i==1)

{

cout<<("\nThisisaexampleforpriorityprocessing!

\n");

init();

proc_priority();

}

elseif(i==2)

{

cout<<("\nThisisaexampleforroundrobinprocessing!

\n");

init();

proc_loop();

}

else

{

cout<<"Pleaseselectanumin(1,2,0)!

!

!

\n";

}

cout<<"Pleaseselectanum:

";

cin>>i;

}

return0;

}

}

//输出所有PCB的初始值

voidprint_init(PCB*pcb)

{

PCB*temp=pcb->next;

cout<<("\nIDpriorityCPUtimeALLtimeState");

while(temp!

=NULL)

{

cout<<"\n"<ID<<""<priority<<""<CPUtime<<""<ALLtime;

if(temp->State==0)

cout<<("ready");

elseif(temp->State==1)

cout<<("running");

else

cout<<("blocked");

temp=temp->next;

}

}

//输出进程属性信息

voidprint(PCB*pcb)

{

PCB*temp;

temp=pcb;

if(pcb->ID==0)

cout<<("\nTheidlepeocessidrunning!

");

else

{

cout<<"\n"<ID<<""<priority<<""<CPUtime<<""<ALLtime;

if(temp->State==0)

cout<<("ready");

elseif(temp->State==1)

cout<<("running");

else

cout<<("blocked");

}

}

//将item插入到队列中,使得插入后,队列中按照优先级从高到低有序

voidinsert_queue(PCB*queue,PCB*item)

{

PCB*p,*q;

q=queue;p=q->next;

while(p!

=0&&p->priority>=item->priority)

{

q=p;

p=p->next;

}

if(p==0)

{

item->next=0;

q->next=item;

}

else

{

item->next=p;

q->next=item;

}

}

//将item插入到阻塞队列的尾部

voidpushback_queue(PCB*queue,PCB*item)

{

PCB*p,*q;

q=queue,p=q->next;

while(p!

=0)

{

q=p;

p=p->next;

}

item->next=q->next;

q->next=item;

}

//对queue中的结点进行排序,按照优先级从大到小

voidsort_queue(PCB*&queue)

{

PCB*temp=newPCB;

temp->next=0;

while(queue->next)

{

PCB*p;

p=queue->next;

queue->next=p->next;

insert_queue(temp,p);

}

queue->next=temp->next;

deletetemp;

}

//生成进程属性信息,插入进程就绪队列,显示进程信息

voidinsert()

{

PCB*newp=0;

staticlongid=0;

newp=newPCB;

id++;

newp->ID=id;

newp->State=0;

newp->CPUtime=0;

newp->priority=rand()%3+1;

newp->ALLtime=rand()%3+1;

newp->next=NULL;

pushback_queue(ready_queue,newp);

//print(newp);

//cout<<("建立:

Creating->ready\n");

}

//生成n个进程属性信息,插入进程就绪队列,显示进程信息

voidinsert(intn)

{

for(inti=0;i

insert();

}

//产生idle进程,输入用户进程数目,调用insert()

voidinit()

{

block_queue=newPCB;

block_queue->next=0;

ready_queue=newPCB;

ready_queue->next=0;

inti=0,pcb_number=-1;//闲逛进程放入就绪队列

idleprocess=NULL;

idleprocess=(PCB*)malloc(sizeof(PCB));

idleprocess->ID=0;

idleprocess->State=0;

idleprocess->CPUtime=0;

idleprocess->priority=0;

idleprocess->ALLtime=0;

idleprocess->next=NULL;

idleprocess->next=ready_queue->next;//闲逛进程放入就绪队列

ready_queue->next=idleprocess;

//也可以假定初始时系统中只有一个idle进程

//输入初始进程的个数

while(pcb_number<0)

{

cout<<("\nInputthenumberofPCBtobestart:

");

cin>>pcb_number;

}

cout<<("\nIDpriorityCPUtimeALLtimeState\n");

for(;i

insert();

cout<<"就绪队列初始化成功!

"<

:

:

print_init(ready_queue);

cout<

}

//调用destroy()将进程插入阻塞队列

voidblock(PCB*pcb)

{

pcb->State=2;

pcb->CPUtime-=2;

if(pcb->CPUtime<=0)

{

pcb->CPUtime+=2;

}

cout<<"\nTheprocessno"<ID<<"isblocked!

";

print(pcb);

cout<<("变迁2:

running->blocked\n");

pcb->next=block_queue->next;

block_queue->next=pcb;

}

//更新进程信息,就绪队列中进程的优先级均增加1

voidupdate(PCB*pcb)

{

PCB*temp=pcb->next;

while(temp&&temp->next)

{

temp->priority++;

temp=temp->next;

}

}

//唤醒进程,插入就绪队列

voidwakeup()

{

if(block_queue->next==0)/*此时没有阻塞的进程,无所谓的唤醒*/

return;

PCB*q,*p;

while(true)

{

q=block_queue;

p=q->next;

while(p&&rand()%20!

=1)

{

q=p;

p=p->next;

}

if(p!

=0)

{

q->next=p->next;

break;

}

}

p->State=0;

cout<

print(p);

cout<<"变迁3:

blocked->ready"<

insert_queue(ready_queue,p);

}

//运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程

voidRun_priority(PCB*pcb)

{

if(pcb->ID==0)

{

insert_queue(ready_queue,pcb);

print(pcb);

cout<<"变迁1:

ready->running\n";

}

else

{

pcb->State=1;

pcb->CPUtime+=4;

pcb->priority=pcb->priority-3;/*每运行一个时间片,其优先数减3*/

if(pcb->priority<1)

pcb->priority=1;

print(pcb);

printf("变迁1:

ready->running\n");

if(rand()%3==1)/*PCB不是闲逛进程,满足条件侧阻塞此进程*/

{

if(pcb->CPUtime-2ALLtime)

block(pcb);

else/*已执行完毕,应该销毁进程*/

{

cout<<'\n';

cout<<"Theprocessno"<ID<<"iscompleted!

销毁:

running->Destroy"<

deletepcb;

}

}

else/*否则看该进程是否执行完毕,如果执行完,则释放,否则再次放入就绪队列*/

{

if(pcb->CPUtime>=pcb->ALLtime)/*释放*/

{

cout<<'\n';

cout<<"Theprocessno"<ID<<"ifcompleted!

销毁:

running->Destrory"<

deletepcb;

}

else

{

:

:

insert_queue(:

:

ready_queue,pcb);

}

}

}

update(ready_queue);/*更新就绪队列的优先级数*/

if(rand()%5==1)

{

insert(3);

:

:

sort_queue(ready_queue);

}

if(rand()%7==1)

wakeup();

}

//运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程

voidRun_loop(PCB*pcb)

{

if(pcb->ID==0)

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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