zoukankan      html  css  js  c++  java
  • linux及安全《Linux内核设计与实现》第四章——20135227黄晓妍

    第四章 进程调度

    • 进程调度程序是一个内核子系统
    • 分配有限的处理器时间和资源
    • 最大限度利用时间的原则(只要有可执行的进程,那么总会有进程执行)
    • 基本工作:从一组处于等待(阻塞)状态的可执行进程中选择一个执行

    4.1多任务

    概念

    能同时并发地交互执行多个程序的操作系统。(单处理机和多处理机上都可以实现)

    多任务

    • 抢占式任务
      -进程调度程序能强制挂起正在执行的程序
      -非抢占式任务
      -除非进程自己主动停止运行,否则它一直运行

    4.2Linux的进程调度

    • O(1)调度器
      Linux2.5采用的新调度程序:不管输入有多大,调度程序都可以在恒定的时间完成工作。但是它在多交互进程运行的系统中表现不佳。
    • CFS完全公平调度程序
      Linux2.6.23开始采用的调度程序。前身是RSDL“反转楼梯最后期限调度算法”。吸取了队列理论,加入了公平调度的概念。

    4.3策略

    调度程序的策略决定在何时让什么进程运行

    4.3.1I/O消耗型和处理器消耗型的进程

    进程可以分为两类:

    • I/O消耗型
      经常处于可运行的状态,花更多的时间等待I/O请求。满足这类进程,可以提高系统的响应速度,有更好的用户体验。
    • 处理器消耗型
      大多数时间花在执行代码上。满足这类进程,策略往往是降低它们调度的频率,延长运行时间。
    • 调度策略
      需要在这两类矛盾的目标中寻找平衡:响应迅速和最大系统吞吐量。

    4.3.2进程优先级

    优先级调度算法:优先级高的先执行。相同优先级轮转调度。
    Linux采用两种优先级范围

    • nice值。(-20~+19),值越低优先级越高。Mac OS X系统中nice值表示时间片的绝对值;Linux系统中,nice值表示时间片的比例。
      ps -el
      这个命令可以查看系统中的进程列表,NI标记那一列为nice值
    • 实时优先级。(0~99),值越高优先级越高。任何适合进程的优先级都高于普通进程。
      ps -eo state,uid,pid,ppid,rtprio,time,comm.
      查看进程列表,实时优先级在RTPRIO那一栏。

    4.3.3时间片

    表明进程在被抢占前所能持续运行的时间。

    • 一般操作系统设置默认的时间片10ms.一个进程是否能抢占当前进程,由优先级和是否有时间片来决定。
    • Linux的CFS(完全公平调度程序)调度器是将使用比划分给进程。这个比例值并不是固定不变的,它还会受nice值来做调整。一个进程是否能抢占当前进程,是由使用比来决定。如果一个进程消耗的使用比比当前进程小,则立刻抢占。

    4.3.4调度策略的活动

    例如文本编辑器和视频处理器,前者是I/O消耗型,后者需要从磁盘读原始数据流,然后处理原始数据流,是CPU消耗型。在Linux系统中,假如这两者是仅有的两个进程,又有相同的nice值,那么它们两得到使用比为50%和50%。文本编辑器更多的时间实在等待用户输入,所以它的时间用得相当少,当它一旦被唤醒的时候,就能立刻抢占视频处理器的进程。这样,系统就能很好的处理响应速度和吞吐量的问题了。

    4.4Linux调度算法

    4.4.1调度器类

    • 分类的目的:为了让不同类型的进程可以有针对性地选择调度算法。
    • Linux调度器以模块的方式提供,允许动态添加的调度算法共存,调度属于自己范畴的进程,每个调度器有一个优先级,按照优先级遍历,最高的调度器类去选择下一个执行的程序。
    • CFS属于普通进程的调度类。

    4.4.2Unix系统中的进程调度

    这是在CFS之前的传统的调度过程。
    Unix系统中,优先级以nice值的形式输出给用户空间。存在以下几个问题:

    • nice值直接对应处理器的时间不合理。
    • nice值的相对值不合理
    • nice值映射时间片,就要求时间片必须是定时器节拍的整数倍。(这点才是引入CFS的原因。)
    • 基于优先级的调度器优化交互任务来唤醒进程。给一些进程提供了后门,损害了其他进程的利益。
      在优化传统的调度器的过程中确实解决了很多问题,但是都回避了一个实质性的问题:分配绝对的时间片引发的固定切换频率,给公平性造成了很大的变数

    4.4.3公平调度

    进程获得的处理器的时间是有nice值得几何加权决定的,分配的是处理器的使用比。这样提高了公平性,CFS不是完美的公平,但是几乎完美的多任务。
    CFS允许每个进程运行一段时间,循环轮转,选择最少的进程作为下一个运行进程。在无限小调度周期设立一个目标(目标延迟),调度周期越小交互性越好。但是切换的代价更高,系统吞吐量能力更差。(例如目标延迟为20ms,2个优先级相同的任务,每个运行10ms)另外设置一个最小粒度,默认为1ms。即每个程序执行的最短时间为1ms.

    4.5Linux调度的实现

    4.6抢占和上下文切换

    上下文切换时,schedule()会调用函数完成两个任务:

    • switch_mm()负责把虚拟内存从上一个进程映射切换到新内存中
    • switch_to()负责从上一个进程的处理器状态切换到新进程的处理器状态。
      内核必须知道什么时候调用schedule,具体方式是使用need_reasched标志。

    4.6.1用户抢占

    以下时机:

    • 从系统调用返回用户空间时
    • 从中断处理程序返回用户空间时
      -#### 4.6.2内核抢占
    • 中断处理程序正在执行,且返回内核空间之前
    • 内核代码再一次具有可抢占的时候
    • 如果内核中的任务显示地调用schedule()
    • 如果内核中的任务阻塞

    4.7实时调度策略

    两种实时策略:(优先级范围0~99)

    • SCHED_FIFO先进先出
    • SCHED_RR带有时间片的先进先出
      一种非实时策略(优先级范围100~139)
    • SCHED_NORMAL
  • 相关阅读:
    IntelliJ Idea的黑色主题+代码高亮
    @EqualsAndHashCode
    @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
    springcloud各种网址
    利用PowerDesigner连接Mysql数据库并逆向所有表关系图【两种方式】
    Java 异步实现的几种方式
    如何查看Linux操作系统版本
    Java中关于WeakReference和WeakHashMap的理解
    Java弱引用(WeakReference)的理解与使用
    Unchecked Exception 和 Checked Exception 比较
  • 原文地址:https://www.cnblogs.com/angelahxy/p/5401058.html
Copyright © 2011-2022 走看看