资源简介
内容:设计一个简单的进程调度算法,模拟OS中的进程调度过程
2.要求:
① 进程数不少于5个;
② 进程调度算法任选;
最好选用动态优先数法,每运行一个时间片优先数减3
③ 用C++(或C)语言编程;
④ 程序运行时显示进程调度过程。
3.步骤:
① 设计PCB及其数据结构:
进程标识数:ID
进程优先数:PRIORITY(优先数越大,优先级越高)
进程已占用时间片:CPUTIME
进程尚需时间片:ALLTIME(一旦运行完毕,ALLTIME为0)
进程队列指针:NEXT,用来将PCB排成队列
进程状态:STATE(一般为就绪,不用)
② 设计进程就绪队列及数据结构;
③ 设计进程调度算法,并画出程序流程图;
④ 设计输入数据和输出格式;
结构格式:当前正运行的进程:0
当前就绪队列:2,1,3,4
⑤ 编程上机,验证结果。
代码片段和文件信息
#include
#include
#include
#include
#define LEN sizeof(struct PROCESS)
typedef struct PROCESS
{
char ID[10];
unsigned int PRIORITY;
unsigned int CPUTIME;
unsigned int ALLTIME;
char STATE;
struct PROCESS * NEXT;
}PRO;
PRO * ready=NULL;
PRO * Creatnode()
{
PRO * p=NULL;
p=(PRO *)malloc(LEN);
//system(“cls“);
printf(“请输入进程名:\n“);
scanf(“%s“&p->ID);
printf(“请输入优先级数:\n“);
scanf(“%d“&p->PRIORITY);
printf(“请输入以运行时间:\n“);
scanf(“%d“&p->CPUTIME);
printf(“请输入剩余时间:\n“);
scanf(“%d“&p->ALLTIME);
p->STATE=‘P‘;
p->NEXT=NULL;
return p;
}
void Insert1(PRO * node)
{
PRO * p=ready;
PRO * q=NULL;
if(ready==NULL)
{
ready=node;
ready->NEXT=NULL;
return ;
}
if(node->PRIORITY>ready->PRIORITY)
{
node->NEXT=ready;
ready=node;
return ;
}
while(p->NEXT!=NULL)
{
q=p;
p=p->NEXT;
if(node->PRIORITY > p->PRIORITY)
{
q->NEXT=node;
node->NEXT=p;
return;
}
}
if((p->NEXT==NULL)&& (node->PRIORITYPRIORITY))
{
p->NEXT=node;
return;
}
}
void Insert()
{
PRO * p=NULL;
PRO * q=NULL;
char ch=‘\0‘;
ch=getchar();
while(ch!=‘n‘)
{
if(ready==NULL)
{
p=Creatnode();
ready=p;
}
else
{
p=Creatnode();
Insert1(p);
}
printf(“继续添加进程 y or Y\n结束添加 n or N\n“);
getchar();
ch=getchar();
}
}
PRO * Getnode()
{
PRO * p=ready;
if(p==NULL)
{
printf
- 上一篇:理财管理系统 c++代码
- 下一篇:OpenCV种子填充实现彩色图像分割的代码
评论
共有 条评论