Linux 进程管理之进程调度与切换linux切换进程命令我们知道linux切换进程命令,进程运行需要各种各样的系统资源linux切换进程命令,如内存、文件、打印机和最
宝贵的 CPU 等linux切换进程命令,所以说,调度的实质就是资源的分配 。系统通过不同的调度算法(Scheduling Algorithm)来实现这种资源的分配 。通常来说,选择什么样的调度算法取决于资源分配的策略(Scheduling Policy) 。
有关调度相关的结构保存在 task_struct 中,如下:
active_mm 是为内核线程而引入的,因为内核线程没有自己的地址空间,为了让内核线程与普通进程具有统一的上下文切换方式,当内核线程进行上下文切换时,让切换进来的线程的 active_mm 指向刚被调度出去的进程的 active_mm(如果进程的mm 域不为空,则其 active_mm 域与 mm 域相同) 。
在 linux 2.6 中 sched_class 表示该进程所属的调度器类有3种:
进程的调度策略有5种,用户可以调用调度器里不同的调度策略:
在每个 CPU 中都有一个自身的运行队列 rq,每个活动进程只出现在一个运行队列中,在多个 CPU 上同时运行一个进程是不可能的 。
运行队列是使用如下结构实现的:
tast 作为调度实体加入到 CPU 中的调度队列中 。
系统中所有的运行队列都在 runqueues 数组中,该数组的每个元素分别对应于系统中的一个 CPU 。在单处理器系统中,由于只需要一个就绪队列,因此数组只有一个元素 。
内核也定义了一下便利的宏 , 其含义很明显 。
Linux、c/c++服务器开发篇-------我们来聊聊进程的那些事
Linux内核 进程间通信组件的实现
【linux切换进程命令 linux切换命令行】 学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
需要C/C++ Linux服务器架构师学习资料加qun812855908获?。ㄗ柿习?C/C++,Linux,golang技术,Nginx,ZeroMQ , MySQL,Redis , fastdfs,MongoDB,ZK,流媒体,CDN,P2P , K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
在分析调度流程之前,我们先来看在什么情况下要执行调度程序,我们把这种情况叫做调度时机 。
Linux 调度时机主要有 。
时机1,进程要调用 sleep() 或 exit() 等函数进行状态转换,这些函数会主动调用调度程序进行进程调度 。
时机2,由于进程的时间片是由时钟中断来更新的 , 因此 , 这种情况和时机4 是一样的 。
时机3,当设备驱动程序执行长而重复的任务时,直接调用调度程序 。在每次反复循环中,驱动程序都检查 need_resched 的值,如果必要 , 则调用调度程序 schedule() 主动放弃 CPU 。
时机4,如前所述 , 不管是从中断、异常还是系统调用返回,最终都调用 ret_from_sys_call(),由这个函数进行调度标志的检测,如果必要,则调用调用调度程序 。那么,为什么从系统调用返回时要调用调度程序呢?这当然是从效率考虑 。从系统调用返回意味着要离开内核态而返回到用户态,而状态的转换要花费一定的时间,因此,在返回到用户态前,系统把在内核态该处理的事全部做完 。
Linux 的调度程序是一个叫 Schedule() 的函数,这个函数来决定是否要进行进程的切换 , 如果要切换的话,切换到哪个进程等 。
从代码分析来看,Schedule 主要完成了2个功能:
进程上下文切换包括进程的地址空间的切换和执行环境的切换 。
对于 switch_mm 处理 , 关键的一步就是它将新进程页面目录的起始物理地址装入到寄存器 CR3 中 。CR3 寄存器总是指向当前进程的页面目录 。
推荐阅读
- 男款羊羔绒裤直播间卖货,男款羊羔绒裤直播间卖货是真的吗
- 电脑镜像系统怎么下到u盘,电脑系统镜像怎么用
- ios13.1开发版,ios13开发者选项在哪里
- 计算机毕业设计会影响工作吗,计算机专业毕设可以做什么
- php删除数据表的记录 php删除数据库表单中一行内容
- 荣耀升级鸿蒙怎么申请,荣耀手机怎么申请升级鸿蒙
- mysql修改表utf8,mysql修改表名
- excel折线颜色怎么选,excel怎么设置折线图颜色
- python函数求累加和 python中累加求和