﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-tanyang</title><link>http://www.cppblog.com/tanyang/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 02 Jun 2026 00:35:57 GMT</lastBuildDate><pubDate>Tue, 02 Jun 2026 00:35:57 GMT</pubDate><ttl>60</ttl><item><title>多级反馈队列调度算法</title><link>http://www.cppblog.com/tanyang/archive/2007/11/03/35801.html</link><dc:creator>依伊</dc:creator><author>依伊</author><pubDate>Sat, 03 Nov 2007 07:12:00 GMT</pubDate><guid>http://www.cppblog.com/tanyang/archive/2007/11/03/35801.html</guid><wfw:comment>http://www.cppblog.com/tanyang/comments/35801.html</wfw:comment><comments>http://www.cppblog.com/tanyang/archive/2007/11/03/35801.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/tanyang/comments/commentRss/35801.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tanyang/services/trackbacks/35801.html</trackback:ping><description><![CDATA[<p>我是一名计算机专业的学生，很荣幸在这里结识各位编程高手．今天第一次写东西，希望大家多多支持，多多留言哦．以下是一个多级反馈队列调度算法，请各位帮忙看看对不对．如果谁能帮写一个更好的那就更感谢了．<span style="COLOR: #000000">ＴＨＡＮＫ　ＹＯＵ　ＶＥＲＹ　ＭＵＣＨ！<br>各位有什么好的建议可发邮件到<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#121;&#49;&#52;&#52;&#49;&#54;&#55;&#64;&#115;&#105;&#110;&#97;&#46;&#99;&#111;&#109;"><span style="COLOR: #ff0000">ty144167@sina.com</span></a><span style="COLOR: #ff0000">．</span><br>#include "stdio.h" </span></p>
<p><span style="COLOR: #000000">#include &lt;stdlib.h&gt; </span></p>
<p><span style="COLOR: #000000">#include &lt;conio.h&gt; </span></p>
<p><span style="COLOR: #000000">#define getpch(type) (type*)malloc(sizeof(type)) </span></p>
<p><span style="COLOR: #000000">#define NULL 0 </span></p>
<p><span style="COLOR: #000000">struct pcb { /* 定义进程控制块PCB */ </span></p>
<p><span style="COLOR: #000000">char name[10]; </span></p>
<p><span style="COLOR: #000000">char state; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">int super;//优先级别 </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">int ntime;//需运行时间 </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">int rtime; //已经运行时间</span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">struct pcb* link; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">}*ready=NULL,*p; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">typedef struct pcb PCB; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">void sort() /* 建立对进程进行fcfs算法排列函数*/ </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">PCB *first, *second; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">int insert=0;</span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">if(ready==NULL) /*优先来者,插入队首*/ </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">p-&gt;link=ready; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">ready=p; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">}&nbsp; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">else/*否则插入队尾*/</span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">{</span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">first=ready; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">second=first-&gt;link; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">while(second!=NULL) </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">first=first-&gt;link; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">second=second-&gt;link; </span></p>
<p><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">&nbsp;</span></p>
<p><span style="COLOR: #000000">if(insert==0) first-&gt;link=p;/* 插入到队尾*/ </span></p>
<p><span style="COLOR: #000000">}</span></p>
<p><span style="COLOR: #000000">}</span></p>
<p><span style="COLOR: #000000">void input() /* 建立进程控制块函数*/ </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">int i,num; </span></p>
<p><span style="COLOR: #000000">/*clrscr(); 清屏*/</span></p>
<p><span style="COLOR: #000000">system("cls"); </span></p>
<p><span style="COLOR: #000000">printf("\n 进程调度轮转法.cpp \n");<br>printf("\n 请输入num再按回车,即进程个数为\n"); </span></p>
<p><span style="COLOR: #000000">scanf("%d",&amp;num); </span></p>
<p><span style="COLOR: #000000">for(i=0;i&lt;num;i++) </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">printf("\n 进程号No.%d:\n",i); </span></p>
<p><span style="COLOR: #000000">p=getpch(PCB); </span></p>
<p><span style="COLOR: #000000">printf("\n 输入进程名:"); </span></p>
<p><span style="COLOR: #000000">scanf("%s",p-&gt;name); </span></p>
<p><span style="COLOR: #000000">printf("\n 输入进程优先数:"); </span></p>
<p><span style="COLOR: #000000">scanf("%d",&amp;p-&gt;super); </span></p>
<p><span style="COLOR: #000000">printf("\n 输入进程运行时间:"); </span></p>
<p><span style="COLOR: #000000">scanf("%d",&amp;p-&gt;ntime); </span></p>
<p><span style="COLOR: #000000">printf("\n"); </span></p>
<p><span style="COLOR: #000000">p-&gt;rtime=0;p-&gt;state='w'; <br></span><span style="COLOR: #000000">p-&gt;link=NULL; </span></p>
<p><span style="COLOR: #000000">sort(); /* 调用sort函数*/ </span></p>
<p><span style="COLOR: #000000">{<br></span><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">int space() </span></p>
<p><span style="COLOR: #000000">{&nbsp;</span></p>
<p><span style="COLOR: #000000">int l=0; PCB* pr=ready; </span></p>
<p><span style="COLOR: #000000">while(pr!=NULL) </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">l++; </span></p>
<p><span style="COLOR: #000000">pr=pr-&gt;link; </span></p>
<p><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">return(l); </span></p>
<p><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">printf("\n qname \t state \t super \t ndtime \t runtime \n"); </span></p>
<p><span style="COLOR: #000000">printf("|%s\t",pr-&gt;name); </span></p>
<p><span style="COLOR: #000000">printf("|%c\t",pr-&gt;state); </span></p>
<p><span style="COLOR: #000000">printf("|%d\t",pr-&gt;super); </span></p>
<p><span style="COLOR: #000000">printf("|%d\t",pr-&gt;ntime); </span></p>
<p><span style="COLOR: #000000">printf("|%d\t",pr-&gt;rtime); </span></p>
<p><span style="COLOR: #000000">printf("\n"); </span></p>
<p><span style="COLOR: #000000">}<br>void check() /* 建立进程查看函数 */ </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">PCB* pr; </span></p>
<p><span style="COLOR: #000000">printf("\n **** 当前正在运行的进程是:%s",p-&gt;name); /*显示当前运行进程*/ </span></p>
<p><span style="COLOR: #000000">disp(p); </span></p>
<p><span style="COLOR: #000000">pr=ready; </span></p>
<p><span style="COLOR: #000000">printf("\n ****当前就绪队列状态为:\n"); /*显示就绪队列状态*/ <br></span><span style="COLOR: #000000">while(pr!=NULL) </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">disp(pr); </span></p>
<p><span style="COLOR: #000000">pr=pr-&gt;link; </span></p>
<p><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">printf("\n 进程 [%s] 已完成.\n",p-&gt;name); </span></p>
<p><span style="COLOR: #000000">free(p); </span></p>
<p><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">(p-&gt;rtime)++; </span></p>
<p><span style="COLOR: #000000">if(p-&gt;rtime==p-&gt;ntime) </span></p>
<p><span style="COLOR: #000000">destroy(); /* 调用destroy函数*/ </span></p>
<p><span style="COLOR: #000000">else </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">(p-&gt;super)--; </span></p>
<p><span style="COLOR: #000000">p-&gt;state='w'; </span></p>
<p><span style="COLOR: #000000">sort(); /*调用sort函数*/ </span></p>
<p><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">} </span></p>
<p><span style="COLOR: #000000">void main() /*主函数*/ </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">int len,h=0; </span></p>
<p><span style="COLOR: #000000">char ch; </span></p>
<p><span style="COLOR: #000000">input(); </span></p>
<p><span style="COLOR: #000000">len=space(); </span></p>
<p><span style="COLOR: #000000">while((len!=0)&amp;&amp;(ready!=NULL)) </span></p>
<p><span style="COLOR: #000000">{ </span></p>
<p><span style="COLOR: #000000">ch=getchar(); </span></p>
<p><span style="COLOR: #000000">h++;//标志执行的步骤 </span></p>
<p><span style="COLOR: #000000">printf("\n The execute number:%d \n",h); </span></p>
<p><span style="COLOR: #000000">p=ready; </span></p>
<p><span style="COLOR: #000000">ready=p-&gt;link; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">p-&gt;link=NULL; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">p-&gt;state='R'; </span></p>
<p><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">check();//显示运行及等待队列的状况 <br></span><span style="COLOR: #000000">running(); <br></span><span style="COLOR: #000000">printf("\n 按任一键继续......"); </span></p>
<p><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">ch=getchar(); <br></span><span style="COLOR: #000000">} <br></span><span style="COLOR: #000000">printf("\n\n 进程已经完成.\n"); <br></span><span style="COLOR: #000000">ch=getchar(); <br></span><span style="COLOR: #000000">}<br></span></p>
<img src ="http://www.cppblog.com/tanyang/aggbug/35801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tanyang/" target="_blank">依伊</a> 2007-11-03 15:12 <a href="http://www.cppblog.com/tanyang/archive/2007/11/03/35801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>