一、用户抢占

1、用户抢占时机

从系统调用返回用户空间
从中断处理程序返回用户空间

2、检查标志

内核返回后检查need_resched标志
如果被设置了,内核会选择一个更适合的进程投入进行

3、返回路径与代码

在entry.S汇编代码中,实现了 返回路径,并且还实现了内核入口部分程序、内核退出部分的相关代码。

二、内核抢占

1、LINUX完整支持内核抢占

调度程序可在一个内核级任务执行时打断它,并重新调度,否则内核要执行完成或遇到阻塞为止,在2.6版的内核中引入了抢占能力。

2、抢占时机

(1)没持有锁,内核就可以进行抢占,锁是非抢占区域的标志
(2)为了完成锁机制了,引入了preempt_cunt计数器,在进程的thread_info中。
(3)preempt_cunt加1表示加锁,减1表示释放锁。为0时表示没有持有锁,此时,如果need_resche设置,则内核程序可被安全抢占
(4)内核抢占发生在以下时候:
中断处理程序正在执行,且返回内核空间之前
内核代码 再一次具有可抢占性的时候
如果内核任务显式调用 schedule()
如果内核任务阻塞,导致调用 schedule()

linux内核杂记(10)-进程调度(5)相关推荐

  1. linux内核杂记(11)-进程调度(6)

    LINUX实时调度策略 调度策略分类 1.SCHED_FIFO (1)简单的先入先出调度方法 (2)不使用时间片,一旦SCHED_FIFO的进程处于可执行状态,就会继续执行,直到它自己执行完毕或显式释 ...

  2. linux内核杂记(7)-进程调度(2)

    1.进程调度的效果应如同系统具备一个理想中的完美多任务处理器,每个进程 能获得1/n 个处理器时间,n指可运行进程数量. 2.调度时进程抢占会带来一定的代价,换入与换出进程消耗,缓存效率等.CFS考虑 ...

  3. linux内核杂记(8)-进程调度(3)

    1.红黑树存储了系统中所有的可运行进程,节点的键值 是可运行进程的虚拟运行时间. 2.进程高度的主要 入口点是函数schedule(),定义在kernel/sched.c中.是内核其它部分用于调用进程 ...

  4. linux内核杂记(6)-进程调度(1)

    1.LINUX2.5系列内核中,采用了一种O(1)调度程序的新调度程序,该算法对调度响应时间 敏感的程序(比如交互的桌面系统 )不足,但对大服务器的工作 负载很理想 . 2.自内核2.6开发初期,引用 ...

  5. linux内核杂记(12)-进程调度(7)

    与调度相关的系统调用 1.进程的nice值 nice() 设置进程的nice值 2.进程的调度策略 sched_setscheduler()设置进程的调度策略 sched_getscheduler() ...

  6. linux内核杂记(9)-进程调度(4)

    1.上下文切换从一个可执行进程切换到另一个要执行进程.由定义在kernel/sched.c中的context_switch()函数负责处理. 2.每当一个新的进程被选出来准备投入运行时,schedul ...

  7. 全面解析Linux 内核 3.10.x - 内核进程

    From: 全面解析Linux 内核 3.10.x - 进程管理 三千大世界,五千小世界,却是由生命组成 - XXXX 进程类似于人类,它们被产生,有或多或少的有效生命.可以产生一个或者多个子进程,最 ...

  8. Linux内核5.10编译 与调试

    Linux内核5.10编译 与调试 Linux 5.10 编译 下载内核 准备编译环境 配置模板 编译 安装新内核 qemu 调试 busybox 根文件系统制作 qemu 运行 脚本二 方法三 目的 ...

  9. linux内核-进程与进程调度

    进程四要素 要给进程下一个确切的定义不是件容易的事情.不过,一般来说linux系统中的进程都具备下列诸要素: 有一段程序供其执行,就好像一场戏要有个剧本一样.这段程序不一定是进程所专有,可以与其他进程 ...

最新文章

  1. Pytorch 多 GPU 并行处理机制
  2. HDU -- 2084 数塔(简单DP)
  3. 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 C序列变换...
  4. EXEC函数族的一般规律
  5. linux的du使用方法
  6. 不怕贼偷,就怕贼惦记!
  7. Qt文档阅读笔记-QScopedPointer解析及实例
  8. SMI/慧荣/SM32**主控量产通用教程,PNY U盘量产!
  9. (产品)为什么知乎live采用分段语音输入而不是实时语音直播
  10. Python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  11. 第18章 基于物理的渲染
  12. VUE项目 格林威治时间转换为北京时间
  13. mac 麦克风权限添加应用
  14. pyppeteer 模拟登录淘宝H5,获取cookie
  15. 我错过了乔布斯和初代 iPhone,十年后幸好没错过你
  16. python VS matlab: reshape/max/matrix index等方法比较
  17. python 桑基图_流量结构分布图——桑基图(Sankey)
  18. Integer的equals方法
  19. c语言10B,C++程序语言10B_C.ppt
  20. 万方数据库高级索引方式

热门文章

  1. android 学习过程中登陆失效的个人理解
  2. 百练162:Post Office
  3. Jquery赋值和取值input,combobox,numberbox........
  4. ThreadPoolTaskExecutor多线程使用,及线程池配置
  5. 三大趋势在移动互联网发展
  6. python时间转换
  7. 不出现用户帐户控制-让Win7的用户账户控制(UAC)放过信任的程序
  8. 《幸福就在你身边》第七课、工作着,快乐着【哈佛大学幸福课精华】
  9. P2184 【贪婪大陆】
  10. Bitmap转圆形图片Bitmap