操作系统进程调度

本文介绍了操作系统中的三种调度算法:先来先服务(FCFS)、时间片轮转和优先级调度。通过示例代码详细解释了每种算法的实现,并展示了各自的运行结果和优缺点分析。对于理解操作系统的进程调度机制提供了深入的洞察。
摘要由CSDN通过智能技术生成

这是我关于操作系统调度算法的一些分享。

算法一:先来先服务算法

实现代码:

#include<stdio.h>

float t,d; /*定义两个全局变量*/

struct /*定义一个结构体数组,包括进程的信息*/

{

         int id;

         float ArriveTime;

         float RequestTime;

         float StartTime;

         float EndTime;

         float RunTime;

         float DQRunTime;

         int Status;

}arrayTask[4]; /*定义初始化的结构体数组*/

 

GetTask()/*给结构体数组赋值,输入到达,服务时间*/

{

         int i;

         float a;

         for(i=0;i<4;i++)

         {arrayTask[i].id=i+1;

         printf("input thenumber");

         printf("input thethe ArriveTime of arrayTask[%d]:",i); /*用户输入进程的时间,初始为零 */

         scanf("%f",&a);

         arrayTask[i].ArriveTime=a;

         printf("input theRequestTime of arrayTask[%d]:",i);

         scanf("%f",&a);

         arrayTask[i].RequestTime=a;

         arrayTask[i].StartTime=0;

         arrayTask[i].EndTime=0;

         arrayTask[i].RunTime=0;

         arrayTask[i].Status=0; /*开始默认的标志位零*/

         }

}

 

int fcfs() /*定义 FCFS 中寻找未执行的进程的最先到达时间*/

{

         int i,j,w=0; /*在结构体数组中找到一个未执行的进程*/

         for(i=0;i<4;i++)

         {

                   if(arrayTask[i].Status==0)

                   {

                            t=arrayTask[i].ArriveTime;

                            w=1;

                   }

                   if(w==1)

                   break;

         }

         for(i=0;i<4;i++) /*查找数组中到达时间最小未执行的进程*/

         {

                   if(arrayTask[i].ArriveTime<t&&arrayTask[i].Status==0)

                   t=arrayTask[i].ArriveTime;

         } /*返回最小到达时间的数组的下标*/

         for(i=0;i<4;i++)

         {

         if(arrayTask[i].ArriveTime==t)

         return i;

         }

}

 

int sjf() /*定义 FCFS 中寻找未执行的进程的最先到达时间*/

{

         int i,x=0,a=0,b=0; /*判断是不是第一个执行的进程*/

         float g;

         for(i=0;i<4;i++)

         {

                   if(arrayTask[i].Status==1)

                   {

                            g=arrayTask[i].EndTime;

                            x=1;

                   }

         }

         if(x==0) /*第一个执行的进程按 FCFS*/

         {

                   t=arrayTask[0].ArriveTime;

                   for(i=0;i<4;i++)

                   {

                            if(arrayTask[i].ArriveTime<t)

                            {t=arrayTask[i].ArriveTime;

                                      a=i;

                            }

                   }

                   return a;

         }

         else

         {

                   for(i=0;i<4;i++)

                   {if(arrayTask[i].EndTime>g)

                   g=ar

  • 16
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、课程设计目的 1、要求学生设计一个模拟进程调度的算法 2、理解进程控制块的结构 3、理解进程运行的并发性 4、掌握进程调度的三种基本算法 二、课程设计题目描述和要求 设计题目描述 在多道程序运行环境下,进程数目一般多于处理机数目,使得进程要通过竞争来使用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机的任务是由进程调度程序完成的。一个进程被创建后,系统为了便于对进程进行管理,将系统中的所有进程按其状态,将其组织成不同的进程队列。于是系统有运行进程队列、就绪进程队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。进程调度的算法有多种,常用的有优先级调度算法、先来先服务算法、时间片轮转算法。 进程是程序在处理机上的执行过程。进程存在的标识是进程控制块(PCB),进程控制块结构如下: Typeedef struct node { Char name[10]; /*进程标识符*/ Int prio; /*进程优先数*/ Int cputime /*进程占用CPU时间*/ Int neentime /*进程到完成还需要的时间*/ Char state; /*进程的状态*/ Struct node *next; /*链指针*/ }PCB; 系统创建一个进程,就是由系统为某个程序设置一个PCB,用于对该进程进行控制和管理。进程任务完成,由系统收回其PCB,该进程便消亡。每个进程可以有三个状态:运行态、就绪态和完成状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值