首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解Linux内核内核抢占

1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 我们或许经常听说过内核抢占,可是我们是否真正理解它呢...Linux 那什么是抢占内核呢?...这个时候就会分两种情况分析,如果是抢占内核那么高优先级任务就有可能抢占当前任务而调度执行(之所有是有可能是因为两者虚拟运行时间差值要大于抢占粒度才允许抢占),如果是不可抢占内核那么不允许抢占,除非当前进程执行完或者主动发生调度高优先级进程该有机会被调度...而对于服务器来说,它就对吞吐量要求较高,希望获得更多的cpu时间,而交互性或者低延迟都是次要的,所以被设计成不可抢占内核。 下图给出非抢占内核调度情况: ? 下图给出抢占内核调度情况: ?...,判断条件如下:唤醒的任务的虚拟运行时间和当前任务的虚拟运行时间差值小于最小唤醒抢占粒度转换的虚拟运行时间(唤醒的任务的虚拟运行时间更小)。

2.6K21

linux内核调度算法(2)–CPU时间如何分配

当然,实际的运行进程里,大部分并不是nginx这种希望独占CPU全部时间的进程,许多进程,比如vi,它在很多时间是在等待用户输入,这时vi在等待IO中断,是不占用时间的,内核面对多样化的进程,就需要技巧性的分配...内核分配时间是有策略和倾向性的。换句话说,内核是偏心的,它喜欢的是IO消耗型进程,因为这类进程如果不能及时响应,用户就会很不爽,所以它总会下意识的多分配CPU运行时间给这类进程。...虽然内核尽量多的分配时间给IO消耗型进程,但IO消耗进程常常在睡觉,给它的时间根本用不掉。很合理吧? 那么内核具体是怎么实现这种偏心呢?...通过动态调整进程的优先级,以及分配不同长短的CPU时间处来实现。先说内核如何决定时间的长度。 对每一个进程,有一个整型static_prio表示用户设置的静态优先级,内核里它与nice值是对应的。...内核就是这么偏爱交互型进程,从上面的优先级和时间分配上都能看出来。实际上,内核还有方法对交互型进程搞优待。

6.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基于Linux-3.9.4内核增加简单的时间轮转功能

    简单的时间轮转多道程序内核代码 原创作品转载请注明出处https://github.com/mengning/linuxkernel/ 作者:sa18225465 ---- 一、安装 Linux-3.9.4.../mykernel_for_linux3.9.4sc.patch 编译内核,这里由于 Ubantu 版本问题,需要用到 gcc7.h 版本的头文件,而查看 linux 文件夹下只有 gcc、gcc3、gcc4...qemu -kernel arch/x86/boot/bzImage 二、添加时间轮转多道批处理功能 进入 mykernel 文件夹,可以看到 qemu 窗口输出的内容的代码 mymain.c 和...= 1,当时间达到1000的整数倍时,将当前运行进程中断并打印。...通过修改一个简单的内核源码,增加一个时间轮转功能,让我们更具体的体会到了操作系统底层的实现原理,对我们后续的学习会有很大的帮助。

    99330

    Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )

    文章目录 一、禁止 / 开启内核抢占 与 方法保护临界区 二、编译器优化屏障 三、preempt_disable 禁止内核抢占 源码 四、preempt_enable 开启内核抢占 源码 一、禁止 /...开启内核抢占 与 方法保护临界区 ---- 如果要使用 " 内存屏障 " , 如 : 禁止 内核 抢占 " 方法保护临界区 " : 首先 , 声明 preempt_disable(); 宏 , 表示下面的代码就是...抢占 ; preempt_disable(); 与 preempt_enable(); 之间的代码 , 就是 " 方法保护临界区 " 代码 , 这样可以 阻止编译器重排指令 , 在 禁止 内核抢占...\compiler-gcc.h#20 三、preempt_disable 禁止内核抢占 源码 ---- 在 Linux 内核源码 linux-5.6.18\include\linux\preempt.h...-5.6.18\include\linux\preempt.h#169 四、preempt_enable 开启内核抢占 源码 ---- 在 Linux 内核源码 linux-5.6.18\include

    1.6K20

    Linux用户抢占内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)

    抢占内核的缺点有 任务响应时间慢。...CPU 1.2 抢占内核 使用抢占内核可以保证系统响应时间....抢占内核如下图所示 ? 抢占内核的优点有 使用抢占内核,最高优先级的任务什么时候可以执行,可以得到CPU的使用权是可知的。使用抢占内核使得任务级响应时间得以最优化。...更详细的触发条件如下所示, 其实不外乎就是前面所说的两种情况: 从系统调用或者中断返回用户空间 时钟中断处理例程检查当前任务的时间,当任务的时间消耗完时,scheduler_tick()函数就会设置...内核抢占 3.1 内核抢占的概念 对比用户抢占, 顾名思义, 内核抢占就是指一个在内核态运行的进程, 可能在执行内核函数期间被另一个进程取代. 3.2 为什么linux需要内核抢占 linux系统中,

    5.3K30

    Linux内核打印时间

    较为简单可行的方式是通过PrintkTime功能为启动过程的所有内核信息增加时间戳,便于汇总分析。...PrintkTime最早为CELF所提供的一个内核补丁,在后来的Kernel 2.6.11版本中正式纳入标准内核。所以大家可能在新版本的内核中直接启用该功能。...如果你的Linux内核因为某些原因不能更新为2.6.11之后的版本,那么可以参考CELF提供的方法修改或直接下载它们提供的补丁:http://tree.celinuxforum.org/CelfPubWiki...当然,你也可以选择在编译内核时直接指定“Kernel hacking”中的“Show timing information on printks”来强制每次启动均为内核信息增加时间戳。...这一种方式还有另一个好处:你可以得到内核在解析启动参数前所有信息的时间。因此,我选择后一种方式。

    6.3K40

    【STM32H7】第13章 任务调度—抢占式,时间和合作式

    mod=viewthread&tid=99514 第13章 任务调度—抢占式,时间和合作式 本章教程为大家将介绍ThreadX操作系统支持的任务调度方式:抢占式,时间和合作(轮询)式,这部分算是...支持的调度方式 ThreadX操作系统支持三种调度方式:抢占式调度,时间调度和合作(轮询)式调度。...实际应用主要是抢占式调度和时间调度,合作(轮询)式调度用到的很少。...任务切换的实现在不同的嵌入式实时操作系统中区别不大,基本相同的硬件内核架构,任务切换也是相似的。调度算法就有些区别了。下面我们主要了解一下抢占式调度器和时间调度器。...这种调度算法 可以用于抢占式或者合作式的多任务中。另外,时间调度适合用于不要求任务实时响应的情况。

    1.2K20

    【STM32F429】第13章 任务调度—抢占式,时间和合作式

    mod=viewthread&tid=99514 第13章 任务调度—抢占式,时间和合作式 本章教程为大家将介绍ThreadX操作系统支持的任务调度方式:抢占式,时间和合作(轮询)式,这部分算是...支持的调度方式 ThreadX操作系统支持三种调度方式:抢占式调度,时间调度和合作(轮询)式调度。...实际应用主要是抢占式调度和时间调度,合作(轮询)式调度用到的很少。...任务切换的实现在不同的嵌入式实时操作系统中区别不大,基本相同的硬件内核架构,任务切换也是相似的。调度算法就有些区别了。下面我们主要了解一下抢占式调度器和时间调度器。...这种调度算法 可以用于抢占式或者合作式的多任务中。另外,时间调度适合用于不要求任务实时响应的情况。

    39730

    Linux内核设备驱动之内核时间管理笔记整理

    /****************** * linux内核时间管理 ******************/ (1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用。...相对于事件驱动而言,内核中有大量函数是基于时间驱动的。 有些函数是周期执行的,比如每10毫秒刷新一次屏幕; 有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务。...带来的好处有: *内核定时器能够以更高的频率和更高的准确度运行 *依赖定时器执行的系统调用,比如poll()和select(),运行的精度更高 *提高进程抢占的准确度 (缩短了调度延时,如果进程还剩2ms...时间,在10ms的调度周期下,进程会多运行8ms。...由于耽误了抢占,对于一些对时间要求严格的任务会产生影响) 坏处有: *节拍率要高,系统负担越重。 中断处理程序将占用更多的处理器时间

    2.7K31

    Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

    文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

    23.4K32

    Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

    文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

    21.3K30

    写给吃瓜群众的 Linux 进程调度剖析

    Linux 进程调度 在上一篇文章中介绍了 Linux 内核是如何对进程进行管理的,这篇将阐述内核是如何对进程进行调度。...但对这个时间的分配,各个系统采用不同的方法,比如 macOS 采用了时间的绝对值,而 Linux 中使用时间的比例。...而实时进程是 Linux 为有时间有严格要求进程的优待。 时间 时间是一个数值,它表明进程在被抢占前所能持续运行的时间。...总之,一般用户抢占发生在: 从系统调用返回用户空间 从中断处理程序返回用户空间 因为 Linux 完整的支持内核抢占,所以只要调度是安全的(没有持有锁),内核就可以在任何时间抢占正在执行的任务。...内核抢占一般发生在: 中断处理程序正在执行,且返回内核空间之前 内核代码再一次具有可抢占性的时候 如果内核中的任务显式调用 schedule() 的时候 内核中的任务阻塞时

    56520

    linux内核编程_linux内核是什么

    内核——操作系统的内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类的用户界面—-操作系统的外在表象 基本的文件管理工具和系统工具 Linux内核的组成 Linux内核源代码目录结构是什么...Linux内核的有哪些组成部分? 进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC) Linux内核的的组成部分之间有什么关系?...Makefile:分布在Linux 内核源代码中的Makefile,定义Linux 内核的编译规则。 配置文件(Kconfig):给用户提供配置选择的功能。...记录哪些部分被编译入内核、哪些部分被编译为内核模块。 在Linux 内核中增加程序需要完成哪些工作? 将编写的源代码复制到Linux 内核源代码的相应目录。...次引导加载程序加载Linux内核和可选的初始RAM 磁盘,将控制权交给Linux内核源代码。 运行被加载的内核,并启动用户空间应用程序。

    18.9K30

    进程调度(二)——时间轮转算法

    一 定义 时间轮转算法是将所有的就绪进程按先来先服务的原则,排成一个队列,按时间轮转。时间的大小从几ms到几百ms。...当执行的时间用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间。...这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间的处理机执行时间。...method stub RR rr = new RR(); rr.Print(rr.getProcess()); System.out.println("请输入时间...new Scanner(System.in); int Timeperiod = in.nextInt(); //时间

    2K40

    Java--线程

    在计算机设计初期,并没有线程的概念,只有进程,linux系统下没有真正意义的线程,只有进程,c语言中的fork函数可以开辟一个新的进程,新的进程将对父进程进行内存拷贝,相当于复制全新的一个父进程,全新的内存...如果有linux下c语言编程的经验,我们可以知道线程就是模拟的进程,试想下:如果要你来设计一个多线程模型,你会怎么做?...,如下图所示: 内核线程模型 二、时间轮转机制 之前的JVM文章中也提到了,计算机实际上是没有并行的,而是每个线程(进程)抢占获得cpu的时间,来执行一段时间后,重新竞争,所以JVM内存模型中有程序计数器...,当一个线程陷入了死循环,那么程序会一直阻塞,可能导致系统崩溃 2.抢占式线程调度(Preemptive Threads-Scheduling) 为了解决协同式线程调度的危险,抢占式线程调度就是时间轮转机制...,各个线程只能被动的抢占cpu时间抢占到了的才能执行代码,时间到了后,暂停执行,重新由各个线程竞争时间,这种方式线程的执行时间系统是可控的,不会造成协同式线程调度一直阻塞的现象,Java使用的是抢占式线程调度

    30430

    Linux 内核】调度器 ① ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 | 抢占式调度器 | Linux 进程状态 | Linux 内核进程状态 )

    文章目录 一、调度器 0、调度器概念 1、调度器目的 2、调度器主要工作 3、调度器位置 4、进程优先级 5、抢占式调度器 二、Linux 内核进程状态 API 简介 三、Linux 进程状态 一、调度器...进程调度 目的是 最大限度利用 CPU 资源 , 也就是 CPU 时间 ; 2、调度器主要工作 " 调度器 " 主要的工作 : ① 就绪 -> 执行 : 选择 " 就绪状态 " 的进程执行 ; (..." 抢占式调度器 " 概念 : 如果 " 调度器 " 支持 " 就绪状态 " 与 " 运行状态 " 之间可以相互转换 , 则该调度器称为 " 抢占式调度器 " ; 二、Linux 内核进程状态 API...---- Linux 进程有如下状态 : 创建状态 : 进程 刚被创建时 , 处于创建状态 ; 就绪状态 : 进程 已经 获取了 相关资源 , 以及 运行条件准备就绪 ; 一旦和获取 CPU 时间使用权..., 就立刻进入 执行状态 ; 执行状态 : CPU 时间被分配给了该进程 , 正在 CPU 中执行该进程 ; 阻塞状态 : 等待被分配 CPU 时间的过程 中 , 处于该状态 ; 终止状态 : 进程

    5.6K20

    LINUX内核

    一、Linux内核2.6特点: 1.新的调度器 2.内核抢占 3.改进线程模型 4.虚拟内存 5.文件系统 6.音频:音频体系结构ALSA.支持USB音频和MIDI设备,并支持全双工重放功能。...二、LINUX内核的组成 1.LINUX内核源代码目录结构 1)arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。如i386,arm,powerpc,mips等。...4)Documentation:内核各部分通用解释和注释。...模块 16)sound:ALSA,OSS音频中设备的核心代码和常用设备驱动 17)usr:实现了用于打包和压缩的CPIO等 2.LINUX内核组成部分 2.1 LINUX主要用进程调度,虚拟文件系统,...3.Linux内核空间与用户空间 Linux只能通过系统调用和硬件中断来完成用户空间到内核空间的控制转移

    13.9K30
    领券