操作系统之进程描述与控制
进程描述与控制
何为进程
进程与进程控制块
进程的定义
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
- 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
进程控制块包含的信息
进程标识符:用于唯一地标识一个进程
外部标识符:通常由字母、数字组成,设置父进程标识及子进程标识,还可设置用户标识(由创建者提 供,可描述进程的家族关系)
内部标识符:通常是一个进程的序号,赋予每个进程一个唯一的数字标识符(由系统赋予的唯一一个数 字,通常为进程的序号,为方便系统使用)
处理机状态:处理机状态信息也称为处理机的上下文,重要是由处理机的各种寄存器中的内容组成。
通用寄存器:又称用户可视寄存器
指令计数器:存放要访问的下一条指令的地址
程序状态字PSW:含状态信息,如条件码、执行方式、中断屏蔽标志等
用户栈指针:用于存放过程和系统调用参数及调用地址进程调度信息:包括进程状态(指明进程的当前状态,作为进程调度和对换时的依据),进程优先级(用
于描述进程使用处理机的优先级别,优先级高的进程应该优先获取处理机),进程调度所
需的其他信息(与进程调度算法有关,如进程已等待CPU的时间总和,进程已执行的时间
总和等),事件(进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因)。
进程控制信息:包括程序和数据的地址(进程的程序和数据所在的内存或外存首址,以便在调度该进程
时,能从PCB中找到其程序和数据),进程同步和通信机制(实现进程同步和进程通信时
必需的机制,如消息队列指针,信号量等),资源清单(除CPU以外的进程所需的全部资
源以及已经分配到该进程的资源的清单),链接地址(本进程PCB所在队列中的下一个进
程的PCB的首地址)。
进程状态
两状态进程模型
两状态进程模型,进程被分为运行态和__非运行态__,这两个状态就是字面意思很好理解。
当一个处于运行态的进程终止后,我们就要选一个处于非运行态的进程进入运行态,按照道理,我们应该选非运行态队列中第一个进程,但是,如果队列第一个进程正在进行I/0操作,那么它就要等待I/O操作完成,这时我们就不能单纯地按照队列顺序选择,还要考虑进程是否等待I/O操作
于是我们引入了就绪态和阻塞态
就绪态:无需等待其他操作,可以直接进入运行态
阻塞态:需等待其他操作完成,如I/O操作
进程创建与终止
引起创建进程的事件
- 用户登录
- 作业调度
- 提供服务
- 应用请求
当操作系统为另一个进程显示请求创建一个进程时,这个动作称为进程派生
一个进程可以创建一个子进程,子进程会继承父进程所拥有的资源,如继承父进程打开的文件、分配到的缓冲区等,当子进程被撤销时,应该讲其从父进程哪里获得的资源归还给父进程,此外,撤销父进程时,也必须同时撤销其所有的子进程。
进程终止
- 引起进程终止的事件
- 1.正常结束
- 2.异常结束
- 3.外界干预
五状态模型
五个状态如下:
运行态:占有cpu,并且就在cpu上执行。
就绪态:已经具备运行条件,但由于没有空闲cpu,而暂时不能运行。(也就是cpu没有调度到它)
阻塞态:因等待某一事件而不能运行。
创建态:进程正在被创建,系统为其初始化PCB,分配资源。
终止态:进程正在从系统中撤销,回收进程的资源,撤销其PCB。
就绪态通过进程调度可以变为运行态,运行态通过中断变为就绪态,运行态通过io请求等待事件进入阻塞态,阻塞态被唤醒,即等待事件结束,就变为了就绪态。
当进程发生进程调度的时候,就会由就绪状态变为执行状态,当某一个进程发生进程调度的时候就会获取到CPU的资源,当执行状态的进程的CPU资源用完了,它就会切换回就绪的状态,插入到就队列中,这里的PU资源用完指的是,分配给某一个进程执行CPU的时间用完了
当执行状态的进程发生IO请求的时候就有可能变成阻塞状态(前边有说到请求打印机的例子)。当发生IO完成的时候,就会由阻塞状态切换到就绪状态
图为每个进程在状态间的切换
被挂起的进程
在一些系统中,新增了挂起状态,引入挂起状态
- 阻塞/挂起态:进程在外存中,并且仍在等待其他操作完成,如I/O操作
- 就绪/挂起态:进程在外存中,只要载入内存就可以运行(此时原本在等待的操作已经完成)
新增挂起状态,引入挂起状态的的原因如下:
- 处理器比I/O快,所以所有进程都可能在等待I/O
- 将这些进程交换到磁盘以释放更多内存
为了不让cpu闲着,我们要让一个新进程进入内存,调出一个处于阻塞态进程进入磁盘,那被调入磁盘的进程状态我们就称为挂起态
下图为含挂起态的进程模型
有趣的问题:单cpu系统,如果内存中有100个进程,那么,
- 同时处于运行态的进程最多有几个? 1
- 同时处于就绪态的进程最多有几个? 99
- 同时处于阻塞态的进程最多有几个?100
进程描述
操作系统的控制结构
操作系统的核心控制结构是进程结构,资源管理的数据结构将围绕进程结构展开
为了有效的管理进程和资源,操作系统必须掌握每一个进程和资源的当前状态,通过构造一组表来管理和维护进程和每一类资源的信息,操作系统的控制表分为四类:
进程控制表:来管理进程及其相关信息
存储控制表:用来管理一级(主)存储器和二级(虚拟)存储器,主要内容包括:
1. 主存储器的分配信息 |
- I/O 控制表:用来管理计算机系统的 I/O 设备和通道,主要内容包括:
1. I/O 设备和通道是否可用 |
- 文件控制表:文件控制表用来管理文件,主要内容包括:
1. 被打开文件的信息 |
进程控制结构
进程映像
个程序进入计算机的主存储器进行计算就构成了进程,操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文(context)。当系统调度新进程占有处理器时,新老进程随之发生上下文切换。
由于一个进程让出处理器时,其寄存器上下文将被保存到系统级上下文的相应的现场信息位置,因此进程的内存映像可以很好地说明进程的组成。简单的说,一个进程映像(Process Image)包括:
- 进程程序块,即被执行的程序,规定了进程一次运行应完成的功能。通常它是纯代码,作为一种系统资源可被多个进程共享。
- 进程数据块,即程序运行时加工处理对象,包括全局变量、局部变量和常量等的存放区以及开辟的工作区,常常为一个进程专用。
- 系统/用户堆栈,每一个进程都将捆绑一个系统/用户堆栈。用来解决过程调用或系统调用时的地址存储和参数传递。
- 进程控制块,每一个进程都将捆绑一个进程控制块,用来存储进程的标志信息、现场信息和控制信息。进程创建时,建立一个PCB;进程撤销时,回收PCB,它与进程一一对应。
进程控制块(在何为进程中有提到)
进程控制
创建进程
- 为新进程分配一个唯一的进程标识符。此时,主进程表中会添加一个新表项,每个进程一个表项。
- 为进程分配空间。这包括进程映像中的所有元素。因此,操作系统必须知道私有用户地址空间(程序和数据)和用户栈需要多少空间。默认情况下会根据进程的类型分配这些值,也可以在作业创建时基于用户请求设置这些值;最后,必须为进程控制块分配空间。
- 初始化进程控制块。进程标识符部分包括进程ID和其他相关的ID,如父进程的ID等;处理器的状态信息大多初始化为0,但程序计数器和系统栈指针除外。进程最初不拥有任何资源,除非显式的请求了这些资源或几层了父进程的资源。
- 设置正确的链接。例如,若操作系统将每个调度队列都维护为一个链表,则新进程必须放在就绪或就绪/挂起链表中。
- 创建或扩充其他数据结构。例如,操作系统可因编制账单和或评估性能,为每个进程维护一个记账文件。
进程切换
进程切换指从正在运行的进程中收回处理器, 让待运行进程来占有处理器运行;
进程切换实质上就是被中断运行进程与待运行进程的上下文切换, 处理过程是:
• 保存被中断进程的上下文;
• 转向进程调度;
• 恢复待运行进程的上下文;