操作系统基础知识梳理


1. 什么是多道程序设计?

在早期的无操作系统中,如果要执行任务那么就只能够串行输入任务,而在批处理的系统中,可以一次性地输入多个任务,然后在计算机的管理下,各个程序穿插执行,多道程序设计是指在计算机内存中同时存放多个程序

这种技术是基于操作系统实现的,操作系统实现了对计算机硬件资源的管理和抽象

  • 如何隔离不同程序需要使用的计算机资源?CPU、存储器等
  • 操作系统如何进行不同程序的调度
  • 操作系统如何提升计算机资源的利用率和复用率

为什么需要进程?

  • 进程是系统进行资源分配和调度的基本单位
  • 进程作为独立运行的载体保障程序的正常执行
  • 进程的存在使得操作系统资源的利用率大幅度的提升

进程的形态

进程的信息基本都保存在PCB中,这个PCB中通常会包含有状态优先级程序计数器内存指针上下文信息IO状态信息等,大致可以分成:

  • 进程标识符:用来表示这个进程的唯一性的一些数据
  • 处理机状态:表示当前进程的运行状态
  • 进程调度信息:比如说优先级,表示当前进程获得CPU的一个优先级等信息
  • 进程控制信息:记账信息等

PCB的组织通常是基于链表的方式进行组织的,他们将具有相同状态的进程连接在一起,组成例如有就绪队列阻塞队列等这样的队列,然后通过进程的无状态模型的流程,将这些进程的PCB从队列中弹出或者插入到队列中

那么PCB是如何工作的呢?

进程的上下文切换:各个进程之间是共享CPU资源的,在不同的时候进程之间需要相互切换,让不同的进程在CPU上运行,那么一个进程退出CPU,一个进程获得CPU的使用权的这个过程称之为进程的上下文切换

PCB是进程的控制块,要理解PCB是如何工作的,那么就要理解进程是如何工作的,进程在获得CPU的时候,它需要基于CPU内部寄存器程序计数器来进行工作,CPU寄存器保存了当前进程的临时计算结果,还有的比较重要的是堆栈的控制信息,比如说当前进程堆栈的栈顶指针等基本信息,通过保存这些信息来记录当前进程的执行流程

PCB的一个很重要的功能是保存当前进程执行的上下文,这个上下文中记录了进程的执行进度,主要的手段是:

  • 记录了当前进程的CPU寄存器来保存当前进程的活动记录(也就是调用了哪些函数),这些函数的返回值是多少
  • 记录了当前进程的执行进度,通过程序计数器就可以知道当前指令流所指向的指令,以便继续执行

那么CPU在完成进程的上下文切换的时候,就是先会把当前执行的进程的上下文(程序计数器,栈顶指针)等信息保存到PCB中,然后将PCB插入到对应状态的队列中

接着,从对应的队列中弹出PCB,然后用这个PCB保存的上下文信息加载到CPU上,然后继续执行

CPU上下文:在CPU运行任何任务之前,都必须要依赖的环境,这些环境就称为是CPU的上下文,CPU寄存器、程序计数器

进程的上下文切换到底是切换了什么?

进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括有内存堆栈,寄存器等内核空间的资源

通常会将交换的信息保存在进程的PCB中,而这个PCB队列是保存在内核空间的,如果应用程序在运行过程中,需要调度内核空间的资源,那么就肯定需要陷入一个内核态了,这个首先会是一个基本的开销,其次从CPU中读取相关数据,然后存储到内存的PCB中,然后从内核的PCB中取出数据到CPU上,这也会是一个基本的开销

进程的上下文切换,为什么要发生上下文切换

  • 提供系统资源的利用率,提高吞吐量,基于一定的轮转算法,通过这个算法规定了每个进程所能够使用的最大时间片,避免饥饿现象
  • 进程在系统资源不足的时候,要等到资源满足后才能运行,这时候进程会被挂起

文章作者: 穿山甲
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 穿山甲 !
  目录