• 大小: 3KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: C/C++
  • 标签: 模拟进程  

资源简介

内容:设计一个简单的进程调度算法,模拟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

评论

共有 条评论