操作系统——进程的描述和控制

本文深入解析了进程概念、状态转换、控制操作等关键内容,并探讨了进程与线程之间的关系,帮助读者理解操作系统中进程管理的核心机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、进程的引入

程序顺序执行特征

前趋图:一个有向无循环图
在这里插入图片描述
程序顺序执行特征:
      ~~~~~~       a. 顺序性:程序各程序段严格按照规定的顺序执行
      ~~~~~~       b. 封闭性:程序运行时独占全部资源,机内各资源只受该程序控制而改变,执行中和执行的结果不受外界因素影响
      ~~~~~~       c. 可再现性:只要程序执行环境和初始条件相同,程序多次执行,可获得相同结果

程序并发执行特征

程序并发执行特征:
      ~~~~~~       a. 间断性:并发程序之间形成了相互制约的关系
      ~~~~~~       b. 失去封闭性:并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变
      ~~~~~~       c. 不可再现性:虽然各次的环境与初始条件相同,但得到的结果却各不相同
      ~~~~~~       d. 程序与程序的执行不再一一对应:一个程序可能对应多个执行中的程序

进程的引入

并发执行出现新的特征,沿用程序的概念无法分析、处理和解释这些现象

进程的定义

可并发执行的程序在一个数据集合上的运行过程

进程的特征:(进程与程序的区别)

      ~~~~~~       a. 动态性:进程的最基本特征,它是程序执行过程,它是有一定的生命期
      ~~~~~~       b. 并发性:进程和操作系统的重要特征
      ~~~~~~       c. 独立性:进程是一个能独立运行的基本单位,而程序不能作为独立单位参加运行、获取资源
      ~~~~~~       d. 异步性:进程按异步方式进行
      ~~~~~~       e. 结构特征:从结构上,进程实体由程序段、数据段和进程控制块三部分组成
      ~~~~~~       f. 生命特征:进程有一个生命周期,有一个从创建到消亡的过程,而程序作为一种软件资源可以长期保存
      ~~~~~~       ※ 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序
      ~~~~~~      

二、进程的描述

进程状态及其转换

  1. 进程的三个基本状态:
          ~~~~~~       i. 运行态:
          ~~~~~~       ii. 就绪态:
          ~~~~~~       iii. 阻塞态:
  2. 进程状态的转换:
          ~~~~~~       i. 就绪态–>运行态:处理机空闲时,进程调度程序必将处理机分配给一个处于就绪态的进程
          ~~~~~~       ii. 运行态–>阻塞态:处于运行态的进程在运行过程中需要等待某一事件发生后才能继续运行
          ~~~~~~       iii. 阻塞态–>就绪态:处于阻塞态的进程,若其等待的事件已经发生,则转换为就绪态
          ~~~~~~       iv. 运行态–>就绪态:处于运行状态的进程在其运行过程中,因分给它的处理机时间片用完,而不得不让出处理机;当系统采用抢占式调度算法时,若有一个优先级高的进程进入就绪状态时,现运行进程也要被迫让出CPU进入就绪状态
          ~~~~~~       § 阻塞态 --> 运行态和就绪态 --> 阻塞态这两种状态转换不可能发生
  3. 系统中各进程状态的分布和管理:
          ~~~~~~       i. 处于运行态进程:如系统只有一个处理机,则在任何一时刻,最多只有一个进程处于运行态
          ~~~~~~       ii. 处于就绪态进程:一般处于就绪态的进程按照一定的算法(如先来的进程排在前面,或采用优先权高的进程排在前面)排成一个就绪队列
          ~~~~~~       iii. 处于阻塞态进程:处于阻塞态的进程排在阻塞队列中。由于等待事件原因不同,阻塞队列也按事件分成几个队列

进程控制模块PCB

  1. 进程控制块的作用:进程存在的唯一标志
  2. PCB的信息:
          ~~~~~~       i. 进程标识符:用于唯一地标识一个进程;有外部标识符和内部标识符两种
          ~~~~~~       ii. 进程调度信息:包括进程状态、队列、队列指针、调度参数

进程上下文

进程上下文是执行活动全过程的静态描述。进程上下文包括系统中与执行该进程有关的各种寄存器的值。
      ~~~~~~      

三、进程的控制

内核

  1. 原语:一种特殊的广义指令,它的功能是由系统通过一段不可分割的指令操作来完成,它又称原子操作,原语在核心态下完成;进程控制操作(创建、撤销、阻塞……)大都为原语操作。
  2. 内核功能:是管理控制中心,为OS其它模块提供最基本的支撑功能,对中断进行“必要和有限的”处理,时钟管理和原语操作。同时完成进程(处理器)、存储器和设备各种资源基本管理功能。

进程状态的细化

挂起和激活操作的引入——
在这里插入图片描述

