Skip to content

Instantly share code, notes, and snippets.

@JunyiXie
Created June 27, 2017 08:20
Show Gist options
  • Save JunyiXie/18903a8e53f6ff6c67aeec4745ccb863 to your computer and use it in GitHub Desktop.
Save JunyiXie/18903a8e53f6ff6c67aeec4745ccb863 to your computer and use it in GitHub Desktop.

进程和线程的概念:

线程(英语:thread)是操作系统能够进行运算调度的最小单位。

进程(英语:process),是计算机中已运行程序的实体/进程是具有独立功能的程序在一个数据集合运行的过程,它是系统进行资源分配和调度的一个独立单位。

为什么引入进程和线程的概念

进程:更好的描述和控制程序的并发执行,实现操作系统的并发性和共享性。 线程:减少程序在并发执行是所付出的时空开销,提高操作系统的并发性能。

进程的特征

  1. 动态性
  2. 并发性
  3. 独立性
  4. 异步性
  5. 结构性
  6. 封闭性 进程的执行速度不会改变进程的执行结果。

进程的状态

就绪,运行,阻塞,创建,结束

就绪和等待的区别: 就绪只缺少CPU资源。 等待缺少其他资源。

状态的转换

就绪<-->运行-->阻塞 <----------

进程上下文

  1. 用户级上下文:代码,数据,堆栈,文件...
  2. 寄存器上下文:通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);
  3. 系统级上下文:进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。

进程控制

当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。

进程切换与模式切换(内核态用户态切换)的异同: 进程切换与模式切换都需要执行CPU环境的保存与恢复。 模式切换时,处理机逻辑上是在同一个进程中运行,因此无需改变当前进程的环境信息。 进程切换则需要改变进程的环境信息。

进程的组织

  1. PCB
  2. 程序段
  3. 数据段

PCB PCB主要包括进程描述信息,进程控制和管理信息,资源分配清单,处理机相关信息。 资源分配:

  1. 代码段指针
  2. 数据段指针
  3. 堆栈段指针
  4. 文件描述符
  5. 设备

进程间的通信

  1. 共享存储
  2. 消息传递
  3. 管道通信

线程的实现方式

  1. 用户级线程 线程管理的工作由应用程序完成,不需要用户态/核心态的转换,速度快
  2. 内核级线程 线程管理的工作由内核完成

内核级线程可以和用户级线程进行组合:1:1,n:1,n:m.

比较: 内核线程 内核线程的优点: 当有多个处理机时,一个进程的多个线程可以同时执行。 缺点: 由内核进行调度。 用户线程 优点: 低开销,灵活 缺点: 资源调度按照进程进行,多个处理机下,同一个进程中的线程只能在同一个处理机下分时复用

线程与进程的比较

特征 线程 进程
调度 线程是独立调度的基本单位 进程时拥有资源的基本单位
资源 线程不拥有系统资源(仅有线程堆栈,ID,程序计数器,寄存器集合)线程可以访问所属进程的系统资源 进程是拥有资源的基本单位
并发 并发性能更好
系统开销 线程切换只需保存和设置少量寄存器内容,开销少 进程切换涉及环境上下文的改变
地址空间和其他资源 进程地址空间相互独立 线程共享进程的资源
通信 进程需要进程同步和互斥手段的辅助 线程可以直接读写进程数据段

刷题补充:

  1. 同一个系统的进程/线程可以由系统调用的方法,被不同的进程/线程多次使用。

处理机调度的概念

调度的概念:处理机调度时对处理机进行分配,就是从就绪队列中,按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发的执行。

为什么要有处理机调度:处理机调度可以合理的处理计算机软硬件资源。

调度的层次

  1. 作业调度
  2. 中级调度
  3. 进程调度

三级调度的联系:

  1. 作业调度为进程活动做准备,进程调度使进程正常的活动起来,中级调度将暂时不能运行的进程挂起,把外存上的那些已具备运行条件的就绪进程再重新掉入内存。
  2. 作业调度次数少,中级调度次数略多,进程调度频率最高。
  3. 进程调度是最基本的,不可或缺。

调度的时机,切换与过程

应当进行进程调度与切换的情况有:

  1. 当发生引起调度条件,且当前进程无法继续进行下去,可以马上进行调度和切换。非剥夺调度。
  2. 当中断处理结束或自陷处理结束后,返回被中断进程的用户态执行现场前,即可马上进行进度调度与切换。剥夺方式的调度。

切换过程:

  1. 保存当前进程上下文。
  2. 恢复被调度进程上下文。

保存当前进程:操作系统内核将原进程的线程信息推入到当前进程的内核堆栈来保存它们,更新堆栈指针

恢复进程:内核完成从新进程的内核栈装入新进程的现场信息,更新当前运行进程空间指针,重设PC寄存器等相关工作之后,开始运行新的进程。

进程调度

  1. 非剥夺式调度
  2. 剥夺式调度

调度的基本准则

  1. CPU利用率
  2. 系统吞吐量
  3. 周转时间
  4. 等待时间
  5. 响应时间

周转时间: 周转时间 = 作业完成时间 - 作业提交时间 带权周转时间 = 作用周转时间/作业时间运行时间

典型的调度算法

  1. FCFS
  2. SJF
  3. 优先级调度
    • 动态优先级 可在运行过程中改变优先级
    • 静态优先级
    • 剥夺式
    • 非剥夺式
  4. 高响应比有限调度
    • Rp = (等待时间+要求服务时间)/要求服务时间
  5. 时间片轮转调度算法
  6. 多级反馈队列调度算法

调度算法特点总结:

特征 先来先服务 短作业有限 高响应比优先 时间片轮转 多级反馈队列
优点 公平,实现简单 平均等待时间最少,效率最高 兼顾长短作业 兼顾长短作业 兼顾长短作业
缺点 不利于短作业 长作业会饥饿,估计时间不确定 计算响应比的开销大 平均等待时间较长,上下文切换浪费时间
适用于 作业调度,批处理系统 分时系统 通用
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment