linux内核 进程调度
概念:
进程调度决定那个进程投入运行,运行多长时间。
进程调度没有太复杂的原理,最大限度的利用处理器时间的原则是:只要有可执行的程序,那么总会有进程在执行,如果可运行的进程比处理器数目要多,那么注定要有部分进程在等待。
多任务操作系统:
抢占式多任务模式:由调度系统来决定那个进程在运行。
非抢占式多任务模式:进程自身决定何时停止对CPU的占用。
linux是抢占式的。
调度算法
linux上主要有两大类调度算法,CFS(完全公平调度算法)和实时调度算法。
CFS
cfs定义了一种新的模型,它给cfs_rq(cfs的run queue)中的每一个进程安排一个虚拟时钟,vruntime。如果一个进程得以执行,随着时间的增长(也就是一个个tick的到来),其vruntime将不断增大。没有得到执行的进程vruntime不变。
而调度器总是选择vruntime跑得最慢的那个进程来执行。这就是所谓的"完全公平"。为了区别不同优先级的进程,优先级高的进程vruntime增长得慢,以至于它可能得到更多的运行机会。
CFS使用红黑树来组织可运行的任务,可以想象为按照vruntime排序的红黑树,内容是进程的PID。这样保证CFS可以很快的找到vruntime最小的进程,并且拿出来投入运行。
了解一个大概就可以了,详细实现可以参考:http://www.cnblogs.com/tianguiyu/articles/6091378.html
实时调度算法
了解:实时调度算法是一种静态优先级的算法,为了满足快速响应。linux尽量保证这些进程总能在抢占中成功。
随眠和唤醒
睡眠(被阻塞)是一种特殊的不可执行状态。这点非常重要,如果没有睡眠状态,调度程序如果有可能选择出一个暂时不愿意被执行的进程,睡眠就必须使用轮询的方式来实现了。
linux的睡眠是通过等待队列来实现的。等待队列和任务队列一样,也是一个双端循环链表。进程执行睡眠操作,会把自己放入等待队列:下次调度的时候,调度器会忽略等待队列中的进程。
等待队列中的任务不会自动被唤醒,而是需要其他进程调用唤醒方法来唤醒,唤醒方法可以唤醒等待队列上随机一个进程,或者所有进程。唤醒操作会修改进程的状态为可运行,然后把此进程放入红黑树。
我的理解:一般是一个进程下的所有线程(对linux来说,也是进程)相互协调工作,举例来说,对于锁,阻塞在这个锁的所有线程都将进入同一个等待队列,一旦另外的线程释放了锁,那么其他线程(如主进程)会负责唤醒这个等待队列上的线程去抢占锁。
上下文切换
进程切换的时候,将上一个进程的处理器状态保存,然后切换到下一个进程的处理器状态,包含但不局限于:栈信息,程序计数器,寄存器信息。
linux内核 进程调度的更多相关文章
- Linux内核进程调度overview(1)
一.概述 决定何时.如何选择一个新进程运行的这组规则叫做:调度策略(scheduling policy). Linux的调度是基于分时技术(time sharing):多个进程以“时间多路复用”方式运 ...
- Linux内核分析:实验八--Linux进程调度与切换
刘畅 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 这篇文章主要分析Li ...
- 第3章(1) Linux内核相关概念
Linux内核的组成 1. Linux内核源代码的目录结构 arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如 i386.arm. arm64.powerpc.mips 等.Linu ...
- 《Linux内核设计与实现》读书笔记 第四章 进程调度
第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的 ...
- linux 内核学习之八 进程调度过程分析
一 关于进程的补充 进程调度的时机 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule() ...
- Linux内核分析——理解进程调度时机跟踪分析进程调度与进程切换的过程
20135125陈智威 +原创作品转载请注明出处 +<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验 ...
- Linux内核分析之理解进程调度时机跟踪分析进程调度与进程切换的过程
一.原理分析 1.调度时机 背景不同类型的进程有不同的调度需求第一种分类I/O-bond:频繁的进行I/O:通常会花费很多时间等待I/O操作的完成CPU-bound:计算密集型:需要大量的CPU时间进 ...
- Linux内核分析--理解进程调度时机、跟踪分析进程调度和进程切换的过程
ID:fuchen1994 姓名:江军 作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否 ...
- 【读书笔记】《Linux内核设计与实现》进程管理与进程调度
大学跟老师做嵌入式项目,写过I2C的设备驱动,但对Linux内核的了解也仅限于此.Android系统许多导致root的漏洞都是内核中的,研究起来很有趣,但看相关的分析文章总感觉隔着一层窗户纸,不能完全 ...
随机推荐
- jquery-validation JQ 表单验证
jquery-validation是一款前端验证js插件,可以验证必填字段.邮件.URL.数字范围等,在表单中应用非常广泛. 官方网站 https://jqueryvalidation.org/ 下载 ...
- 小记--------spark的Master的Application注册机制源码分析及Master的注册机制原理分析
原理图解: Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类 //截取了部分代码 //处理 ...
- Spring4学习回顾之路05—自动装配,Bean的继承,依赖和作用域
自动装配 xml配置里的Bean的自动装配,Spring IOC容器可以自动装配Bean,仅仅需要做的是在<bean>标签里的autowire属性里指定自动装配的模式. ①byType(根 ...
- pt工具
percona-toolkit简介percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些任务包括: 检查master和slav ...
- 第2章:Python生态工具
1.Python内置小工具 1).1秒钟启动一个下载服务器: python -m SimpleHTTPServer python3 -m http.server 会在当前目录下启动一个文件下载服务器, ...
- pb datawindow的用法
1. 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Pr ...
- centos服务器之间相互挂载(samba)
前提:假设A服务器ip为:192.168.1.101 ,B服务器ip为:192.168.1.102现在要求把A服务器的/mnt/test 路径下的文件夹 共享到B服务器的/home/ceshi 下. ...
- Spring实战(十)Spring AOP应用——为方法引入新功能、为对象引入新方法
切面最基本的元素是通知和切点,切点用于准确定位应该在什么地方应用切面的通知. 1.Spring借助AspectJ的切点表达式语言来定义Spring切面 在Spring中,要使用AspectJ的切点表达 ...
- 作业8:常用java命令(二)
一.jinfo(Configuration Info for Java) 1.功能:jinfo可以实时地查看和调整虚拟机的各项参数. 2.参数: 选项 作用 -flag name 打印改名字的VM设置 ...
- 进阶Java编程(10)反射与简单Java类
1,传统属性自动赋值弊端 简单Java类主要由属性构成,并且提供有setter与getter类,同时简单Java类最大的特征就是通过对象保存相应的类属性的内容.但是如果使用传统的简单Java类开发,那 ...