进程控制原语

  1. 创建进程的方式:
          ~~~~~~       i. 系统建立时创建
          ~~~~~~       ii. 使用进程创建原语创建
  2. 创建原语:一个进程可借助创建原语来创建一个新进程,该新进程是它的子进程,创建一个进程主要是为新进程创建一个PCB。
  3. 进程创建的时机:
          ~~~~~~       i. 在分时系统中用户登陆成功后,系统为该用户创建一个进程用于接收用户的命令
          ~~~~~~       ii. 在批处理系统中发生作业调度时为选中的作业创建进程
          ~~~~~~       iii. 当应用进程在执行过程中提出某种特殊服务,系统创建专用进程来提供这种服务
          ~~~~~~       iv. 用户进程自己调用进程创建原语来创建子进程
  4. 撤销原语:对于树型层次结构的进程系统撤消原语采用的策略是由父进程发出,撤消它的一个子进程及该子进程所有的子孙进程,被撤消进程的所有资源全部释放出来归还系统,并将它们从所有的队列中移去。
          ~~~~~~       i. 撤销原语过程:
    在这里插入图片描述
  5. 进程撤销的时机:
          ~~~~~~       i. 正常结束
          ~~~~~~       ii. 异常结束:越界错,保护错,非法指令,特权指令错,除法错等
          ~~~~~~       iii. 外界干预:程序员干预停止,父进程终止子进程或父进程终止时其子进程也必须终止
  6. 阻塞原语:当前进程因请求某事件而不能执行时,该进程将调用阻塞原语阻塞自己,暂时放弃处理机。进程阻塞是进程自身的主动行为。
  7. 进程阻塞的时机:
          ~~~~~~       i. 所需资源得不到满足时(进程互斥)
          ~~~~~~       ii. I/O请求
          ~~~~~~       iii. 等待数据(进程同步)
          ~~~~~~       iv. 某些系统进程在无事可做时阻塞自己
  8. 唤醒原语:当被阻塞的进程所期待的事件发生时,则有关进程和过程调用wakeup原语,将阻塞的进程唤醒,将等待该事件的进程从阻塞队列移出,插入到就绪队列中,将该进程的PCB中现行状态,如是活动阻塞态改为活动就绪态,如是静止阻塞态改为静止就绪态。
  9. 进程唤醒的时机:
          ~~~~~~       i. 所需资源可以得到(进程互斥)
          ~~~~~~       ii. I/O完成
          ~~~~~~       iii. 数据准备好(进程同步)
          ~~~~~~       iv. 某些系统进程在有事可做时
  10. 挂起原语:调用挂起原语的进程只能挂起它自己或它的子孙,而不能挂起别的族系的进程。挂起原语的执行过程是:检查要挂起进程PCB的现行状态,若正处于活动就绪态,便将它改为静止就绪态;如是活动阻塞态则改为静止阻塞态。如是运行态,则将它改为静止就绪态,并调用进程调度程序重新分配处理机。为了方便用户或父进程考察该进程的运行情况,需把该进程的PCB复制到内存指定区域。
  11. 进程挂起的时机:
          ~~~~~~       i. 终端用户需要
          ~~~~~~       ii. 父进程需要
          ~~~~~~       iii. 内存紧张
          ~~~~~~       iv. OS需要
          ~~~~~~       v. 可能影响到实时任务的性能时
  12. 激活原语:用户进程或父进程通过调用激活原语将被挂起的进程激活。激活原语执行过程是:检查被挂起进程PCB中的现行状态,若处于静止就绪态,则将它改为活动就绪态,若处于静止阻塞态,则将它改为活动阻塞态。
  13. 进程激活的时机:与进程挂起相反。
          ~~~~~~      

四、线程和进程之间的关系

如图所示:
在这里插入图片描述

### 操作系统进程与线程的概念 #### 进程 (Process) 进程操作系统结构的基础,表示程序的一次执行过程。每个进程都有独立的代码数据空间(指令、栈、堆),具有分配资源的功能单位。进程由文本区(即代码)、数据区以及用户堆栈组成,并且拥有自己的地址空间[^1]。 ```c // 创建新进程的例子 pid_t pid; pid = fork(); // Unix/Linux创建子进程的方式 if (pid < 0){ printf("error in fork!"); } else if(pid == 0){ printf("I am child process"); } else { wait(NULL); // 父进程等待子进程结束 } ``` #### 线程 (Thread) 线程有时被称为轻量级进程(Lightweight Process),同一进程内的多个线程共享该进程中大部分的数据状态信息,如文件描述符、信号处理设置等;但是它们各自有自己的调用栈(call stack) 寄存器集合(registers set)[^2]。 ```java class MyThread extends Thread{ public void run(){ System.out.println("This is a thread."); } } public class Main { public static void main(String[] args) { new MyThread().start(); } } ``` ### 进程与线程的主要区别 - **定义不同** - 进程是一个具有一定独立功能的程序关于某个数据集上的一次运行活动,而线程则是进程的一个实体,是CPU调度分派的基本单位[^3]。 - **开销方面** - 启动一个新的进程所需的时间较长,因为这涉及到加载新的环境并初始化所有的上下文。相比之下,启动一个新线程则要快得多,因为它只需要复制父线程的一些属性即可完成创建工作[^4]。 - **资源共享** - 不同进程之间无法直接访问对方的内存区域,如果需要交换数据,则必须通过特定机制实现跨进程通讯(IPC) 。然而,在同一个进程下的各个线程间可以直接读写彼此所在的全局变量或静态方法中的局部变量,因此更容易进行协作工作。 - **通信方式** - 对于多进程而言,通常采用消息队列(message queue), 套接字(socket pair) 或者管道(pipe)等方式来进行相互通信;而对于属于同一进程的不同线程来说,由于它们都处于相同的地址空间内,故可通过共享存储器(shared memory segment)来高效传递信息。 - **调度粒度** - 在现代操作系统里,实际被调度的对象往往是线程而非整个进程——尽管后者确实包含了前者所需的全部资源支持条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PandaThug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值