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

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

抢占式内核优点有 中断响应快(与抢占式内核比较); 允许使用不可重入函数; 几乎不需要使用信号量保护共享数据, 运行任务占有CPU,不必担心被别的任务抢占。...抢占式内核优点有 使用抢占式内核,最高优先级任务什么时候可以执行,可以得到CPU使用权是可知。使用抢占式内核使得任务级响应时间得以最优化。 抢占式内核缺点有: 不能直接使用不可重入型函数。...调用不可重入函数时,要满足互斥条件,这点可以使用互斥型信号量来实现。如果调用不可重入型函数时,低优先级任务CPU使用权被高优先级任务剥夺,不可重入型函数中数据有可能被破坏。...任务主动放弃CPU使用权 内核抢占,并不是在任何一个地方都可以发生,以下情况不能发生 内核正进行中断处理。...如果在某些重要点上内核停用了硬件中断, 以保证一次性完成相关处理, 那么抢占也是不可.irqs_disabled会检测是否停用了中断.

5.3K30

Linux唤醒抢占----Linux进程管理与调度(二十三)

新唤醒进程不必一定由完全公平调度器处理, 如果新进程是一个实时进程, 则会立即请求调度, 因为实时进程优先极高, 实时进程总会抢占CFS进程. 2 Linux进程睡眠 在Linux中,仅等待CPU时间进程称为就绪进程.... */ 3 linux进程唤醒 当在try_to_wake_up/wake_up_process和wake_up_new_task中唤醒进程时, 内核使用全局check_preempt_curr看看是否进程可以抢占当前进程可以抢占当前运行进程...TASK_RUNNING,所以wake_up_process将A进程状态从睡眠状态转变为运行状态努力没有起到预期作用. 4.3 避免无效抢占 要解决这个问题, 必须使用一种保障机制使得判断链表为空和设置进程状态为睡眠状态成为一个不可分割步骤才行...内核中有很多地方使用了避免无效唤醒时候, 最普遍地方是内核线程, 因为内核线程主要功能是辅助内核完成一定工作, 大多数情况下他们处于睡眠态, 当内核发现有任务要做时候, 才会唤醒它们. 5.2...2号进程例子-避免无效抢占 下面让我们用linux内核中实例来看看Linux 内核是如何避免无效睡眠, 我还记得2号进程吧, 它主要工作就是接手内核线程kthread创建, 其工作流程函数是

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

    线程调度方式——抢占式、非抢占

    在一个进程里,线程调度有抢占式或者非抢占模式。...在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前进程使用完分配给自己CPU时间,操作系统将决定下一个占用CPU时间是哪一个线程。...Windows 95/NT, UNIX使用就是这种线程调度方式。 在非抢占调度模式下,每个线程可以需要CPU多少时间就占用CPU多少时间。...非抢占调度策略在线程运行优先级一般时用到,而对于高优先级线程调度则多采用抢占调度策略。如果你不确定系统采用是那种调度策略,假设抢占调度策略不可用是比较安全。...在设计应用程序时候,我们认为那些占用CPU时间比较多线程在一定间隔是会释放CPU控制权,这时候系统会查看那些在等待队列里面的与当前运行线程同一优先级或者更高优先级线程,而让这些线程得以使用

    5.6K10

    深入理解Linux内核之内核抢占

    Linux 那什么是抢占式内核呢?...实际上,支持内核抢占内核叫做抢占式内核,不支持内核抢占内核叫做不可抢占式内核。那么问题又来了,什么是内核抢占呢?...而对于服务器来说,它就对吞吐量要求较高,希望获得更多cpu时间,而交互性或者低延迟都是次要,所以被设计成不可抢占式内核。 下图给出非抢占式内核调度情况: ? 下图给出抢占式内核调度情况: ?...下面为抢占计数器各个域表示: ? 0-7 表示抢占计数 ,8-15表示软中断计数, 16-19表示硬中断计数,20-23表示不可屏蔽中断计数。...实际上,对于非抢占式内核来说,在内核很多地方,特别是文件系统操作和内存管理相关一些耗时路径中,都已经被内核开发者识别出来,并使用cond_resched来减小延迟(感兴趣小伙伴可以通过grep和wc

    2.6K21

    无MMU抢占式操作系统抢占工作原理

    操作系统对于初学者来说是一个很神秘东西,里面很多原理摸不清楚,导致还没入门就放弃了。 本文就来从底层开始,详细讲述抢占式操作系统(大多数RTOS)抢占原理。...包含: 线程基础原理 线程之间抢占 中断抢占线程 中断抢占中断 strongerHuang 1 运行多个线程 1.单核“单线程” 严格来说,单核处理器一次只能执行一条指令,也就是说只能“单线程”。...值相加,结果保存到寄存器V0中 SW V0, -32496(GP) # 寄存器V0值存储在RAM中(变量c所在位置) 你会发现上面执行了4个动作,但是抢占式操作系统可以在任何时候抢占另一个线程,...假如在这过程中有其他线程抢占了,其他线程同样抢占了当前线程V0、 V1,如果不对V0、 V1进行保存,那么下次回来执行当前线程,结果就会出错。...strongerHuang 2 线程堆栈 上面说抢占位置,到底在哪里,每个线程保存在哪个寄存器值中?这就是线程堆栈内容。

    1.1K20

    Linux CFS调度器之唤醒抢占--Linux进程管理与调度(三十)

    , 当然因为大多数情况下, 系统中全是CFS调度非实时进程, 因而linux内核也有一些优化策略 一般情况下选择红黑树中最左进程left作为最优进程完成调度, 如果选出进程正好是cfs_rq->...中周期性调度器通过调用curr进程所属调度器类sched_classtask_tick函数完成周期性调度工作 而entity_tick中则通过check_preempt_tick函数检查是否需要抢占当前进程...关于place_entity函数, 我们之前在讲解CFS队列操作时候已经讲很详细了 参见linux进程管理与调度之CFS入队出队操作 设想一下子如果休眠进程vruntime保持不变,...而其他运行进程 vruntime一直在推进, 那么等到休眠进程终于唤醒时候, 它vruntime比别人小很多, 会使它获得长时间抢占CPU优势, 其他进程就要饿死了....,但不能补偿太多.这样由于休眠进程在唤醒时或者新进程创建完成后会获得vruntime补偿,所以它在醒来和创建后有能力抢占CPU是大概率事件,这也是CFS调度算法本意,即保证交互式进程响应速度,因为交互式进程等待用户输入会频繁休眠

    2.6K31

    Linux不可错过信息宝库

    以数值命名文件夹,如1,它存放是init进程相关信息 非数字命名文件夹,如drivers,它存放是驱动相关信息 事实上,很多获取系统信息命令都是通过读取/proc下相关文件内容获取,例如uname...内存区域详细信息列表 查看进程相关信息 以数字命名文件夹中存储着进程相关信息。...,包括: cmdline 用于开始进程命令 cwd 当前进程工作目录一个符号链接 environ 可用进程环境变量列表 exe 正在进程中运行程序链接 fd/ 这个目录包含了进程打开文件描述符...mem 进程在内存中内容 status 进程状态信息 statm 进程内存使用信息 limits 进程软限制,硬限制等信息 maps 进程内存区域映射信息 stack 当前进程内核调用栈信息...每一项具体内容含义,以及在实际中应用,本文不做过多阐述,后面的文章将会继续介绍。/proc/pid下内容对于问题定位也十分地有帮助,本文只有简单举例,更多使用也会在后续文章中不断应用。

    1K10

    理解Linux内核抢占模型(最透彻一篇)

    当配置Linux内核时候,我们可以选择一些参数,这些参数能影响系统行为。...你可以用不同优先级、调度类和抢占模型来工作。正确地选择这些参数是非常重要。 本文将论述不同抢占模型如何影响用户和系统行为。...为了深入理解这三个抢占模型区别,我们将写一个案例: 2个线程,一个高优先级RT(50),一个低优先级RT(30) 高优先级线程要睡眠3秒 低优先级线程用CPU来做计算 3秒后高优先级线程唤醒。...内核代码,简单字符设备: #include #include #include #include <linux/cdev.h...这意味着任何代码可以抢占任何人。比如一个更加紧急任务可以抢占中断服务程序ISR。

    2.3K10

    LINUX XEN 和 KVM 到底区别在什么地方

    LINUX XEN 和 KVM 到底区别在什么地方LINUX XEN 和 KVM 到底区别在什么地方?...kvm 是 linux 内核一个 module,而 xen 是一个 linux 应用。 目前 xen 和 kvm 都支持虚拟化和半虚拟化。...kvm I/O 性能比较强。 xen 较为老旧,后期发展没有 kvm 迅猛。 kvm 集成到了不少 linux 发行版中,使用门槛较低。xen 与 linux 整合度没那么高。...而 KVM 是基于 Linux 环境开源虚拟化解决方案,其思想是在 Linux 内核基础上添加虚拟机管理模块,重用 Linux 内核中已经完善进程调度、内存管理与硬件设备交互等部分,使之成为一个可以支持运行虚拟机...2.Xen 缺点 Xen 是一个安装在 Linux 内核下层一个产品。其工作环境补丁包不能够和 Linux 内核兼容。

    3.1K20

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

    " 方法保护临界区 " 内代码 , 这些代码禁止 内核 抢占 ; 然后 , 编写 " 方法保护临界区 " 代码 ; 最后 , 使用 preempt_enable(); 宏 , 表示之后代码允许 内核...抢占 ; preempt_disable(); 与 preempt_enable(); 之间代码 , 就是 " 方法保护临界区 " 代码 , 这样可以 阻止编译器重排指令 , 在 禁止 内核抢占...preempt_disable 与 开启内核抢占 preempt_enable 之间 " 方法保护临界区 " 代码中 , 添加 " 编译器优化屏障 " ; 声明 " 方法保护临界区 " 代码示例 :...编译器 " 优化屏障 " 定义在 linux-5.6.18\include\linux\compiler-gcc.h 源码中 ; /* Optimization barrier */ /* The...-5.6.18\include\linux\compiler-gcc.h#20 三、preempt_disable 禁止内核抢占 源码 ---- 在 Linux 内核源码 linux-5.6.18\include

    1.6K20

    如何优雅抢占别人显卡?

    所以,我给大家写了一个抢占GPU脚本,只需要花几秒钟运行一下就可以关机去玩了,卷死别人! 有人可能会说,网上抢占脚本多是啊,你这有啥区别?.../GrabGPU/blob/master/grab_gpu 目前这个脚本可以指定如下参数: 抢占显存大小。...如果空闲显存超过这个大小,就抢占成功,否则无限循环抢占。 占有的时间。如果抢占到了,你想占有的时间。如果运行你自己程序,这个参数无效。 显卡ID。支持多卡,你想抢占哪几张卡。...你自己程序执行脚本路径(可选)。你可以选择抢占到显卡后,执行你自己程序,例如模型训练代码。你也可以不指定,这样默认使用我提供程序,一直把卡占着,别人也用不了。.../grab_gpu 31 24 -1 gpu.sh 这里有四个参数,31表示每张卡要抢占31GB,24表示抢到后占有24小时(在运行自己程序脚本时无效),-1表示抢占全部8张显卡,gpu.sh是你程序执行脚本

    1.5K10

    Linux 内核真的高不可攀吗?

    Linux操作系统太难?先爬过这6个陡坡 如今软件开发行业,服务器端市场基本被 Linux 系统占领了。...移动端中 Android 系统是基于 Linux 内核开发,那些很火虚拟化、消息队列、云计算、大数据等技术,都默认支持 Linux 操作系统。...而对软件工程师来说,也几乎一定会遇到 Linux 操作系统应用场景:比如 Google 搜索,淘宝购物,QQ、微信聊天等,其实背后都是成千上万 Linux 服务器在支撑。...可以说,打开 Linux 操作系统这扇门,你才是合格软件工程师。如果不能熟练地操作 Linux,你基本上等于少了一半功力,也少了一半机会。...把外包公司做上市过程,就是我们对 Linux 操作系统从入门到精通过程。

    1.1K31

    适合在任何地方使用 Linux:15 个小型 Linux 发行版

    如果你有一台老旧 PC,或者是基于单板计算机小型系统,你可能希望运行是一个占用资源较少且易于下载 Linux 版本。在这里,我们来看看占用资源非常小 Linux 发行版。...除了 Damn Small Linux 之外,这里列出所有 Linux 发行版都是最近才更新。每个发行版都可以在内存不足 1GB 机器上运行,而且大多数发行版都可以在更小资源内运行。...image.png 下载:130 MB Alpine Linux 最初是针对虚拟服务器和设备,它直接运行在内存中。它以安全为重点,面向最终用户功能较少,但如果你需要的话,也可以支持桌面功能。...antiX Linux image.png 下载:约 1GB antiX 发行版声称完全不含 systemd —— 这是现代 Linux 发行版基本构件。...ArchBang 下载:700MB Bodhi 是一款基于 Ubuntu 轻量级发行版,这款发行版采用是 Moksha(一种基于 Enlightenment 桌面)。

    1.4K10

    程序员不可不知Linux性能工具

    前言 在实际开发中,有时候会收到一些服务监控报警,比如CPU飙高,内存飙高等,这个时候,我们会登录到服务器上进行排查。本篇博客将涵盖这方面的知识:Linux性能工具。...进制转换 这里利用Python非常方便把十进制线程ID转化成了16进制,为什么要这么做呢? 因为在接下来线程DUMP文件中使用就是16进制NID。 ? 线程DUMP文件 ?...至此,就可以到去查看代码去分析为什么锁迟迟不释放原因了。 性能监测工具top详解 上文案例中,就使用到了top,而在实际中,top信息量是很大,这里详细分析下。 ?...分别代表是1MIN,5MIN,15MIN机器负载情况,如何确定负载大小呢?需要和CPU核数相结合来看,比如该机器是4核CPU,那么如果load值超过了4,就意味着负载很大了!...第三行: 主要是CPU一些信息。 US/SY,说就是用户进程和系统进程使用CPU占比。 NI,即NICE,表示被调整过线程优先级进程占比,这个比例正常不应该很大。

    43220

    程序员不可不知Linux性能工具

    前言 际开发中,有时候会收到一些服务监控报警,比如CPU飙高,内存飙高等,这个时候,我们会登录到服务器上进行排查。本篇博客将涵盖这方面的知识:Linux性能工具。...这里利用Python非常方便把十进制线程ID转化成了16进制,为什么要这么做呢? 因为在接下来线程DUMP文件中使用就是16进制NID。 ? ?...至此,就可以到去查看代码去分析为什么锁迟迟不释放原因了。 性能监测工具top详解 上文案例中,就使用到了top,而在实际中,top信息量是很大,这里详细分析下。 ?...第一行: 涉及到2个时间,一个是系统时间,一个是机器运行时间。【我们应该重点关注是机器运行时间,Why? 有时候,重启机器能带来很多问题,你懂!】 多少用户登录了系统?...分别代表是1MIN,5MIN,15MIN机器负载情况,如何确定负载大小呢?需要和CPU核数相结合来看,比如该机器是4核CPU,那么如果load值超过了4,就意味着负载很大了!

    61540

    print,Python旅程开始地方

    这次,我们要来学习是图中红框标出部分: ?...如果从常识出发,我们可以把不同东西放在不同盒子里,并且给不同盒子做上不同标记,这样家里就会整整齐齐,也方便我们取用东西。 ? 这样一来,你找东西,用东西时候,是不是就很方便了呢?...现在你已经知道了变量是存放数据小盒子。可如果你去搜百度百科,还会找到这样一条解释:变量,是指没有固定值,可以改变数。 也就是说,变量是可以改变。...提示:计算机是一行一行往下去执行程序;赋值语句运行逻辑,是先计算出等号右边结果,再把计算结果赋值给左边变量。 答案是30,为什么?...这就是变量用法啦~ 再来看input() 函数。 input中文意思是——输入。 而input() 函数作用是——程序运行到某个地方,需要用户在键盘上输入内容,并按下回车键,以让程序继续。

    73020
    领券