IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux抢占是如何发生的(2)? -> 正文阅读

[系统运维]Linux抢占是如何发生的(2)?

参考博客:

Linux CFS调度器之选择下一个需要调度的进程_liuhangtiant的博客-CSDN博客前言CFS调度器选择下一个要执行的进程时,基本原则是选择vruntime最小的进程,vruntime小意味着应该受到CPU的优待。但是在某些情况下,会对该原则有所违背,比如某个进程睡眠了一段时间,时间到了以后理应尽可能快的被调度,这个过程可能会导致当前进程被抢占,好端端的被抢占了,CPU在补偿了刚刚醒来的进程后,理应再补偿下被抢占的进程。发生在进程唤醒过程中的抢占事件进程睡眠和进程唤醒的...https://blog.csdn.net/liuhangtiant/article/details/84455351Linux进程管理(四)进程调度之抢占式调度_JT同学的博客-CSDN博客_抢占式进程调度Linux进程管理(四)进程调度之抢占式调度文章目录Linux进程管理(四)进程调度之抢占式调度一、抢占式调度二、设置需要重新调度的标志的时机(TIF_NEED_RESCHED)三、进程抢占的时机3.1 用户态的抢占时机3.2 内核态的抢占时机四、总结上篇文章我们将了内核调度分为主动调度和抢占式调度,主动调度我们已经讲解过了,这篇文章我们来讲解一下抢占式调度一、抢占式调度我们说过,进程真正...https://blog.csdn.net/weixin_42462202/article/details/102954818声明:本篇文章充满了猜想,因为调度器/调度算法/CPU运行队列的知识储备还不够

1.在中断返回内核态时的抢占图示

简要描述下图就是:

1). 系统的抢占肯定是开启的,CONFIG_PREEMPT=y

2). 触发抢占:在中断ISR中唤醒了高优先级任务,触发了抢占(此时抢占还未真正执行)

3). 执行抢占:在中断返回内核态时迎来一个抢占点,低优先级任务被抢占

?2. 抢占是怎么被触发的?

唤醒高优先级任务实际上就是在中断ISR中调用了wake_up系列函数唤醒等待队列上的进程,该系列函数的整个调用链如下图,代码参考./kernel/sched/core.c

这里p是要唤醒的进程,cpu是当前运行的CPU(不一定正确),而rq是CPU上的运行队列(run queue),接着看ttwu_do_active()->ttwu_do_wakeup()->check_preempt_curr()

?

这个函数看名字猜意思:检查当前进程的可抢占性,如果调度类是 fair_sched_class,那么 check_preempt_curr 就是 check_preempt_wakeup(./kernel/sched/fair.c)

这里的注释说得很清楚: 如果必要的话,用新唤醒的进程来抢占当前进程

因为这里的执行context是在中断上下文,所以我理解rq->curr是被中断的那个进程

se是被中断的那个进程的成员,pse则是新唤醒进程的成员

如果被中断的进程已经被设置了TIF_NEED_RESCHED标记,表明抢占已经被触发,被中断的进程可以被抢占,直接返回;

如果被中断的进程是IDLE进程而被唤醒的进程不是IDLE进程,则IDLE进程被NON-IDLE进程抢占

?

如果被中断的进程和被唤醒的进程都是普通进程的话:

如果被中断的进程的vruntime比较小,那么不能抢占,因为这意味着被中断的进程需要受到优待。
如果被中断的进程的vruntime比较大,而且相比于被唤醒的进程超过了一定的门限值,那么需要补偿被唤醒的进程,也就是允许被唤醒的进程抢占被中断的进程

?

preempt label实际上就是抢占的实际触发点,通过resched_curr()函数,将被中断进程的TIF_NEED_RESCHED置位

?

3. 抢占式如何被执行的?

假设在中断的ISR中唤醒高优先级的进程的时发现被中断进程可以被抢占,即按照第2点的调用流程走到了preempt标签,成功设置了被中断进程的TIF_NEED_RESCHED标志

这时到了中断结束返回内核态进程上下文的时候,出现了一个抢占点:

?

如果抢占使能且被中断的进程需要被调度出去(TIF_NEED_RESCHED置位),那么调用preempt_schedule_irq()函数实施抢占,

?

至此,就大概说清楚了在中断返回内核态时的抢占式如何发生的(怎么触发的抢占,怎么执行的抢占)?

?

?

?

?

?

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:14:41  更:2022-04-28 12:15:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:37:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码