SCHED_RR与SCHED_FIFO调度策略不同点

前言:
内核默认调度算法是循环时间分享策略(SCHED_OTHER或SCHED_NORMAL),实时调度策略分为两种SCHED_RR和SCHED_FIFO,linux系统中,这两个调度策略都有99个优先级,其优先级数值从1(低优先级)~ 99(高优先级),每个优先级又有一个进程队列。
  1. SCHED_RR :

同优先级的实时进程中,每个进程又是通过获得时间片来分时运行。
不同优先级的实时进程,高优先级的实时进程能够抢占低优先级的实时进程。

  1. .SCHED_FIFO :

同优先级的实时进程,后进入的进程要等前一个进程释放了CPU,才能够运行。(没有时间片)
不同优先级的实时进程,高优先级的实时进程能够抢占低优先级的实时进程。

SCHED_RR :
a.c
#define _GNU_SOURCE
#include <stdio.h>
#include <sched.h>
#include <string.h>
int main()
{
	struct sched_param sd;
    cpu_set_t set;
	sd.sched_priority=50;
	sched_setscheduler(0,SCHED_FIFO,&sd);    //设置实时优先级50
	CPU_ZERO(&set);
	CPU_SET(0,&set);   
	sched_setaffinity(0,sizeof(cpu_set_t),&set);  //设置CPU亲和力
	while(1)
	{
	    printf("world\n");
	}
	return 0;
}
b.c
#define _GNU_SOURCE
#include <stdio.h>
#include <sched.h>
#include <string.h>
int main()
{
	struct sched_param sd;
    cpu_set_t set;
	sd.sched_priority=50;   //实时优先级50
	sched_setscheduler(0,SCHED_RR,&sd);
	CPU_ZERO(&set);
	CPU_SET(0,&set);
	sched_setaffinity(0,sizeof(cpu_set_t),&set);   //设置CPU亲和力
	printf("this is SCHED_RR\n");
	while(1);
	return 0;
}
运行顺序:先运行b进程,再运行a进程。

在这里插入图片描述

上图表明,使用SCHED_RR调度策略的a进程,即使b进程已经运行的前提下,由于SCHED_RR策略使用了分配时间片的策略,所以a进程也能够获得时间片来运行。(a,b进程同优先级50)
SCHED_FIFO:
a.c
#define _GNU_SOURCE
#include <stdio.h>
#include <sched.h>
#include <string.h>
int main()
{
	struct sched_param sd;
    cpu_set_t set;
	sd.sched_priority=50;   //设置实时优先级50
	sched_setscheduler(0,SCHED_FIFO,&sd);
	CPU_ZERO(&set);
	CPU_SET(0,&set);
	sched_setaffinity(0,sizeof(cpu_set_t),&set);   //设置CPU亲和力
	while(1)
	{
           printf("world\n");
	}
	return 0;
}

b.c
#define _GNU_SOURCE
#include <stdio.h>
#include <sched.h>
#include <string.h>
int main()
{
	struct sched_param sd;
    cpu_set_t set;
	sd.sched_priority=50;
	sched_setscheduler(0,SCHED_FIFO,&sd);    //实时优先级50
	CPU_ZERO(&set);
	CPU_SET(0,&set);   
	sched_setaffinity(0,sizeof(cpu_set_t),&set);  //设置CPU亲和力
	printf("this is SCHED_FIFO\n");
	while(1)
	return 0;
}

运行顺序:先运行b进程,再运行a进程。

在这里插入图片描述

CTRL+C:杀死b进程

在这里插入图片描述

上图表明,使用SCHED_FIFO调度策略的b进程会占用CPU,直到:
  • 自动放弃CPU
  • 被杀死了
  • 被高优先级的实时进程抢占运行了
才会释放CPU,使用SCHED_FIFO调度策略的a进程才能运行。(a,b进程同优先级50)
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值