⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 head.h

📁 这是一个进程调度程序,是操作系统课程的实验
💻 H
字号:
#include "stdio.h"
#include<stdlib.h>
#include<malloc.h>
#include<iomanip>
#include <time.h> 
#include <dos.h> 
#define OK 1
#define SUCCESS 1
#define FAILURE 0
#define M 8 //M类资源
#define N 4//每一类资源个数
#define K 4//同一进程最多同时申请同类资源个数
#define T 3//设置一个进程最多执行的时间
#define S 5
#define RATE 30//设置在各进程运行时有RATE%的概率产生一个新进程
#define DEBUG true
int ID=0;
int TimePiece=1;//设置时间片为2秒
static int INITTIME;//初始化时间
int RandProcNum=30;//随机生成在RandProc以内个进程

typedef enum {//虚拟设备状态
	DReady,//准备好
	DBusy//正忙
}DeviceStatus;
char *DeviceStatusOut[]={//在屏幕输出时对应DEVICESTATUS的值
	"就绪",//准备好
	"正忙"//正忙
};
typedef enum{//进程状态
	PReady,//就绪
	PRun,//执行
	PBlock//阻塞
}ProcStatus;
char *ProcStatusOut[]={//在屏幕输出时对应PROCSTATUS的值
	"就绪",//就绪
	"执行*",//执行
	"阻塞"//阻塞
};
struct Device{//设备结构
	int id;
	DeviceStatus status;
}DEVICE[M][N];
struct Proc{//进程结构
	int id;
	int superId;
	int initTime;
	int runTime;
	int leftTime;
	int m;//第m类资源
	int k;//共需k个
	ProcStatus status;
};
typedef struct PCBNode{       //表头PCB表结构体        
	Proc proc;
	struct PCBNode *next;
}PCBNode,*PCB;//无表头表示

int getNowTime();//取得现在时间
void wait(int n);//等待n秒钟
int getNextID();//取得下一个进程的ID
int getRandResourceClass();//取得随机的资源种类
int getRandResourceNum();//取得随机的资源个数
int getRandRunTime();//取得随机的执行时间表
int getRandProcNum();//随机取得进程数
int getRandNum();//取一个随机数
void InitDevice();//初始化虚拟设备 共M*N个
DeviceStatus getDeviceStatus(int m,int n);//取得第m类,第n个资源的状态
int getAvailableDeviceCount(int m);//取得第m类可用资源的个数
void setDeviceBusy(int m,int k);//设置设备为busy状态
void setDeviceReady(int m,int k);//设置设备第M类资源的K个设备为Ready状态
int ckeckDeviceAvailable(int m,int k);//检查设备是否有K个可用的设备
void disPlayDeviceStatus(int m,int n);//显示第m类资源第n个设备的状态信息
void createRandProc(Proc &p);//创建随机进程
void running(Proc &p);
void destory(Proc p);
void displayProc(Proc p);//显示进程的信息
int initPCB(PCB &P);//初始化一个带表头链表
int countProc(PCB &P);//取得PCB表中进程的个数
int insertProc(PCB &P,Proc p);//在PCB表中插入一个进程
int clearProc(PCB &P);//检查
void displayPCB(PCB &P);//显示所有进程
void createRandPCB(PCB &P);
int changeProcStatus(PCB &P,ProcStatus status);//改变进程状态
int runProc(PCB &P,int id);//执行PCB表中进程ID为id的进程

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -