linux多进程原理,Linux进程调度

极简模式

假设我的系统只有一种调度算法cfs

那么有个调度的队列 cfs_rq

所有running的进程都会 进入这个队列,不在running 或者其他情况会出队列,ok。则假设队列控制的算法有以下。

cfs_rq_enqueue

cfs_rq_dequeue

cfs_rq_pick

所操作的是进程描述符 task_struck.

那么很简单可以理解上述过程

scehed_pick ---->cfs_rq_pick就行了。

多个调度算法

那么如果除了cfs还有rt算法

那么就有两个调度队列,cfs_rq和rt_rq。

一个进程task_struck 有可能属于cfs和rt。

那么考虑 scehed_pick 是如何pick?

ok,Linux建立一个sched_class 的结构链表,sched_class_cfs和sched_class_rt或者还有其他的。顺序的从这么多个调度算法中选择一个合适的。

stop_sched_class -> -> rt_sched_class -> fair_sched_class -> idle_sched_class

如上。那么问题来了,如果前面的队列一直满足,后面的队列就永远得不到执行,这些sched_class之间没有个合理的逻辑吗?

目前看到的逻辑,任务dl 是最先满足的,rt次之,cfs随后,idle当然是最后的,这样的逻辑,基本上能让人有点信服。

能信服,不够科学吧???还是有什么我没有看到的优先级。???

再抽象一层sched_entity

一般情况 cfs和rt或者其他的什么的调度算法的接口 enqueue或者dequeue 都是对task_struck 进行操作的。

但是Linux 这里再抽象一个sched_entity,每个task_struck 对应一个sched_entity 。调度算法对sched_entity操作就行了。

这样抽象我猜想有两个目的,一个是统一比较好看,和task_struck隔离。第二个是,为了下面的组调度做准备。

加入组调度

组调度的数据结构,和组织架构大概是如下这个样子

72903e4df3b13fbbe64562bb2067aa1e.png

c3ecbe2be70e520fc5409ac428b6bf1e.png

OK,如果Linux进行组调度,就不会说使用全局的cfs_rq队列,或者rt_rq队列。而是将这些队列分配到task_group中。大概流程是这样子的。

我们假设我们有两个组 GroupA 和GroupB A占2 B占1 就是有三次调用的情况下 A组会被调用两次,B组只有1次。

f244348cf465370946e44e0fb7da3c76.png

这个时候有一个进程启动了 task_struck task1

5497f4f1bd25aab88ce828c43425dcf5.png

他选择A组,同理task2 可能也选择A task3可能选择B 如下

cf76f04cf549ff95c043c5182457d1c9.png

而A 和 B 不会记录 task的接口体,他记录task 的sched_entity 并用一个se[] 数组表示。

那么还有,task1 task2 有可能是cfs调度也有可能是rt,那么gruop结构体就用 cfs_se[] cfs_rq 和 rt_se[] rt_rq记录。

那么问题来了

task1 task2 属于cfs还是属于rt 是什么时候设置的?

在Android和linux里面没有看到,目前看到的是 0 也就是cfs,

那么有以下可能就是说,如果你不设置,就默认是0,或者继承父亲的等等这种默认策略。

scehed_pick 时候怎么pick?

按照pick三次 两次是A,ok。到了A,再使用这个策略

stop_sched_class -> dl_sched_class -> rt_sched_class -> fair_sched_class -> idle_sched_class

这个是说的通的。

但是要根据代码来。

接下来分析调度过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openwrt使用linux内核版本,降低OpenWRT的Linux内核版本

不久前,为了移植某驱动程序,笔者可谓绞尽脑汁,在4.1内核版本上,尝试了很多次都没能成功,后来仔细分析,才知道是内核版本过高导致的,本文给出降低内核版本的方法,具体编译环境的搭建&…

linux天气软件,类似智能手机!Linux中安装Conky天气插件

如今,智能手机中很多都安装相匹配外观的天气小插件,而对于喜欢操作系统平台的用户而言,可以在你的Linux桌面中拥有像智能手机一样的天气外观。通过Flair Weather Conky可以将使用一个GUI工具Conky Manager在Linux中轻松地管理Conky。这里介绍…

linux安装下载中文包,linux下安装中文包和字体

在虚拟机中使用中文输入法和中文显示使用的是rhel5的镜像我把其镜像挂载在/mnt/cdrom中,然后切换到/Server目录下,安装支持中文字体Mount /dev/cdrom /mnt/cdromCd /mnt/cdrom/serverrpm -ivh fonts-chinese-3.02-9.6.el5.noarch.rpmrpm -ivh fonts-ISO8…

linux无桌面重做系统,Linux不需要重做系统

