上下文切换,也就是从一个可执行进程切换到另一个可执行进程,由定义在kernel/sched.c中的context_switch()函数负责处理。每当一个新的进程被选出来准备投入运行的时候,schedule()就会调用该函数。它完成了两相基本工作:

      1.调用声明在<asm/mmu_context.h>中的switch_mm(),该函数负责把虚拟内存从上一个进程映射切换到新的进程中去,其实就是切换到另一个进程的地址空间中,请看下图示例:


      2.调用声明在<asm/system.h>中的switch_to(),该函数负责从上一个处理器状态切换到新进程的处理器状态。这包括保存,恢复栈信息和寄存器信息,还有其他和体系结构有关的状态信息,都必须以每个进程为对象进行管理和保存。请看如下示例:


      

      下面我们看下进程抢占的时机。

1.用户抢占

      从系统调用返回用户空间时

      从中断处理程序返回用户空间时

2.内核抢占

      中断处理程序正在执行,且返回内核空间之前

      内核代码再一次具有可抢占性的时候

      如果内核中的任务显示的调用schedule()

      如果内核中的任务阻塞(这同样会导致调用schedule())

Linux2.6--进程抢占和上下文切换相关推荐

  1. 进程和线程上下文切换_编码人员:上下文切换对于计算机和关系而言都很难

    进程和线程上下文切换 Clive Thompson is a longtime contributing writer for the New York Times Magazine and a co ...

  2. Linux2.6内核--抢占

    [摘要]本文首先介绍非抢占式内核(Non-Preemptive Kernel)和可抢占式内核(Preemptive Kernel)的区别.接着分析Linux下有两种抢占:用户态抢占(User Pree ...

  3. 进程用户态 上下文切换需要保存哪些_漫话性能:CPU上下文切换

    序言 表弟:CPU平均负载​zhuanlan.zhihu.com 我们理解了平均负载( Load Average),并用三个案例展示了不同场景下平均负载升高的分析方法.这其中,多个进程(或线程)竞争 ...

  4. 进程和线程上下文切换

    图文对比 进程上下文切换 进程上下文包含了进程执行所需要的所有信息. 1.用户地址空间:包括程序代码,数据,用户堆栈等: 2.控制信息:进程描述符,内核栈等: 3.硬件上下文:进程恢复前,必须装入寄存 ...

  5. 进程切换(上下文切换)

    多任务操作系统是怎么实现运行远大于CPU 数量的任务个数的?当然,这些任务实际上并不是真的在同时运行,而是因为系统通过时间片分片算法,在很短的时间内,将CPU 轮流分配给它们,造成多任务同时运行的错觉 ...

  6. Linux内核:进程上下文切换

    目录 1.进程上下文的概念 2.上下文切换详细过程 2.1 进程地址空间切换 2.2 处理器状态(硬件上下文)切换 3.ASID机制 4. 普通用户进程.普通用户线程.内核线程切换的差别 5. 进程切 ...

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

    日期 内核版本 架构 作者 GitHub CSDN 2016-07-01 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 ...

  8. CPU上下文切换、进程上下文、中断上下文

    由于Linux是一个多任务操作系统,能够支持远大于CPU数量的任务同时运行.当然,这些任务实际上并不是真的在同时运行,而是由CPU进行调度,将时间分片,每个任务占用1个时间片,通过轮流的方式运行,但由 ...

  9. Linux:上下文,进程上下文和中断上下文概念,上下文切换

    Linux:上下文,进程上下文和中断上下文概念,上下文切换 1. 上下文 context:(就是一个环境) 2. 进程上下文 2.1 进程上下文的三个部分:用户级上下文.寄存器上下文以及系统级上下文 ...

最新文章

  1. Android ListView (多个adapter 说明)
  2. 数字孪生卫星:概念、关键技术及应用
  3. Django restfulframework 开发相关知识 整理
  4. RabbitMQ(4) TopicExchange
  5. 最短路径之Floyd算法
  6. netty里集成spring注入mysq连接池(二)
  7. 函数返回指针类型(strchr函数)
  8. (132)FPGA面试题-Verilog实现格雷码转二进制
  9. 怎么在html中加入相对链接,html直接跳转超链接 html中怎么实现同一页面超级链接...
  10. /etc/mtab must be a symlink to /proc/mounts
  11. HDOJ 4223 (DP)
  12. 便签记事本 手机便签记事本app
  13. Java基础-深拷贝和浅拷贝的区别
  14. C#中使用设置(Settings.settings) Properties.Settings.Default .
  15. Collectors,Collection,Collections傻傻分不清楚
  16. 看图学维修mp3之电源篇65Z8\65Z5
  17. Zigbee无线协议 和 WiFi通信协议的区别
  18. skinme找不到java_我的世界skinme皮肤下载|我的世界skinme模组安装器v1.2.1 官方版 - 极光下载站...
  19. android手机助手排名,2019手机份额排行_2019安卓手机助手排行榜Top10
  20. 上海房屋租赁价格数据(11月24日)

热门文章

  1. form 提交多个对象及springMVC接收
  2. Electron 调用系统工具记事本、计算器等
  3. 深入Java核心 Java中多态的实现机制(1)
  4. SQLServer性能优化一则小实例(2010-07-21)
  5. Facebook Messenger月用户数不断攀升 突破12亿
  6. 找到一本不错的Linux电子书,附《Linux就该这么学》章节目录
  7. PowerDesigner导出
  8. varnish详解3
  9. 实验02 Linux文件和目录管理
  10. Hyper-V安装(摘自本站)