进程调度算法

本文介绍了三种进程调度算法:FCFS(先来先服务)、RR(时间片轮转)和HPF(优先数),详细阐述了每个算法的实现过程,并通过代码展示了调度算法的运行结果,包括不同调度次数下的就绪队列和运行进程队列状态。
摘要由CSDN通过智能技术生成

1. 头文件

#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <string.h>

#define MAX_PROCESS 10
int process_number=0;                       //下一个可用的进程编号

typedef struct pcb{
   
	struct pcb *next;                             //下一个进程控制块指针
	char process_name[20];                      //进程名
	int process_number;                          //进程编号
	int process_start_moment;                    //进程启动时刻
	int process_need_time;                       //要求运行时间
	int process_time_slice;                       //时间片
	int process_priority;                          //优先数
}PCB;                                       //自定义数据类型:进程控制块
PCB pcb_table[MAX_PROCESS];              //进程控制块表

PCB *pcb_run=NULL;                        //进程运行队列头指针
PCB *pcb_free=NULL;                       //进程空闲队列头指针
PCB *pcb_ready=NULL;                      //进程就绪队列头指针
PCB *pcb_ready_rear=NULL;                 //进程就绪队列尾指针
PCB *pcb_blocked=NULL;                    //阻塞队列头指针
PCB *pcb_blocked_rear=NULL;               //阻塞队列尾指针

void init_pcb_table( );                          //初始化进程控制块表
void print_space(int num);                     //显示若干个空格
void display_process_queue(PCB *queue);      //显示进程队列
PCB *create_process( );          //创建进程函数,成功时返回新创建进程的PCB,失败时返回NULL。
void block_process_by_name( );                //阻塞指定名称的进程。
void wakeup_process( );                       //唤醒进程
void FCFS( );                                 //先来先服务进程调度算法
void RR( );                                   //时间片轮转进程调度算法
void HPF( );                                  //优先数进程调度算法
void MFBQ( );                                //多级反馈队列进程调度算法


2.main函数

#include "process_schedule.h"                                     //包含头文件
int main(int argc,char *argv[ ]){
   
	char select;                                                  //存放用户选择的菜单项
	init_pcb_table( );                                              //初始化进程控制块表
	while(1){
   
		printf("|----------MAIN    MENU-------------|\n");                //显示菜单项
		printf("|  1:first come first served       |\n");
		printf("|  2:round robin                |\n");
		printf("|  3:highest priority first          |\n");
		printf("|  4:multi_level feedback queue   |\n");
		printf("|  5:display ready process queue  |\n");
		printf("|  6:display blocked process queue |\n");
		printf("|  7:display running queue        |\n");
		printf("|  a:create a process             |\n");
		printf("|  b:delete a process             |\n");
		printf("|  c:block  a process            |\n");
		printf("|  d:wakeup  a process          |\n");
		printf("|  8:exit                        |\n");
		printf("|-----------------------------------|\n");
		printf("select a function(1~8,a~d):");                           //输出提示信息
		do{
   
			select=(char)getch( );                                   //接收用户的选项
		}while(!((49<=select&&select<=56)||(97<=select&&select<=100)));
		system("cls");                                               //清屏
		switch(select){
                                                 //由选项控制程序功能
		case '1':
			FCFS( );
			break;
		case '2':
			RR( );
			break;
		case '3':
			HPF( );
			break;
		case '4':
			MFBQ( );
			break;
		case '5':
			printf("              ready  queue\n");
			display_process_queue(pcb_ready);
			break;
		case '6':
			printf("              blocked  queue\n");
            display_process_queue(pcb_blocked);
			break;
		case '7':
			printf("              running  queue\n");
            display_process_queue(pcb_run);
			break;
		case 'a':
			create_process( );
			break;
		case 'b':
			break;
		case 'c':
			block_process_by_name( );
			break;
		case 'd':
			wakeup_process( );
			break;
		case '8':
			return 0;
		}
		printf("\nPress any key to return to main menu.");
		getch( );
		system("cls");
	
  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值