> 文档中心 > [校招宝典]操作系统核心之进程、线程与协程(上)

[校招宝典]操作系统核心之进程、线程与协程(上)

目录

操作系统进程

操作系统的演进历史

多道程序设计

进程

进程状态模型

五状态模型

阻塞,非阻塞,同步,异步


  • 操作系统的进程

  • 典型问题:
  • 简述什么是进程
  • 简述为什么操作系统需要进程
  • 以下内容带您一步步了解
  • 操作系统的演进历史

  • 1.无操作系统的时代->
  • 特点:
  • 人工操作
  • 用户独占(不能执行别的用户的任务)
  • CPU等待人工操作
  • 资源利用率低
  • 2.批处理系统的时代->
  • 特点:
  • 无需等待人工操作
  • 批量输入任务
  • 资源利用率提升
  • 出现了多道程序设计
  • 3.分时系统的时代
  • 特点:
  • 人机可以直接交互
  • 多用户(不仅指人,如多软件,多进程,多系统)共享
  • 能及时调试程序
  • 资源利用率提升
  • 多道程序设计

  • 早期的批处理系统只能一次处理一个任务
  • 多道程序设计使得批处理系统可以一次处理多个任务
  • 多道程序设计是指在计算机内存中同时存放多个程序
  • 多道程序在计算机的管理程序之下相互穿插运行
  • 对多道程序的管理是现代操作系统的重要功能
  • 所以多道程序设计之后的操作系统的形态为:
  • 用户无需面向硬件接口编程,利用操作系统来管理硬件资源
  • 如:
  • IO设备管理软件,提供读写接口
  • 文件管理软件,提供操作文件接口
  • 操作系统实现了对计算机硬件资源的管理和抽象
  • 多道程序设计可能会遇到的问题
  • 如何隔离不同程序需要使用的计算机资源?
  • 操作系统如何进行不同程序的调度?
  • 操作系统如何提升计算机资源的利用率和复用率?
  • 答案:操作系统需要进程
  • 进程

  • 为什么需要进程
  • 进程是系统进行资源分配和调度的基本单位
  • 进程作为程序独立运行的载体保障程序正常执行
  • 进程的存在使得操作系统资源的利用率大幅提升
  • 进程的形态
  • 在主存里,进程也是一段连续存储的空间,这个空间称为进程控制块(PCB)
  • 其中含有很多重要的信息:
  • 标识符,状态,优先级,程序计数器,内存指针,上下文数据,IO状态信息,记账信息等等
  • 标识符
  • 标识符唯一标记一个进程,用于区别其它进程
  • 状态
  • 标记进程的进程状态,如运行态,阻塞态
  • 程序计数器
  • 指向进程即将被执行的下一条指令的地址
  • 内存指针
  • 程序代码,进程数据相关指针
  • 上下文数据
  • 存储的是进程执行时处理器存储的数据
  • IO状态信息
  • 存储的是被进程IO操作所占用的文件列表
  • 记账信息
  • 存储的是进程所使用的CPU时间,时钟数总和等
  • 以上的都能归为4类:
  • 1.进程标识符
  • 2.进程处理机状态
  • 3.进程调度信息
  • 4.进程控制信息
  • 进程控制块(PCB)是用于描述和控制进程运行的通用数据结构
  • 用于记录进程当前状态和控制进程运行的全部信息
  • PCB使得进程是能够独立运行的基本单位
  • 由于PCB是操作系统进行调度经常会被读取的信息
  • 所以PCB是常驻内存的,存放在系统专门开辟的PCB区域内
  • 进程状态模型

  • 典型问题:
  • 简述阻塞、非阻塞、同步、异步
  • 简述为什么进程会发生阻塞
  • 以下内容带您一步步了解
  • 五状态模型

  • 典型的进程的状态分别有创建状态就绪状态终止状态阻塞状态执行状态
  • 就绪状态
  • 当进程被分配到除CPU以外所有必要的资源后
  • 只要再获得CPU的使用权,就可以立即运行,随时可以被调度去执行
  • 也就是其它资源都准备好了,只差CPU资源的状态为就绪状态
  • 执行状态
  • 进程获得CPU,其程序正在执行称为执行状态
  • 在单处理机中,在某个时刻只能有一个进程是处于执行状态
  • 阻塞状态
  • 进程因某种原因如:其它设备未就绪而无法继续执行
  • 从而放弃CPU的状态称为阻塞状态
  • 各状态之间关系
  • 从就绪状态到执行状态就是经过进程调度(也就是分配CPU资源)
  • 从执行状态到就绪状态就是时间片用完了
  • 从执行状态到阻塞状态主要是某些资源没有就绪,如IO请求未完成
  • 从阻塞状态到就绪状态就是把之前未就绪的完成了,如IO完成
  • 创建状态
  • 对于创建状态操作系统需要很多准备工作
  • 主要是分配PCB(进程控制块),再把这些数据插入就绪队列
  • 创建进程时拥有PCB但其它资源尚未就绪的状态称为创建状态
  • 终止状态
  • 在终止状态,操作系统主要做一些清理工作
  • 进程结束由系统清理或者归还PCB的状态称为终止状态
  • 阻塞,非阻塞,同步,异步

  • 阻塞典型的就是一个IO过程
  • IO过程从调用到返回会经历一段时间
  • 因为通常外围设备如磁盘,网卡在读写数据时并没有CPU那么快
  • 这段时间进程的状态就称为阻塞状态
  • 非阻塞也例一个IO过程
  • 但是在调用时会直接返回,转而去执行别的工作,等IO完成之后,由别的设备通知它说这个过程已经完成,这时进程才返回IO的任务去读取这个数据
  • 因为进程它是一直在运行的,没有进行等待
  • 这个过程就称为非阻塞状态
  • 由此延伸出同步异步的概念
  • 阻塞状态这边属于同步的过程
  • 因为它的准备过程需要一段时间,进程在这段时间并没有干任何事情,而是同步地等待
  • 一直等待到数据进行返回才接收这个数据进行后续的工作,是一个同步等待的过程
  • 异步是相对于同步而言的
  • 非阻塞状态这边就有异步的过程
  • 因为进程它在IO之后没有进行同步地等待,而是转而去干别的事情了
  • 并且等IO过程准备好之后进行通知,进程在接收到这个通知后才进行切换回来来读这个数据
  • 这个过程因为数据的准备以及进程运行别的事情是并行地在执行的
  • 这就能称它的IO读取是异步的过程
  • 同步和异步主要是通过消息的通知机制去理解的
  • 阻塞里的通知是一直准备地通知,所以是同步
  • 非阻塞里的通知是数据准备好之后主动通知这个进程,然后让这个进程去读取的
  • 同步和异步强调的是消息通信机制
  • 阻塞和非阻塞强调的是程序在等待调用结果时的状态
  • 阻塞调用指的是当调用结果返回之前,当前进程会被挂起,也就是会切换出CPU,调用进程只有在得到结果之后才会返回
  • 非阻塞调用指的是不能立马得到结果之前,这个调用并不会阻塞当前进程
  • 再补充一些例子
  • 关于阻塞状态同步的代码写法在读写磁盘、读写网络时都是属于阻塞状态