资源简介
进程是操作系统中最基本、最重要的概念,进程调度又是操作系统的核心模块。本实验要求学生独立地编写一个简单的进程管理程序,其主要部分是进程调度。调度算法可由学生自行选择,这里选用多级反馈队列调度算法。
代码片段和文件信息
#include
#include
#include
typedef struct node /*进程节点信息*/
{
char name[20]; /*进程的名字*/
int prio; /*进程的优先级*/
int round; /*分配CPU的时间片*/
int cputime; /*CPU执行时间*/
int needtime; /*进程执行所需要的时间*/
int arrivetime; /*进程抵达的时刻*/
char state; /*进程的状态,W--就绪态,R--执行态,F--完成态*/
int count; /*记录执行的次数*/
struct node *next; /*链表指针*/
}PCB;
typedef struct Queue /*多级就绪队列节点信息*/
{
PCB *linkPCB; /*就绪队列中的进程队列指针*/
int prio; /*本就绪队列的优先级*/
int round; /*本就绪队列所分配的时间片*/
struct Queue *next; /*指向下一个就绪队列的链表指针*/
}ReadyQueue;
PCB *run=NULL*finish=NULL; /*定义执行队列和完成队列*/
ReadyQueue *Head = NULL; /*定义第一个就绪队列*/
int num; /*进程个数*/
int ReadyNum; /*就绪队列个数*/
void Output(); /*进程信息输出函数*/
void InsertFinish(PCB *in); /*将进程插入到完成队列尾部*/
void InsertPrio(ReadyQueue *in); /*创建就绪队列,规定优先数越大,优先级越低*/
void PrioCreate(); /*创建就绪队列输入函数,优先数等于就绪队列所分配到的时间片,时间片越多,优先级越低*/
void GetFirst(ReadyQueue *queue); /*取得某一个就绪队列中的队头进程*/
void InsertLast(PCB *inReadyQueue *queue); /*将进程插入到就绪队列尾部*/
void ProcessCreate(); /*进程创建函数*/
void RoundRun(ReadyQueue *timechip); /*时间片轮转调度算法*/
void MultiDispatch(); /*多级调度算法,每次执行一个时间片*/
int main(void)
{
PrioCreate(); /*创建就绪队列*/
ProcessCreate();/*创建就绪进程*/
Output();
printf(“\n\n开始调度\n“);
MultiDispatch();/*算法开始*/
printf(“\n\n最终结果\n“);
Output(); /*输出最终的调度序列*/
return 0;
}
void Output() /*进程信息输出函数*/
{
ReadyQueue *print = Head;
PCB *p;
printf(“进程名\t优先级\t抵达\tcpu分配\tcpu执行\t需要时间\t进程状态\n“);
while(print)
{
if(print ->linkPCB != NULL)
{
p=print ->linkPCB;
while(p)
{
printf(“%s\t%d\t%d\t%d\t%d\t%d\t\t%c\n“p->namep->priop->arrivetimep->roundp->cputimep->needtimep->state);
p = p->next;
}
}
print = print->next;
}
p = finish; /*进程指向完成队列*/
while(p!=NULL)
{
printf(“%s\t%d\t%d\t%d\t%d\t%d\t\t%c\n“p->namep->priop->arrivetimep->roundp->cputimep->needtimep->state);
p = p->next;
}
p = run; /*进程指向执行队列*/
while(p!=NULL)
{
printf(“%s\t%d\t%d\t%d\t%d\t%d\t\t%c\n“p->namep->priop->arrivetimep->roundp->cputimep->needtimep->state);
p = p->next;
}
}
void PrioCreate() /*创建就绪队列*/
{
ReadyQueue *q;
int i;
printf(“输入就绪队列的个数:\n“);
scanf(“%d“&ReadyNum);
printf(“输入每个就绪队列分配的CPU时间片:\n“);
for(i = 0;i < ReadyNum; i++)
{
if((q = (ReadyQueue *)malloc(sizeof(ReadyQueue)))==NULL)
{
perror(“malloc“);
exit(1);
}
scanf(“%d“&(q->round)); /*输入此就绪队列中给每个进程所分配的CPU时间片*/
q ->prio = q->round; /*设置其优先级,时间片越高,其优先级越低*/
q ->linkPCB = NULL; /*初始化其连接的进程队列为空*/
q ->next = NULL;
InsertPrio(q); /*按照优先级从高到低,建立多个就绪队列*/
}
}
void InsertPrio(ReadyQueue *in) /*创建就绪
相关资源
- 自己动手写操作系统 于渊 高清带书签
- 操作系统读者写者写优先
- 消费者与生产者
- 操作系统八大调度算法c/c++实现
- 模拟操作系统的实现 C语言
- 操作系统实验可视化界面
- 操作系统概念:进程调度算法FCFS、
- STemWin无操作系统移植-(STM32)
- 《从0到1教你写uCOS-III》pdf 图文教程(
- 计算机操作系统(修订版)ppt课件[汤
- 操作系统概论(2018版)
- 操作系统进程调度先来先服务、短进
- 操作系统实验多线程同步含C++源代码
- 华中科技大学操作系统实验报告.doc
- 操作系统实现作业调度实验MFC源程序
- 自己动手写操作系统PDF上 于渊 70M 超
- 《Linux操作系统》实验报告
- ARM Cortex-M0 全可编程SoC原理及实现 面
- 死锁的避免与检测(操作系统课设)
- 操作系统用位示图管理磁盘的空间的
- 操作系统课程设计 实现段页式存储管
- c++模拟磁盘调度算法FCFS;SSTF;SCAN;
- TN05.ELF.Format.Summary.pdf(ELF文件格式分
- wanlix mindows操作系统源码
- c++页面置换算法模拟程序-
- 文件管理系统C++
- 操作系统进程调度模拟算法
- 操作系统实验二存储管理动态分区分
- 操作系统磁盘调度算法实现
- C语言实现操作系统中生产者消费者
评论
共有 条评论