目录
3.1 什么是进程
3.2 进程状态
3.3 进程描述
3.4 进程控制
3.5 操作系统的执行
3.6 UNIX SVR4进程管理
3.1什么是进程
3.1.1背景
直接根据给定的硬件平台写应用程序的效率很低下,因此,需要操作系统这样的介于计算机硬件和应用程序之间的这一层次的软件,来为应用程序和工具提供支持。
应用操作系统来有序管理应用程序的目标:
- 资源对多个应用程序是可用的;
- 物理处理器在多核应用程序间切换,以保证所有程序都在执行中;
- 处理器和I/O设备能得到充分应用
而所有现代操作系统所采用的方法都依赖于一个模型,在该模型中,应用程序的执行对应于存在的一个或多个进程
3.1.2 进程和进程控制块
进程的两个基本基本组成元素是程序代码和与代码相关联的数据集。我们把处理器执行的程序代码这个执行实体成为进程。
进程是动态的,程序是静态的。程序代码在执行中才能称为进程。
进程可由如下元素来表征:
-
标识符:与进程相关的唯一标识符,用来区分其他进程
-
状态:常见的有运行态,阻塞态,就绪态,以及新建态和退出态
-
优先级:相对于其它进程的优先顺序
-
程序计数器:程序中即将执行的下一条指令的地址
-
内存地址:包括程序代码和进程相关数据的指针,以及与其它进程共享内存块的指针
-
上下文数据:进程执行时处理器的寄存器中的数据
-
I/O状态信息:包括显式I/O请求,分配给进程的I/O设备和被进程使用的文件列表等
-
记账信息:包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
上述表征元素通常是以链表的形式保存在**进程控制块(PCB)**中。(因为链表这种数据结构方便对每个元素的操作)。进程控制块是操作系统为支持多进程并提供多重处理技术的关键工具。PCB是进程存在的唯一标志。
进程中断时,操作系统会把程序计数器和处理器寄存器(上下文数据)保存到进程控制块的相应位置,进程状态改为其它相应状态。
进程由程序代码和相关数据以及进程控制块组成。单处理器计算机在任何时刻最多都只能执行一个进程,而正在运行的进程的状态为运行态。
进程的组成讨论的是一个进程内部由哪些部分构成的问题,而进程的组织讨论的是多个进程之间的组织方式问题。
3.2进程状态
3.2.1两状态进程模型:运行态与非运行态
3.2.2进程的创建和终止
进程的创建:将一个新进程添加到正被管理的进程集时,操作系统需要建立用于管理该进程的数据结构,并在内存中给它分配地址空间,这些行为构成了一个新锦成的创建过程。
创建进程的原因:
事件 | 说明 |
---|---|
新的批处理作业 | 磁带或磁盘中的批处理作业控制流通常会提供给操作系统。当操作系统准备接受新工作时,将读取下一个作业控制命令 |
交互登录 | 终端用户登录到系统 |
为提供服务而由操作系统创建 | 操作系统可以创建一个进程,代表用户程序执行一个功能,而用户无须等待(如控制打印机的进程) |
由现有进程派生 | 基于模块化的考虑或开发并行性,用户程序可以指示创建多个进程 |
进程终止:
事件 | 说明 |
---|---|
批处理作业 | Halt指令产生一个中断来警告OS一个进程已经完成/或其他显式服务调用来终止 |
交互式用用程序 | 由用户的行为来指出何时终止进程(例如关闭终端) |
个人计算机或工作站 | 用户可以结束应用程序来终止进程 |
说明:
-
所有上述行为最终将导致给操作系统发出一个服务请求,以终止发出请求的进程;
-
在有些操作系统中,进程可被创建它的进程终止,或在父进程终止时终止。
-
导致进程的原因,详细见下表。(摘自操作系统精髓与设计原理 第八版)
3.2.3五状态模型 -
运行态:进程正在执行,对于单处理器计算机在任何时刻只能有一个进程处于这个状态。
-
就绪态:进程做好准备,只要有机会就开始执行。
-
阻塞/等待态:进程在某些事件发生前不能执行,如I/O操作。
-
新建态:刚刚创建的进程,操作系统还未把它加入可执行进程组,它通常是进程控制块已经创建但还未加载到内存中的新进程。
-
退出态:操作系统从可执行进程组中释放出的进程,要么它自身已停止,要么它因某种原因被取消。
定义新进程过程:操作系统先执行一些必须的辅助工作,将标识符关联到进程,并分配和创建管理进程所需的全部表格。此时进程处于新建态,但还未执行进程。
进程处于新建态时:操作系统所需的关于该进程的信息保存在内存中的进程表内,但进程本身还未进入内存。也即需要执行的程序代码不在内存中(此时程序通常保留在磁盘中),也没有为这个程序相关的数据分配空间。
进程退出系统也分为两步:首先是进程终止,不在执行,但此时与作业相关的表和其他信息会临时被操作系统保留一段时间,这个时间主要是留给辅助程序或支持程序提取所需信息,此为第一步;带提取完信息后,操作系统就不再保留任何与这个进程相关的数据,才会从操作系统中删除该进程,此为第二步。
进程状态的转换:
转换 | 说明 |
---|---|
空 -> 新建 | 创建执行一个程序的新进程 |
新建 -> 就绪 | 操作系统准备好再接纳一个进程时,把一个进程从新建态转换到就绪态 |
就绪 -> 运行 | 需要选择一个新进程运行时,操作系统选择一个处于就绪态的进程 |
运行 -> 退出 | 若当前正运行的进程表示自身已完成或取消,则它将被操作系统终止 |
运行 -> 就绪 | (1)正在运行的进程已达到“允许不中断执行”的最大时间段;(2)具有更高优先级的进程转换到了就绪态,此时操作系统抢占了正在执行的进程的资源;(3)进程自愿释放对处理器的控制 |
运行 -> 阻塞 | 进程请求其必须等待某些事件时,会进入阻塞态 |
阻塞 -> 就绪 | 所等待的事件发生了 |
就绪 -> 退出 | 父进程终止了这个进程,或者父进程自身终止时,所有由该父进程派生的子进程都将被终结 |
阻塞 -> 退出 | 父进程终止了这个进程,或者父进程自身终止时,所有由该父进程派生的子进程都将被终结 |
3.2.4倍挂起的进程
由于处理器的速度远快于I/O,将在一定程度上促使内存中所有进程都在等待I/O的现象的发生,解决方案之一是扩充内存来容纳更多的进程,但是这种办法导致价格虚高,性价比很低。解决方案之二是交换,即把内存中某个进程的一部分或全部移到磁盘中。当内存中不存在就绪态的进程时,操作系统就把被阻塞的进程换出到磁盘的挂机队列,此时内存所释放的空间就可被调入的另一个进程使用。
操作系统执行换出操作后,将进程取到内存中的方式有两种:(1)接纳一个新近创建的进程;(2)调入一个此前挂起的进程。显然,操作系统为尽量不增加系统的总负载数,更倾向于调入一个此前挂起的进程。
- 就绪态:进程已在内存中并可以执行
- 阻塞态:进程已在内存中并等待一个事件
- 阻塞/挂起态:进程已在外存中并等待一个事件
- 就绪/挂起态:进程已在外存中,但只要载入内存就可执行
状态转换 | 说明 |
---|---|
阻塞->阻塞/挂起 | 将阻塞进程从内存中移出到外存挂起 |
阻塞/挂起->就绪/挂起 | 等待的事件发生了。注意,此时操作系统必须得到挂起进程的状态信息 |
就绪/挂起->就绪 | 若内存中没有就绪态进程,或该就绪/挂起态的进程比任何就绪态的进程优先级都高时,操作系统将调入一个进程继续执行 |
就绪->就绪/挂起 | 通常,操作系统更倾向于挂起阻塞态进程而非就绪态进程。这种情况一般是考虑有更高优先级进程需要执行或需要释放内存 |
挂起进程的特点:
- 该进程不能立即执行
- 该进程可能在也可能不在等待一个事件。若在等待一个事件,那么阻塞条件不依赖于挂起条件,阻塞事件的发生不会使进程立即执行
- 为阻止该进程执行,可通过代理使其置于挂起态,代理可以说进程本身,也可以是父进程或操作系统
- 除非代理显式的命令系统进程状态转换,否则该进程无法从这一状态转移
3.3进程描述
3.3.1操作系统的控制结构
操作系统为了管理进程和资源,必须掌握每个进程和资源的当前动态。普遍采用的方法是,操作系统构造并维护其管理的每个实体的信息表。操作系统维护的4种不同类型的表:内存、I/O、文件和进程。
内存表:用于跟踪内(实)存和外(需)存。内存表需包含如下信息:分配给进程的内外存、内存块或虚存块的任何保护属性、管理虚存所需要的任何信息。
I/O表:管理计算机系统中分I/O设备和通道。在任一给定时刻,某个I/O设备要么可用,要么已分配给特定的进程。
文件表:文件表提供关于文件是否存在、文件在外存中的位置、当前状态和其他属性的信息。大部分信息(非全部信息)可能由文件管理系统维护和使用。
进程表:内存、I/O和文件是代表进程而被管理的,因此进程表中必须由对这些资源的直接或间接引用
3.3.2进程控制结构
进程控制块信息分为三类:进程标识信息、进程状态信息、进程控制信息
3.4进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。简而言之,进程控制就是要实现进程状态转换
用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成,这种不可被中断的操作称之为原子操作。原语采用“关中断指令”和“开中断指令”实现。显然,关/开中断指令的权限非常大,必然是只允许在核心态下执行的特权指令。
进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情:
- 更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
a.所有的进程控制器原语一定都会修改进程状态标志
b.剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c.某进程开始运行前必然要恢复其运行环境 - 将PCB插入合适的队列
- 分配/回收资源
进程切换可在操作系统从当前正运行进程中获得控制权的任何时刻发生,下表给出了可能把控制权交给操作系统的事件。
机制 | 原因 | 用途 |
---|---|---|
中断 | 来自当前执行指令的内部 | 对异步外部事件的反应 |
陷进 | 与当前执行指令相关 | 处理一个错误或一个异常事件 |
系统调用 | 显示请求 | 调用操作系统函数 |
中断与陷阱的区别:中断是与当前正运行进程无关的某种外部事件相关,如完成一次I/O操作;而陷阱与当前正运行进程产生的错误或异常条件相关,如非法的文件访问
当出现中断时,处理器会做如下工作:
- 将程序计数器置为中断处理程序的开始地址
- 从用户模式切换到内核模式,以便中断处理代码包含特权指令
在中断处理程序进行取第一条指令来服务该中断前,需要将已中断进程的上下文保存到已中断进程的PCB中,这个上下文包含以下内容:包含中断处理程序可能改变的所有信息,以及恢复被中断程序时所需要的所有信息。因此,必须保存称为处理器状态信息的进程控制块部分,包括程序计数器、其他处理器寄存器和栈信息。