Linux线程调度策略以及优先级实验(图文)

Linux线程调度策略以及优先级实验

什么是线程调度策略?

Linux内核共有三种调度算法,他们分别是:

1、SCHED_OTHER 分时调度策略,
2、SCHED_FIFO实时调度策略,先到先服务
3、SCHED_RR实时调度策略,时间片轮转

其中,SCHED_FIFO与SCHED_RR属于实时策略,SCHED_OTHER属于分时策略。
实时策略线程将得到优先调用,实时策略线程根据实时优先级决定调度权值,分时策略线程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的线程将会得到优先调度。

三种调度策略

分时调度策略

SCHED_OTHER 分时调度策略:
非实时的,无法设置优先级

实时调度策略

SCHED_FIFO实时调度策略:
先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃

SCHED_RR实时调度策略:
时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平

调度策略组合情况

所有任务都采用linux分时调度策略(SCHED_OTHER)时:
创建时指定优先级nice值,根据nice值确定在cpu上的执行时间(counter),对每个任务动态优先级的计算(counter+20-nice)结果去选择运行,当这 个时间片用完后(counter减至0)或者主动放弃cpu时,该任务被放在就绪队列末尾(时间片用完)或等待队列(因等待资源而放弃cpu)中。

所有任务都采用FIFO时:
优先级高的先运行,并且该任务将一直占有CPU直到优先级更高的任务就绪或者主动放弃。同优先级先入队列先运行。

所有任务都采用RR时
综合了前两种策略,优先级高的先运行,优先级相同共分时间片,用完时间片的去就绪队列尾。

任务中同时含有实时和分时时
当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。

测试实验

主要目的时测试在不同的调度策略以及不同的优先级设定的状况下,线程的抢占情况。

测试方法主要为在设定线程策略与优先级后,创建三个线程,观察它们的log输出情况以及使用busybox top查看CPU占用情况。

修改线程属性的代码部分如下:

    param1.sched_priority = 40;                            //修改优先级 
    pthread_attr_setinheritsched(&attr1,PTHREAD_EXPLICIT_SCHED);       
    pthread_attr_setschedpolicy(&attr1,SCHED_FIFO);        //修改调度策略
    if(0!=pthread_attr_setschedparam(&attr1,&param1))
    {
   
        printf("setschedpolicy attr1 NG! \n");
    }

实验全部代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sched.h>
#include <assert.h>
#include <time.h>

#if 1
void *Thread1(void* pp)
{
   
  sleep(1);
  int i;
  int policy;
  struct sched_param param;
  pthread_getschedparam(pthread_self(),&policy,&param);
  switch(policy
  • 9
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋芋辰丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值