基于反馈(Feed Back,FB)排队算法的CPU调度的模拟实现资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JLU
《操作系统》课程设计[基于反馈(Feed Back,FB)排队算法的
CPU调度的模拟实现]
程序代码:
// 223.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//////////////////////////////////////////
typedef int Status; //指定用Status和Boolean代表int类型
typedef int Boolean;
//////////////////////////////////////////
typedef struct QNode
{
char name[5];
int time;
int timeType;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;//队头指针
QueuePtr rear; // 队尾指针
}LinkQueue;
int count=0; //时间计数变量
LinkQueue qRun,qWait,qReady1,qReady2,qReady3,qReady4;
//////////////////////////////////////////////////////////////////////////
void menu1();
void menu2();
void gotoxy(int x,int y);
void clrscr(void); //清屏函数
void clreol(void); //在文本窗口中清除字符到行末
void clreoscr(void); //clear end of screen
Status InitQueue(LinkQueue &Q);
Status creatPro(LinkQueue &quePro);
void dealTime();
void runPro(void);
void run();
void wait();
void wake();
void endPro();
//////////////////////////////////////////////////////////////////////////
//DOS界面坐标定位函数/////////////////////////////////////////////////////
void gotoxy(int x,int y)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; //variablendklaration HANDLE hConsoleOut;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
csbiInfo.dwCursorPosition.X = x; //cursorposition X koordinate festlegen
csbiInfo.dwCursorPosition.Y = y; //cursorposition Y koordinate festlegen
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition); //den cursor an die festgelegte koordinate setzen
}
Status InitQueue(LinkQueue &Q)
{ // 构造一个空队列Q
if(!(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode))))
exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
Status EnQueue(LinkQueue &Q,char e[5],int proTime,int tType)
{ // 插入元素e为Q的新的队尾元素
QueuePtr p;
if(!(p=(QueuePtr)malloc(sizeof(QNode)))) // 存储分配失败