进程调度
什么是进程?进程有哪几部分组成?进程是如何调度的?
一、什么是进程?
进程是操作系统对一个正在运行的程序的一种抽象,简单来说,可以把进程看作是程序的一次运行的过程,同时,在操作系统内部,进程又是操作系统对资源分配的基本单位。
什么是程序?
一个.exe文件就是一个可执行的程序。比如 QQ.exe、WeChat.exe····等。一个运行起来的程序就是进程,当双击QQ.exe, QQ这个程序就能运行起来,于是在系统中就形成了一个进程。
二、进程管理
1.什么是进程管理?
所谓的进程管理,其实就是分两步:
- 描述一个进程:使用结构体/类,把一个进程有哪些信息表示出来。
- 组织这些进程:使用一定的数据结构,把这些结构体/对象,组织到一起,由操作系统统一管理。
2.进程的结构体/类中由哪些属性?
操作系统里专门给结构体起了一个名字,叫做PCB(Process Control Block),进程控制块。程序的运行,需要从操作系统申请资源,进程是操作系统进行资源分配的基本单位。
- pid,进程的唯一标识。
- 内存指针,表示程序运行起来,使用了哪些内存上的资源。
- 文件描述符表,表示进程运行时,使用了哪些硬盘上的资源。
硬盘上存储的数据,往往是以文件为单位进行整理的。进程每一次打开一个文件,就会产生一个“文件描述符”,标识了这个被打开的文件,一个进程可能会打开很多的文件,这样对应的就可能形成一组文件描述符。于是用顺序表这样的结构对这些文件描述符进行存储,就构成文件描述符表。
3.什么是进程调度?
进程调度是指操作系统按某种策略或者规则选择进程占用CPU进行运行的过程。
如何描述CPU的状态?
CPU的状态通常由一下几部分组成:
- 进程的状态。
进程的三种基本状态:
- 就绪(Ready)状态。这是指进程已处于准备好运行的状态,即进程已分配到除CPU以外的所有的必要资源后,只要再获得CPU,便可以立即执行。
- 执行(Running)状态。这是指进程获得CPU,其程序正在执行的状态。
- 阻塞(Block)状态。这是指正在执行的进程由于发生某件事(如 I/O 请求、申请缓冲去失败等)暂时无法继续执行时的状态,即进程的执行受到了阻塞。
进程间的状态转换:
- 进程的优先级
每个进程都有相应的优先级,优先级决定它和试运行和接收多少CPU时间。最终的优先级共32级,是从 0 到 31 的数值,称为基本优先级别(Base Peiority Level)。
- 进程的上下文
进程上下文实际上是进程执行活动全过程的静态描述。我们把以执行过的进程指令和数据在相关的寄存器与堆栈中的内容称为上文,把正在执行的指令和数据在寄存器和堆栈中的内容称为正文,把待执行的指令和数据在寄存器与堆栈中的内容称为下文。
- 进程的记账信息
记账记录所需的信息,比如CPU时间和字符传输的数量,被内核保存在进程表里,并当任何一个新进程创建时被初始化,比如在fork的子进程里。
三、进程的并发和并行
- 并行
并行是指 两个或多个进程同一时刻在不同的CPU核心上同时运行。
比如说同一时刻,同时运行 QQ 、微信两个程序,QQ在一个CPU的核心上运行,微信在CPU的另一个核心上运行。此时就称这两个进程并行执行。
- 并发
并发是指两个或多个进程在同一段时间内,在同一个CPU上间隔运行。
比如说假定QQ和微信都在同一个CPU核心上运行,在一段时间内,先执行QQ一小段时间,再执行微信,我们就称这两个进程并发执行。只要这两个进程切换的时间足够的快、看起来这两个进程就是同时执行的。
值得注意的是:进程是通过并行 + 并发的方式来完成的。完全是操作系统自身控制的,程序员感知不到,所以很多时候就把 并行 + 并发 统称为并发。
总结
进程的调度是一个很复杂的过程,CPU的组成部分也并非像上述描述的那样轻描淡写,上述内容只是对进程的一个简单的认识,如果想要进一步加深对进程运行的过程以及CPU的组成及其作用的认识,还要对操作系统和计算机组成原理进行深度的学习。