zoukankan      html  css  js  c++  java
  • linux内核分析 第4章读书笔记

    第四章 进程调度

    一、抢占与非抢占

    1.非抢占式进程调度

    进程会一直执行直到自己主动停止运行
    

    2.抢占式进程调度

    Linux/Unix使用的是抢占式的方式,强制的挂起进程的动作就叫做抢占。
    

    二、进程优先级

    1.进程的消耗类型

    I/O消耗型进程
    
    处理器耗费型
    

    2.进程优先级

    基于优先级的调度:优先极高的进程先运行;相同优先级的进程按照轮转方式进行调度
    
    优先级分为两类:
    
    	nice值(从-20——+19):默认值为0;数值越大意味着优先级越低;可以通过 ps-el查看系统进程列表并找到NI标记列对应的优先级
    
    	实时优先级(从0——99):越高的实时优先级级数意味着进程优先级越高
    

    三、Linux调度算法

    1.调度器类

    Linux调度器是以模块方式提供的(也就是调度器类),目的是允许不同类型的进程可以有针对性地选择调度算法
    
    调度器类允许多种不同的可动态添加的调度算法并存,调度属于自己范畴的进程
    
    调度器代码会按照优先级顺序遍历调度类,拥有一个可执行进程的最高优先级的调度器类胜出,去选择下面要执行的那一个程序。
    

    2.Unix中的系统调度

    将nice值映射到时间片的话,就必须将nice值对应到处理器的绝对时间;这样会导致进程切换无法最优进行。如果使用相对nice值,所带来的效果将会极大取决于其nice的初始值;如果执行nice值到时间片的映射,时间片极大受制于定时器。
    

    3.公平调度

    CFS基于一个简单的理念:进程调度的效果应当如同系统具备一个理想中的完美任务处理器。
    
        CFS的做法如下:
    
    	允许每个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程
    
    	nice值作为进程获得的处理器运行比的权重
    
    	每个进程都按照其权重在全部的可运行进程中所占的比例对应的“时间片”来运行
    

    四、Linux调度的实现

    1.时间记账

    所有的调度器都必须对进程的运行时间做记账;
    
    CFS使用调度器实体结构来追踪运行记账
    

    2.虚拟实时

    update_curr()函数实现了记账功能;计算了当前进程的执行时间并将其存放在data_exec中;然后将运行时间传递给了_update_curr(),由后者再根据当前可运行进程总数对运行时间进行计算,最终确定上述的权重值与当前运行进程的vrntime。
    

    3.进程选择

    CFS算法核心:选择具有最小vrntime的任务。
    

    4.进程调度入口

    进程调度的主要入口点是函数schedule(),定义在kernel/sched.c中;这正是内和其他部分用于调度进程调度器的入口。
    

    五、抢占和上下文切换

    1.上下文切换由定义在kernel/sched.c中的context_switch()函数负责,每当一个新的进程被选出来准备运行的时候,schedule()就会调用该函数:

    调用switch_mm(),负责把虚拟内存从上一个进程映射切换到新的进程中
    
    调用switch_to(),负责从上一个进程的处理器状态切换到新进程的处理器状态
    

    2.Linux系统支持内核抢占

    内核抢占发生在:
    
    	中断处理程序正在执行且返回内核空间之前
    
    	内核代码再一次具有可抢占性的时候
    
    	内核中的任务显式地调用schedule函数
  • 相关阅读:
    CoreData学习-最好的一片文章
    Xcode4.6下添加百度地图ios版(BMapKit)详细教程(_BMKMapManager错误解决)
    NSSearchPathForDirectoriesInDomains用法
    编绎显示Unknown type name “CGFloat” 错误解决方法
    自动调整cell的高度
    sqlMapConfig约束
    PotPlayer左上角信息关闭
    松懈
    sql查询练习
    idea内容补充
  • 原文地址:https://www.cnblogs.com/whyfarrell/p/5385095.html
Copyright © 2011-2022 走看看