感谢hsyyf的投递但从系统构架上来讲,总所周知,Linux的稳定性远大于windows,单纯的使用不会引起系统的损坏。当不进行危险操作时,例如执行sudo rm-rf/*之类的命令,或者混用分区工具,是不会引起各种彻底性损坏…

linux远程连接工具putty使用方法,linux远程登陆工具putty使用

#putty工具百度下载即可,最好从官网下。安装时,除安装位置外,其余默认即可。1、使用命令ifconfig命令,记下eth0的IP,我的是192.168.1.1692、打开putty,并将查到的ip写在图中位置,下侧的Saved Se…

linux mint安装步骤,Linux mint 安装步骤

##Linux mint 安装步骤##家里的笔记本以前一直用Deepin系统,但是Deepin系统的wifi实在是太慢了。还有就是启动软件是有时候总没响应,卡死机。 最近重装系统,选择了mint ,在这里记录下安装步骤。###1.制作U盘启动盘###下载iso文件,…

linux 商业游戏,Ubuntu下安装试玩原生Linux版商业游戏Braid

这款原生Linux版商业游戏Braid国外出售价大约在80美元左右。每年在Linux平台上发布的原生商业游戏是屈指可数,而且这些游戏的质量也是参差不齐。不过这款原生Linux版商业游戏Braid还是值得一玩的,这款Braid游戏创意十足,您可以通过拼图和时间…

linux centos 7 crontab 启动,CentOS 7 Linux执行crontab 计划任务实操 - 好应网

[inlosc_lg_title]一、环境准备[/inlosc_lg_title]yum install vixie-cron #安装定时任务插件yum install crontabs #安装定时任务crontabs/bin/systemctl restart crond.service #启动服务/bin/systemctl reload crond.service #重新载入配置/bin/systemctl status crond.serv…

三羊献瑞c语言编程入门,蓝桥杯-三羊献瑞,

蓝桥杯-三羊献瑞,更多精彩文章请关注公众号『大海的BLOG』问题观察下面的加法算式:祥 瑞 生 辉 三 羊 献 瑞----------------三 羊 生 瑞 气其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字,‘三’和‘祥’不…

倒果汁c语言,水果榨汁补维生素C?这些补维生素的错误别再犯了

原标题:水果榨汁补维生素C?这些补维生素的错误别再犯了蔬菜和水果作为维生素C、矿物质和植物纤维的重要来源,是每天餐桌上都要出现的食物,一旦水果蔬菜吃不够,身体就会开始找你麻烦。在处理蔬菜水果的时候,…

android 判断对象,Android网络判断知识小结

Android中判断当前网络是否可用应用场景:实现判断当前网络是否可用当前有可用网络,如下图:当前没有可用网络,如下图:实现步骤:1、获取ConnectivityManager对象Context context activity.getApplicationCon…

html选择器是什么,CSS3选择器是什么?

首先我们来看一下displaynone的意思是什么?display:none的意思:隐藏元素并脱离文档,流就是隐藏该区域,不占实际空间,但对后台来说真实存在,可以获取被隐藏的元素简单的来说就是将元素设置为none的时候既不会…

零基础学计算机408,又一所重点大学改考408!21计算机考研会全面408吗?

【北京工业大学】于7月17日发布《关于北京工业大学2021年全国硕士研究生招生考试部分考试科目及考试大纲调整的通知》,要点如下:文法学部0401教育学专业课改考 311统教育学信息学部计算机学院0812计算机科学与技术0839网络空间安全0854电子信息 (专业学位…

edge如何导入html文件收藏夹,edge浏览器收藏夹如何导入?edge浏览器收藏夹导入方法...

在使用浏览器的时候需要用户进行多方便的导入和使用,这样在数据共享和传递的时候才会更加的方便,那么这款软件要如何操作使用呢,有兴趣的用户可以使用手机快速申请使用,帮助用户的生活,让用户的生活更加的便捷&#xf…

中职生计算机专业600分,来了!超全盘点高职分类中500-600分及以上的高中生能报的专业和院校名单!...

福建高职分类考试志愿填报4月27日开始,招生计划不断更新中关注【福建高考】,免费使用志愿填报工具参加高职分类的同学们志愿填报在即,你定好目标了吗?本期,小编为大家盘点高职分类各分段的高中生能报哪些专业和大学~一…

华为手机怎么用计算机玩隐藏空间,玩法 | 华为手机这五个隐藏功能,用过的都说好!...

原标题:玩法 | 华为手机这五个隐藏功能,用过的都说好!欢迎转载,请注明出处,抄袭必究!近年来国产手机都很争气,华为、小米、OPPO、vivo都迅速的成长起来,让大家告别了疯抢苹果的时代。…

微型计算机简化结构,基于FPGA的简易微型计算机结构分析与实现

0 引言通常,人们对微型计算机的工作原理及硬件结构的了解来源于书本知识,深入理解掌握其功能特点比较困难,要自己亲手去做一个类似功能的微型计算机更是不可能。随着可编程逻辑器件的广泛应用,为数字系统的设计带来了极大的灵活性…

django 返回ajax html,Django 前台通过json 取出后台数据

前台通过json 取出后台数据步骤1:后台数据通过 JSON 序列化成字符串注意:1、json是1个字符串2、通过json.dumps(xxx) 序列化成 1个字符串的 字典对象views.pydef ajax(request):if request.methodPOST:print(request.POST)data{status:0,msg:请求成功,data:[11,22,3…

长春金桥计算机学校,金桥学校2017年招生简章

原标题:金桥学校2017年招生简章金桥学校创建于2000年5月,现有45个教学班,在校学生2700余人。近年来,学校以“培养高素质的现代中国人”为办学目标,坚持“德育为首、做人第一”的办学理念,积极改革创新&…

Oracle中通过substr和instr实现截取指定字符之间的字符串:

摘要:在开发项目的过程中遇到了这样的一个问题,就是从远程服务器取到的数据中是由一段规则的字符串组成的,但是你想要的还不是这段字符串,是其中的一段字符串,那就的使用Oracle强大的函数了,我的问题是这样…