进程一

进程一

一、什么是进程

​ 要说什么是进程,先要明白进程是用来解决什么矛盾的。当代计算机中最大的矛盾就是拥有极高运算速度的cpu和较慢速度的io操作的矛盾。为了尽可能地利用cpu资源,提出了多道程序设计的概念,即让多个任务在计算机中并发地运行。当某个任务进行耗时较长的io操作或运行一段时间后,切换另一个进程来运行,以此最大化地利用cpu。进程就是为了深刻描述程序动态执行过程的性质,乃至更好的支持和管理多道程序的并发执行

二、进程和进程描述

​ 进程的两个基本元素是程序代码和与代码相关的数据集,当系统开始执行程序代码,我们把这个执行实体称为进程。

​ 进程映像:用户数据、用户程序、栈、进程控制块组成一个进程映像,这在内存中描述了一个进程。

1.进程控制结构

​ 操作系统控制和管理进程时,首先需要知道进程的位置,其次要知道进程的属性。进程的位置保存在主进程表中,其中每一个表项至少包含一个指向进程映像的指针。属性保存在进程控制块中

进程控制块

​ 进程控制块包括进程标识信息。进程状态信息、进程控制信息三大部分。

​ ![屏幕截图 2023-12-09 102149](/../../images/屏幕截图 2023-12-09 102149.png)

2.操作系统的控制结构

​ 操作系统通过构建并维护每个资源实体的信息表来管理资源。它可以分为4类:内存表、文件表、io表、进程表。

​ ![屏幕截图 2023-12-09 102525](/../../images/屏幕截图 2023-12-09 102525.png)

​ 注意,内存、IO和文件是代表进程而被管理的,因此进程表中必须有对这些资源的直接或间接访问。同时其他的表中也可以使用进程标识符来交叉引用进程表。如内存表可以提供一个内存映射,来说明每个区域分配给了哪个进程等。

三、进程状态

​ ![屏幕截图 2023-12-09 102856](/../../images/屏幕截图 2023-12-09 102856.png)

​ 新建态:系统刚创建的进程,还未加入可执行组。通常是进程控制块结构已经创建,但未加载到内存中。

​ 就绪态:进程等待处理器调度,可以运行

​ 运行态:正在运行

​ 退出态:从可执行组中退出的进程。可能是进程执行完毕或者是它因某种原因被取消

​ 阻塞态:等待某个事件而暂停执行,如发生了IO操作,需要等到IO完成事件才能继续执行

​ 阻塞/挂起态:被置换到外存的阻塞进程

​ 就绪/挂机态:在外存中,但只要载入内存就可以执行

状态转换

​ 新建态—->就绪态:操作系统准备好再接纳一个进程时,将进程加入可执行组。

​ 新建态—->就绪/挂起态:内存不足,无法将空间分配给新进程,所以暂时先存在外存中,有空间了再载入内存。

​ 就绪/挂起态—->就绪态:若内存中没有就绪态进程,则操作系统就需要调入一个进程继续执行。此外,如果就绪/挂起态中的进程优先级高于所有就绪态进程时,这种转换也可以发生。

​ 阻塞—–>阻塞/挂起:若没有就绪进程,则至少换出一个阻塞进程,来为另一个未阻塞进程腾出空间。操作系统也会为了当前进程的性能,而将阻塞进程挂起,来腾出空间,让运行中的进程获得更好的性能。

​ 阻塞/挂机—->阻塞:这种转换很少见。但当阻塞/挂起队列中有一个进程的优先级比就绪/挂起队列中的任何进程都高,而且操作系统有理由相信等待事件很快会发生,这时会把阻塞进程调入内存。

​ 运行态—->就绪/挂起:当阻塞/挂起队列中优先级较高的进程不再阻塞后,操作系统会抢占当前进程,让优先级较高的进程执行。