{ available[j]=available1[j]; allocation[i][j]=allocation1[i][j]; need[i][j]=need1[i][j]; //还原已分配的资源数,仍需要的资源数和可用的资源数 } printf(\返回分配前资源数\\n\ print(); } } } printf(\你还要继续分配吗?Y or N ?\\n\ //判断是否继续进行资源分配 c=getche(); } while(c=='y'||c=='Y'); } void check() //安全算法函数 { int k,f,v=0,i,j; int work[m],a[m]; bool finish[m]; r=1; for(i=0;i
if(f==1) //找到还没有完成且需求数小于可提供进程继续运行的资源数的进程 { finish[i]=true; a[v++]=i; //记录安全序列号 for(j=0;j printf(\此时刻资源分配情况*********************\\n\ printf(\进程名/号| Max | Allocation | Need |\\n\ for (i = 0; i < no1; i++) { printf(\ p%d/%d \ for (j = 0; j < no2; j++) { printf(\ \} for (j = 0; j < no2; j++) { printf(\ \} for (j = 0; j < no2; j++) { printf(\ \} printf(\ } printf(\ printf(\各类资源可利用的资源数为:\ for (j = 0; j < no2; j++) { printf(\} printf(\ } 进程调度过程的模拟、 (1)概述 选择一个调度算法,实现处理机调度。 设计要求: 1)进程调度算法包括:先来先服务算法,时间片轮转算法,短进程优先算法, 动态优先级算法。 2)可选择进程数量 3)本程序包括四种算法,用C或C++语言实现,执行时在主界面选择算法(可 用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生), 执行,显示结果。 8 (2)设计原理 1)先来先服务算法 FCFS 每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作 业,将它们调入内存,为它们分配资源创建进程,然后放入就绪队列。 2)时间片轮转法RR 系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。 (3) 短进程优先算法 SPF短进程优先调度算法是从就绪队列中选出一个估计运行时间最短的进程, 将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。 (4)动态优先级算法 优先权调度算法是为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入最高优先权优先调度算法。动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。 #include static void print(){}; ~Pcb(); protected: char* name; //进程名 int allTime; //需要运行时间 int cpuTime; //已用cpu时间 state process; //进程状态 }; class HPcb:public Pcb { public: static void print(); static void highS(); static int getFirst(); private: int firstNum; }; HPcb hpcb[P_NUM]; class FPcb:public Pcb { public: static void print(); static void fcfs(); private: int comeTime; }; FPcb fpcb[P_NUM]; class RPcb:public Pcb { public: static void print(); static void rr(); }; RPcb rpcb[P_NUM]; void RPcb::rr() { int ii,i=0; int k=0; 10