Linux实时调度策略(SCHED_RR)和CFS(SCHED_OTHER)之间的区别

2023-11-07

本文试图从直观角度,说明SCHED_RR调度策略和SCHED_OTHER调度策略之间的区别。

在Linux上,SCHED_OTHER和SCHED_NORMAL的意思相同,它们都是指的CFS调度策略,只不过,在内核中,CFS定义为SCHED_NORMAL,在用户态,CFS定义为SCHED_OTHER.

可参照内核头文件和musl libc头文件:

测试代码如下:

#include <string.h>
#include <pthread.h>
#include <sched.h>
#include <stdio.h>

void *child_thread(void *arg)
{
	int policy = 0;
	int max_priority = 0,min_priority = 0;
	struct sched_param param;
	pthread_attr_t attr;
	struct sched_param sp;
	bzero((void*)&sp, sizeof(sp));
	 
	pthread_attr_init(&attr);
	pthread_attr_setinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);
	pthread_attr_getinheritsched(&attr,&policy);

	if(policy == PTHREAD_EXPLICIT_SCHED){
		printf("Inheritsched:PTHREAD_EXPLICIT_SCHED\n");
	}

	if(policy == PTHREAD_INHERIT_SCHED){
		printf("Inheritsched:PTHREAD_INHERIT_SCHED\n");
	}
	 
	//pthread_attr_setschedpolicy(&attr,SCHED_RR);
	pthread_attr_setschedpolicy(&attr,SCHED_OTHER);
	pthread_attr_getschedpolicy(&attr,&policy);

	if(policy == SCHED_FIFO){
		printf("Schedpolicy:SCHED_FIFO\n");
	}
	if(policy == SCHED_RR){
		printf("Schedpolicy:SCHED_RR\n");
	}
	if(policy == SCHED_OTHER){
		printf("Schedpolicy:SCHED_OTHER\n");
	}

	max_priority = sched_get_priority_max(policy);
	min_priority = sched_get_priority_min(policy);
	printf("Maxpriority:%u\n",max_priority);
	printf("Minpriority:%u\n",min_priority);
	 
	param.sched_priority = max_priority;
	pthread_attr_setschedparam(&attr,&param);

	sp.sched_priority = 1;
	// Actually set the sched params for the current thread.
	if (0 == pthread_setschedparam(pthread_self(), policy, &sp)) {
		printf("IO Thread #%ld using high-pr
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux实时调度策略(SCHED_RR)和CFS(SCHED_OTHER)之间的区别 的相关文章

  • Scrapy FakeUserAgentError:获取浏览器时发生错误

    我使用 Scrapy FakeUserAgent 并在我的 Linux 服务器上不断收到此错误 Traceback most recent call last File usr local lib64 python2 7 site pack
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • 在 LINUX 上使用 Python 连接到 OLAP 多维数据集

    我知道如何在 Windows 上使用 Python 连接到 MS OLAP 多维数据集 嗯 至少有一种方法 通常我使用 win32py 包并调用 COM 对象进行连接 import win32com client connection wi
  • 为 Qt 应用程序创建 Linux 安装

    我刚刚用 Qt Creator 制作了一个很棒的程序 我对自己很满意 如何将其从台式机移至笔记本电脑 那么 最好的方法是安装程序 对吗 对于 Ubuntu 这是一个 Debian 软件包 对吗 我怎么做 有人这样做过吗 他们可以分享 QT
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh

随机推荐

  • Qt命令行的使用

    以前使用命令行指定参数启动Qt程序都是用argc和argv 有时用Build环境设置 现在才知道原来Qt从5 2就有了两个类 QCommandLineParser 和 QCommandLineOption 专门用于命令行启动 它们属于Cor
  • 主机漏洞利用演示MS17-010(永恒之蓝)

    ms17 010危害 对被攻击方的电脑造成蓝屏 申明 本篇文章的用意仅做学习使用 网络搭建环境 软件 Vmware Workstation 17 攻击机 Kali 靶机环境 Windows 7 Nmap软件的基本功能 1 主机发现 Host
  • .NET平台框架解读

    概述 微软在 NET跨平台之路上付出了巨大的艰辛 同时做了海量的工作 首先推出了统一的API标准规范库 NET Standard 并不断补充完善标准库 截止目前 2023 6 30 最新版本为 NET Standard 2 1 2016年发
  • 最详细的Java入门到入土完整学习教程,学Java先收藏了!

    目录 Java是一门广泛应用于软件开发的高级编程语言 它以其跨平台性 面向对象的特性和丰富的生态系统而受到广大开发者的喜爱 本教程将带您从Java的入门阶段一直深入到精通的水平 涵盖了40种常用的Java开发技术栈 并结合中国的应用场景给出
  • yolov5,yolov4,yolov3乱七八糟的

    结构对比 别问这么好看的图哪来的 问就是善假于人 toulai 的 下面简单讲讲图中我认为比较明显的变化 yolov4 backbone 全部用的都是Mish激活函数取代了yolov3的Leakyrelu 在backbone就开始使用con
  • 【PCL】的五大依赖库及作用

    安装点云PCL Point Cloud Library 库时 需要额外安装5个依赖库 它们有什么作用呢 如下 Boost 用于共享指针和多线程 Eigen 一个标准的C 模板库用于线性代数 矩阵 向量等计算 FLANN Fast Appro
  • SpringBoot集成Spring Security

    1 Spring Security介绍 Spring security 是一个强大的和高度可定制的身份验证和访问控制框架 它是确保基于Spring的应用程序的标准 来自官方参考手册 Spring security 和 shiro 一样 具有
  • 模型训练到一个新batch时会被killed【原因以及解决方法】

    模型训练到一个新batch时会被killed 原因以及解决方法 1 减小batchsize 2 减小num workers 在Dataloader函数中
  • 【区块链】周鸿祎:写区块链最好的一篇文章;曾鸣:大部分关于区块链未来伟大前景的讨论还只是猜想而已

    区块链就是未来 也是一种回到互联网本来意义的方式 文 机器之能 注 奇虎360创始人周鸿祎说 这是了解区块链最深入浅出的一篇文章 以下正文 这组词序并没有任何意义 真正让它们有价值的地方在于 这个词序是由一个被称为 MetaMask 的软件
  • 类对象的私有数据是无法被直接访问的,但是为什么在复制构造函数中,可以直接通过引用访问被复制对象的私有数据?

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • csdn获取自己所有博客的地址,包含分页

    获取自己的所有博客地址 一 步骤 1 先获取首页看到的部分 2 正则截取每月发表的博客数 总和即是所有的博客数 3 分页请求获取每一页的博客 4 正则截取获得每篇博客的地址 二 代码 import re import math import
  • 感应(异步)电机无速度传感器技术—TI例程解析

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制电流环PI控制参数设计 感应 异步 电机磁场定向控制速度环PI控制参数设计 感应 异步 电机无速度传感器技术 电压模型法 目录 电
  • Python实现简单猜数字游戏,输入不是整数时,给出提示

    猜数字游戏 要求 1 使用random 函数产生一个预设整数 让用户通过键盘输入所猜的数 如果小于预设的数 显示 遗憾 太小了 如果大于预设的数 显示 遗憾 太大了 如此循环 至猜中 提示 恭喜 预测N次 你猜中了 2 当用户输入的不是整数
  • thinkPHP_V5漏洞

    php rce攻防世界 百度thinkphpv5 查询到其存在过漏洞 在网页中随便注入 可观察到其版本为V5 0 20 再上旬该版本漏洞 描述为 只要在url后添加 s index think app invokefunction func
  • 全栈之前端

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 花开堪折直须折 莫待无花空折枝 作者主页 https www weiyigeek top 博客 https b
  • (董付国)Python 学习笔记---Python序列(4)

    字典应用案例 已有大量用户对若干电影的打分数据 现有某用户 也看过一些电影并进行过评分 要求根据已有打分数据为该用户进行推荐 1 代码采用基于用户的过滤协同算法 也就是根据用户喜好来确定与当前用户最相似的用户 然后再根据最相似用户的喜好为当
  • 数据分析02——numpy模块的在jupyter中的使用

    0 numpy 在计算机中会把数学当中的矩阵叫做数组 在很多应用中的表格也就是通过矩阵表示的 所以numpy广泛用于机器学习 数据分析 和图像处理领域 1 numpy常用方法和函数 前言 在使用numpy创建数组之前必须先导入模块 impo
  • php升级

    1 要使用lumen的单元测试 https lumen laravel com docs 5 2 testing 使用单元测试 cd 项目目录 phpunit tests 里面需要使用phpunit https phpunit de man
  • freeRTOS---空闲任务与阻塞延时(1)

    在上传这篇文章的时候 同时也上传了代码 欢迎下载 RTOS中的延时是在需要延时的时间内任务放弃CPU的使用权 超过延时时间后重新获得CPU的使用权 叫做 阻塞延时 空闲任务是在启动调度器后创建的 是CPU空闲时候运行的 是优先级最低的 空闲
  • Linux实时调度策略(SCHED_RR)和CFS(SCHED_OTHER)之间的区别

    本文试图从直观角度 说明SCHED RR调度策略和SCHED OTHER调度策略之间的区别 在Linux上 SCHED OTHER和SCHED NORMAL的意思相同 它们都是指的CFS调度策略 只不过 在内核中 CFS定义为SCHED N