首页 > 系统相关 >linux 内核抢占

linux 内核抢占

时间:2023-04-29 14:11:05浏览次数:45  
标签:优先级 调度 PREEMPT 内核 任务 linux 抢占

什么是内核抢占呢?

周期性时钟中断:对于用户任务,当每个时钟中断到来后都会检查它的实际运行时间是否超过理想运行时间,或者运行队列中有没有优先级更高的进程,一般如果满足其中一个条件就会设置重新调度标志,然后在中断返回用户态的前夕发生调度,这是所谓的用户任务抢占。但是如果处于一个内核态的任务正在运行,这个时候发生中断唤醒了一个高优先级的任务,那么这个被唤醒的任务能否被调度执行呢?这个时候就会分两种情况分析,如果是抢占式内核那么高优先级任务就有可能抢占当前任务而调度执行(之所有是有可能是因为两者虚拟运行时间差值要大于抢占粒度才允许抢占),如果是不可抢占式内核那么不允许抢占,除非当前进程执行完或者主动发生调度高优先级进程该有机会被调度。也就是说,支持内核抢占的内核不仅允许在用户态的任务可以被抢占,处在内核态的任务也允许被抢占(请注意这里说的是内核态,因为用户空间任务可以通过系统调用等进入内核态),这样对于交互性或者低延迟的应用场景很友好,如手持设备和桌面应用,响应会很快。而对于服务器来说,它就对吞吐量要求较高,希望获得更多的cpu时间,而交互性或者低延迟都是次要的,所以被设计成不可抢占式内核。

 

下图给出非抢占式内核调度情况:

 下图给出抢占式内核调度情况:

 

对比两个图可以发现:采用抢占式内核调度的情况下,在中断中唤醒一个高优先级任务能够得到很好的响应。

关于抢占式内核还是不可抢占式内核的选择在源码的kernel/Kconfig.preempt有所描述:

choice
    prompt "Preemption Model"
    default PREEMPT_NONE

config PREEMPT_NONE
    bool "No Forced Preemption (Server)"...

config PREEMPT_VOLUNTARY
    bool "Voluntary Kernel Preemption (Desktop)"...

config PREEMPT
    bool "Preemptible Kernel (Low-Latency Desktop)"...

config PREEMPT_RT
    bool "Fully Preemptible Kernel (Real-Time)"
    depends on EXPERT && ARCH_SUPPORTS_RT
...

endchoice

 

 

 

 

 

 

 

 

 

 

 

标签:优先级,调度,PREEMPT,内核,任务,linux,抢占
From: https://www.cnblogs.com/god-of-death/p/17363941.html

相关文章

  • Linux设备驱动开发详解
    Linux内核系列文章Linux内核设计与实现深入理解Linux内核Linux设备驱动程序Linux设备驱动开发详解文章目录Linux内核系列文章前言一、待续前言  本文主要用来摘录《Linux设备驱动开发详解第四版》一书中学习知识点,本书基于Linux4.0版本,源代码摘录基于Linux4.15.18......
  • RHEL8Vim与Shell命令脚本-Linux就该这么学4
       本章介绍如何使用Vim编辑器来编写和修改文档,然后通过逐步配置主机名称、系统网卡以及软件仓库等文件,加深Vim编辑器中诸多命令、快捷键与模式的理解;能够在Shell脚本中以多种方式接收用户输入的信息,能够对输入值进行文件、数字、字符串的判断比较。在熟练使用“与、或......
  • Linux系统的远程管理
    10.1远程管理简介“运筹帷幄之中,决胜千里之外”远程管理含义远程管理方式10.2终端方式的字符界面远程管理10.2.1Telnet方式安装Telnet程序在Linux主机中启动Telnet服务(基于xinetd下)systemctlstarttelnet.socketsystemctlstartxinetd服务开机自行启动systemctlen......
  • Linux/Win/MacOS系统 安装JDK(Java)教程,JDK下载
    JDK下载安装与环境变量配置图文详细教程,Window、Linux和MacOS(M1)系统安装jdk教程。我的世界(Minecraft)开服教程:https://blog.zeruns.tech/tag/mc/性价比高的服务器/VPS推荐:https://blog.zeruns.tech/archives/383.html什么是JDK?SUN公司提供了一套Java开发环境,简称JDK(JavaDevelopm......
  • 如何搭建表白墙网站(LoveWall),Linux搭建网站教程
    用宝塔面板和开源表白墙程序LoveWall搭建一个表白墙网站。LoveWall是一个基于Thinkphp开发的表白墙。特色功能点赞发评论发弹幕多校区分享页涉证、涉H、暴力、违禁物等名词进行检测waitUpdate。下面是搭建教程:一、注册域名域名就是你的网站的网址,比如:blog.zeruns.tech就是我......
  • 提供远程网页操作的hta代码,用于不停的检测自已打开句柄被其它open抢占捉取用.
    <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-......
  • linux 内核同步机制
    rw_semaphore,读写信号量和mutex很像。保护临界区的原因是其同时有被修改和读的可能,如果这个资源只是被读永远不会修改,那也不需要保护。有这样一个场景,被保护的临界区大部分情况下都是读取操作,少数情况会被修改。如果使用mutex,假设此刻一个读者进入临界区,另外一个线程也是读取操作......
  • Linux目录说明
    Linux目录结构Linux是一种以Unix为基础的操作系统,具有与Unix相似的目录结构。Linux的文件系统是一个树形结构,所有的文件和目录都位于根目录下。以下是Linux目录结构的常见组成部分:/bin:二进制文件存放目录,包含许多常用命令、工具和可执行文件。/boot:启动加载程序和......
  • Linux下安装mysql(aarch64版本)
    MySQL安装及配置1.停止MySQL服务sudosystemctlstopmysqld2.启动MySQL服务sudosystemctlstartmysqld3.卸载旧版本MySQL查看现有版本,mariadb和mysql都要查:rpm-qa|grepmariadbrpm-qa|grepmysql卸载:rpm-e--nodeps【文件名】再次检查是否卸载干净:rpm-......
  • linux自启动
    linux自启动rc.local文件中添加自启动命令/etc/rc.d/rc.local用于用户自定义开机启动程序,可以往里写开机要执行的命令或脚本[root@localhost~]$cat/etc/rc.d/rc.local/data/init/restart_game.shtouch/var/lock/subsys/local在/etc/init.d目录下添加自启动脚本linux......