进程调度.docx
- 文档编号:9856537
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:36
- 大小:22.07KB
进程调度.docx
《进程调度.docx》由会员分享,可在线阅读,更多相关《进程调度.docx(36页珍藏版)》请在冰点文库上搜索。
进程调度
要求:
实现按优先级与时间片相结合的进程调度算法
内容:
1:
设计进程控制快,进程队列结构(包括:
就绪队列,等待队列,运行队列)等必要的数据结构。
2:
模拟操作系统进程调度的功能,编写进程调度程序,模拟的处理机分派程序,进程等待函数和进程唤醒函数。
3:
编写用户程序,创建6个用户进程。
进程调度的设计方法
1。
数据结构
(1)优先级与时间片的设计
◆进程因等待放弃CPU时,优先级置为1(高优先级)
◆进程因时间片到放弃CPU时,优先级置为0(低优先级)
◆优先1对应时间片4;优先级0对应时间片10。
(2)进程控制块(PCB)的内容
进程标识3---9
进程优先级0,1
进程优先级0,1
进程等待时间20
链接指针
2:
程序算法
(1)PCB结构,变量与主程序
structPCB
{
intpname;
intpri;
intruntime;
intwaitting;
structPCB*next;
}
pcb[7];
structPCB*running,ready,wait;
intsin=0;
main()
{创建PCB[3]--PCB[9]并插入ready队列;/*pname分别为3--9,
pri=0,runtime=10,waittime=0*/
for(;;)/*系统程序,完成初始化和处理机分派功能 */
{cast{sig=0:
swtch;
sig=1:
waiter;
sig=3:
proc3;
sig=4:
proc4;
sig=5:
proc5;
sig=6:
proc6;
sig=7:
proc7;
sig=8:
proc8;
sig=9:
proc9;}
}
}
(2)进程调度程序
swtch()
{
while(ready==NULL)wakeup();
移出就绪队列第一个PCB;
送running指针;
若pri=1,则runntime=4,否则runtime=10;
将running→pname 送sig
}
(3)将进程等待函数
wait()
{将运行进程插入wait队列,优先数置1;
sig=0;
}
(4)进程唤醒函数
wakeup()
{
将wait队列中所有的PCB中waittime减1;
将wait队列中的所有的waittime=0的PCB揭除;
插入到ready队列中第一个优先级为0的PCB前面
}
下面是我自己编的程序:
1:
时间片
#include"stdafx.h"
#include"iostream.h"
constk=10;
structnode{
intdata1,data2,data3;
node*next;
};
node*front=NULL,*rear=NULL;
staticintn=0,y=0;
classtimesec{
public:
voidpush(int,int);
voidpop();
};
voidtimesec:
:
push(intd1,intd2)
{
node*p=newnode;
p->next=NULL;
p->data1=d1;
p->data2=d2;
p->data3=0;
if(front==NULL)
{front=p,rear=p;}
else
{
rear->next=p;
rear=p;
rear->next=front;
}
++n;
}
voidtimesec:
:
pop()
{
inti=0,j=0,m=0,data5;
while(n!
=0)
{
for(j=0;j
if(j>=k/n)j=k/n;
if(j==k/n)
{
front->data3+=k/n;
if(front->data3>front->data2)
front->data3=front->data2;
if(front->data3==front->data2)
{
node*q=newnode;
q=front;
data5=y-front->data1+front->data2;
y+=front->data2;
front=front->next;
rear->next=q->next;
deleteq;
--n;
cout< } front=front->next; rear=rear->next; j=0; i++; } if(i==n) { m++; //cout<<"第"< i=0; } } } voidmain() { inti,k; timesecp; cin>>k; intx1,x2; for(i=0;i { cin>>x1>>x2; p.push(x1,x2); } p.pop(); } 2: 短作业优先 include"stdafx.h" #include"iostream.h" constm=100; structnode{ intdata1;//到达时间; intdata2;//完成时间; intlength;//作业长度; }a[m]; inti=0; voidpush(intd1,intd2,intl) { a[i].data1=d1; a[i].data2=d2; a[i].length=l; i++; } intpop(intj) { inty; if(j>=m) return0; y=a[j].data2-a[j].data1; a[j+1].data2+=a[j].data2; cout< return1; } voidf() { intj,k;nodet; for(j=0;j for(k=0;k if(a[k].length>a[k+1].length) { t=a[k]; a[k]=a[k+1]; a[k+1]=t; } } voidmain() { intx,y,d1,d2,l1,k; cout<<"输入进程个数: "; cin>>k; if(k for(x=0;x { cin>>d1>>d2>>l1; push(d1,d2,l1); } f(); for(y=0;y pop(y); } 模拟cpu进程调度三种算法(2009-05-2821: 30: 08) 标签: it 分类: Computer #include"stdafx.h" #include"iostream.h" #include"string.h" #include"iomanip.h" boolbProcessCreated1(); boolbDisplay1(); boolbProcessCreated2(); boolbDisplay2(); boolExecuteRRAlgorithm(); boolExecutePriorityAlgorithm(); boolExecuteFCFSAlgorithm(); structPCB { intm_iArriveTime; intm_iStartTime; intm_iFinishTime; intm_iProcessID;//processid charm_strProcessName[10];//processname intm_iCPUTime; intm_iRemainingTime; intm_iState;//0meansready,1meansrunning,don'tconsiderblockstatenow intm_iPriority;//abiggernumbermeansahigherpriority structPCB*next; }; structPCB*pReadyQueue=NULL; intiProcessID=0; intmain(intargc,char*argv[]) { cout<<" 欢迎进入模拟调度程序"< intx; while(x! =4) { cout< 1RR调度,2Priority调度,3FCFS调度,4退出"< cin>>x; if(x<5&&x>0) { switch(x) { case1: bProcessCreated1(); bDisplay1(); ExecuteRRAlgorithm(); case2: bProcessCreated1(); bDisplay1(); ExecutePriorityAlgorithm(); break; case3: bProcessCreated2(); bDisplay2(); ExecuteFCFSAlgorithm(); break; } } else { cout<<"对不起您输入错误,请您重新输入"< } } cout<<"程序退出"< return0; } intiProcessNumber; boolbProcessCreated1() { charstrProcessName[10]; intiCPUTime; intiState; intiPriority; intiFinishTime; structPCB*pTemp; structPCB*pCurrentProcess; cout<<"pleaseinputtheprocessnumber(1-10)youwanttocreate: "; while (1) { inta; cin>>a; if(a<11&&a>0) { iProcessNumber=a; break; } else cout<<"对不起您输入数值不正确,请您重新输入"< } cout< for(inti=0;i { try { pTemp=newstructPCB; } catch(...) { cout<<"thememoryisnotenough! Creatingprocessfailed! "; returnfalse; } cout<<"iProcessID="< pTemp->m_iProcessID=iProcessID; iProcessID++; pTemp->m_iFinishTime=iFinishTime; cout<<"pleaseinputthenameoftheprocess: "; cin>>strProcessName; cout<<"pleaseinputtheCPUtimeusedbytheprocess: "; cin>>iCPUTime; cout<<"pleaseinputthepriorityoftheprocess: "; cin>>iPriority; cout< iState=0; pTemp->m_iCPUTime=iCPUTime; pTemp->m_iPriority=iPriority; pTemp->m_iState=iState; pTemp->m_iRemainingTime=iCPUTime; strcpy(pTemp->m_strProcessName,strProcessName); if(iProcessID==1) { pReadyQueue=pTemp; pCurrentProcess=pTemp; pCurrentProcess->next=NULL; } else { pCurrentProcess->next=pTemp; pCurrentProcess=pTemp; pCurrentProcess->next=NULL; } } returntrue; } boolbProcessCreated2() { charstrProcessName[10]; intiCPUTime; intiState; intiArriveTime; structPCB*pTemp; structPCB*pCurrentProcess; intiProcessNumber; cout<<"pleaseinputtheprocessnumber(1-10)youwanttocreate: "; cin>>iProcessNumber; cout< for(inti=0;i { try { pTemp=newstructPCB; } catch(...) { cout<<"内存不足! 创建进程失败! "; returnfalse; } pTemp->m_iProcessID=iProcessID; iProcessID++; cout<<"pleaseinputtheprocessnameyouwanttocreate: "; cin>>strProcessName; cout<<"pleaseinputtheCPUtimeusedbytheprocess: "; cin>>iCPUTime; cout<<"pleaseinputtheArriveTimeusedbytheprocess: "; cin>>iArriveTime; cout< iState=0; pTemp->m_iCPUTime=iCPUTime; pTemp->m_iState=iState; pTemp->m_iArriveTime=iArriveTime; strcpy(pTemp->m_strProcessName,strProcessName); if(iProcessID==1) { pReadyQueue=pTemp; pCurrentProcess=pTemp; pCurrentProcess->next=NULL; } else { pCurrentProcess->next=pTemp; pCurrentProcess=pTemp; pCurrentProcess->next=NULL; } } returntrue; } boolbDisplay1() { structPCB*pTemp=NULL; pTemp=pReadyQueue; if(pTemp==NULL) cout<<"noprocessexists! "; else { cout< cout< cout< while(pTemp! =NULL) { cout< cout< cout< cout< cout< cout< cout< cout< cout< pTemp=pTemp->next; } } cout< returntrue; } boolbDisplay2() { structPCB*pTemp=NULL; pTemp=pReadyQueue; if(pTemp==NULL) cout<<"无进程存在! "; else { cout< cout< cout< while(pTemp! =NULL) { cout< cout< cout< cout< cout< cout< cout< cout< cout< pTemp=pTemp->next; } } cout< returntrue; } boolExecuteRRAlgorithm() { intiQuantum; boolbAllRunned=false; structPCB*pTemp=NULL; pTemp=pReadyQueue; if(pTemp==NULL) { cout<<"noprocessexists! "; returnfalse; } cout<<"pleaseinputquantum: "; cin>>iQuantum; cout< cout<<"RRschedulingstarts......"; cout< cout< (1)< cout< inta[10]={0,0,0,0,0,0,0,0,0,0}; intb=0; floatt=0.0; while(! bAllRunned) { bAllRunned=true; pTemp=pReadyQueue; for(inti=0;pTemp! =NULL;i++) { if(pTemp->m_iRemainingTime>iQuantum) { pTemp->m_iRemainingTime=pTemp->m_iRemainingTime-iQuantum; cout< cout< cout< cout< cout< (1); cout<<": "; cout< cout< b+=iQuantum;//时间 a[i]=b;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 调度