进程的描述与控制 进程的状态和转换 三态模型和五态模型

本文详细介绍了进程的引入原因、定义及其组成部分,强调了进程控制块(PCB)的重要性和其中包含的信息。文章阐述了进程的三种基本状态(就绪、运行、阻塞)以及五种状态(包括创建和终止状态),并讨论了进程控制的各个操作,如创建、终止、阻塞、唤醒、挂起和激活。同时,提到了PCB的组织方式和进程状态转换的图表。

进程的引入

由于早期未配置os的系统和单道批处理系统中程序是顺序执行的,然而这种方式浪费资源、系统资源利用率较低,从而出现了多道批处理系统。内存中可以同时装入多个程序,使其共享资源、并发执行。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,于是引入了“进程”

什么是进程?

进程是程序的一次执行;
是一个程序及其数据在处理机上顺序执行时所发生的活动;
是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源进行分配和调度的一个独立单位。
进程(又称为进程实体)由三部分组成:PCB(进程控制块)、程序段和相关数据段

进程控制块PCB

1.PCB作为进程实体的一部分,记录操作系统所需的用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。我们认为,创建进程就是创建一个PCB,销毁进程也就是销毁进程的PCB。它的作用是使一个能在多道程序环境下不能独立运行的程序称为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
PCB中主要包含以下四方面的信息:

1)进程标识符:用于唯一的标识某一个进程
2)处理机状态(又称处理机上下文):主要由处理机的各种寄存器中的内容组成,当进程被切换时,处理机状态信息被保存起来以便重新执行时可以继续执行
寄存器主要包括:
通用寄存器:用于暂存信息(大多数处理机有8~32个)
指令计数器:存放将要访问的下一条指令的地址
程序状态字PSW:是运算器的一部分,分两类:一种是体现当前指令结果如是否有进位、是否为零,另一种是存放控制信息如允许中断、跟踪标志等
用户栈

### 进程的五种状态及其转换关系 进程在其生命周期中会经历多种状态,这些状态反映了进程在系统中的执行情况。以下是进程的五种状态及其转换关系的详细说明。 #### 1. 创建状态 当一个新进程被创建时,操作系统会为其分配一个空白的进程控制块(PCB),并填写必要的控制管理信息[^2]。如果资源无法满足进程的需求,则该进程将停留在创建状态,直到资源可用为止。 #### 2. 就绪状态 一旦进程获得了除CPU以外的所有必要资源,并且可以立即运行,那么该进程便进入就绪状态[^3]。处于就绪状态的进程会被放入就绪队列中等待调度。当调度程序选择一个进程时,它将从就绪状态转变为运行状态。 #### 3. 执行状态 当进程被调度程序选中并分配到CPU时,它进入执行状态[^3]。在此状态下,进程的指令会在CPU上被执行。对于单处理器系统,任何时候只有一个进程处于执行状态。 #### 4. 阻塞状态 正在执行的进程可能由于某些事件的发生而暂时无法继续运行,例如等待I/O操作完成或信号量释放等。此时,进程将进入阻塞状态[^3]。只有当等待的事件发生后,进程才会从阻塞状态返回到就绪状态。 #### 5. 终止状态 当进程完成其任务或因某种原因被终止时,它将进入终止状态[^2]。在此状态下,进程不再能够执行任何操作,操作系统会回收其占用的资源。 #### 状态转换图 以下是进程五种状态之间的转换关系: ``` 创建状态 → 就绪状态 → 执行状态 → 阻塞状态 → 就绪状态 → 终止状态 ``` - **创建到就绪**:当进程创建成功并且资源分配完成后,进程进入就绪状态。 - **就绪到执行**:调度程序选择一个就绪状态的进程并将其切换到执行状态。 - **执行到阻塞**:如果执行中的进程需要等待某些事件发生,则会进入阻塞状态。 - **阻塞到就绪**:当阻塞的原因解除后,进程重新进入就绪状态。 - **执行到终止**:当进程完成任务或被强制终止时,进入终止状态。 #### 示例代码 以下是一个简单的伪代码示例,展示如何模拟进程状态的转换: ```python class Process: def __init__(self, pid): self.pid = pid self.state = "Created" def ready(self): self.state = "Ready" print(f"Process {self.pid} is now in Ready state.") def execute(self): if self.state == "Ready": self.state = "Running" print(f"Process {self.pid} is now in Running state.") else: print(f"Process {self.pid} cannot execute as it is not Ready.") def block(self): self.state = "Blocked" print(f"Process {self.pid} is now in Blocked state.") def terminate(self): self.state = "Terminated" print(f"Process {self.pid} is now in Terminated state.") # 示例 p1 = Process(1) p1.ready() # 输出: Process 1 is now in Ready state. p1.execute() # 输出: Process 1 is now in Running state. p1.block() # 输出: Process 1 is now in Blocked state. p1.ready() # 假设阻塞原因解除后重新变为就绪 p1.terminate() # 输出: Process 1 is now in Terminated state. ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值