进程控制是操作系统核心功能之一,其核心目标是确保系统中进程能够有序、高效地从创建到消亡

4.2.2 进程控制

进程控制是操作系统核心功能之一,其核心目标是确保系统中进程能够有序、高效地从创建到消亡,具体可以从以下几个方面深入理解:

  1. 进程生命周期的控制范围
    进程的生命周期包括创建、就绪、运行、阻塞、终止等状态,进程控制需要对这些状态之间的转换进行管理。例如:

    • 当用户启动一个应用程序时,操作系统会创建新进程(分配资源、初始化进程控制块等);
    • 当进程运行中需要等待某个事件(如I/O完成),会转为阻塞状态,事件完成后再转为就绪状态;
    • 当进程完成任务或出现错误时,操作系统会终止进程并回收其占用的资源。
  2. 内核与原语的作用

    • 内核:作为硬件之上的第一层软件,内核直接操作硬件资源(如CPU、内存、I/O设备等),为进程控制提供底层支持,例如进程调度、内存分配、中断处理等都由内核完成。
    • 原语:原语是内核中实现特定功能的“原子操作”,其特点是执行过程不可中断(一旦开始就必须完成,不会被其他进程打断),这确保了进程控制的安全性和一致性。常见的进程控制原语包括创建原语(create)、撤销原语(destroy)、阻塞原语(block)、唤醒原语(wakeup)等。

4.2.3 进程间的通信

多个进程在并发执行时,可能需要协作或共享资源,因此需要进程间通信机制,其中同步与互斥是最基础的问题,信号量机制是解决这些问题的经典方案。

1. 同步与互斥的本质区别
  • 同步(直接制约):指多个协作进程之间需要按一定顺序执行,例如进程A需要等待进程B完成某个操作后才能继续执行(如B生成数据后A才能处理)。
    举例:打印机打印文档时,“读取文档”进程需在“打印”进程开始前完成,这就是同步关系。

  • 互斥(间接制约):指多个进程因竞争临界资源(一次只能被一个进程使用的资源,如打印机、共享变量等)而产生的制约关系,需要保证同一时间只有一个进程访问临界资源。
    举例:两个进程同时需要使用打印机,必须通过互斥机制确保一个进程使用完后,另一个才能使用。

2. 信号量机制

信号量是一个用于表示资源数量或事件状态的变量,通过PV操作实现对进程的控制,具体分类和操作如下:

  • 信号量的分类

    • 公用信号量:用于实现互斥,初值通常为1(表示临界资源可用)或资源的总数(如3台打印机,初值为3)。
    • 私用信号量:用于实现同步,初值为0(表示等待某个事件)或正整数(表示可用的“信号”数量)。
  • PV操作的定义

    • P操作:将信号量的值减1(S = S - 1)。若结果大于等于0,进程继续执行;若结果小于0,进程进入阻塞状态并插入信号量的等待队列。
      作用:申请资源或等待事件。
    • V操作:将信号量的值加1(S = S + 1)。若结果大于0,进程继续执行;若结果小于等于0,从信号量的等待队列中唤醒一个进程,使其转为就绪状态。
      作用:释放资源或触发事件。
  • 用PV操作实现互斥的逻辑
    如你提供的内容所示,设互斥信号量mutex初值为1,临界区代码的执行需遵循:

    P(mutex)  // 申请进入临界区,若mutex=0则阻塞
    临界区    // 访问临界资源的代码(如操作共享变量)
    V(mutex)  // 退出临界区,释放资源,若有等待进程则唤醒
    

    举例:两个进程P1和P2竞争修改同一个共享变量count,通过上述PV操作可确保同一时间只有一个进程修改count,避免数据错误。

补充说明

进程间通信的机制不止信号量,还包括消息队列、管道、共享内存等,但信号量机制是理解进程同步与互斥的基础。在实际应用中,PV操作的使用需要注意信号量的初值设置和操作顺序,否则可能导致死锁(如两个进程互相等待对方释放资源)等问题。
下面把教材里这段文字“落地”成一段最直观、可直接运行的伪代码,演示怎样用整型信号量和 PV 操作把原来的“交通流量统计程序”改写成 P1、P2 互斥 的版本。
(假设原来的程序是把一个全局计数器 count 加 1。)


  1. 全局数据结构
semaphore mutex := 1;   // 公用互斥信号量,初值 1
int count := 0;         // 交通流量计数器
  1. 进程 P1(路口 1 采集)
loop forever
    检测一辆车到达;
    P(mutex);           // 进入临界区
        count := count + 1;
    V(mutex);           // 退出临界区
end loop
  1. 进程 P2(路口 2 采集)
loop forever
    检测一辆车到达;
    P(mutex);           // 进入临界区
        count := count + 1;
    V(mutex);           // 退出临界区
end loop

说明

  • P(mutex) 申请锁,若 mutex 已为 0 则阻塞等待;
  • V(mutex) 释放锁,若有进程阻塞则唤醒其一;
  • 只有 count++ 这一段被 P/V 包裹成了临界区,其余代码并发执行不受影响;
  • mutex 是 公用信号量,初值 1,用于 互斥(间接制约);
  • 如果以后还要让 P1、P2 按某种次序交替工作,再引入 私用信号量同步(直接制约)即可。
  1. 进程控制的定义
    进程控制旨在对系统里的全部进程,从其创建直至消亡的整个过程实施有效的管控。这一过程贯穿了进程的生命周期,确保系统中各个进程能够有序、高效地运行。
  2. 实现方式
    进程控制借助操作系统内核中的原语来达成。内核作为计算机系统硬件的首次延伸,是基于硬件的第一层软件扩充。它为系统对进程进行控制和管理营造了良好的环境,使得进程控制能够在稳定、高效的基础上进行。
  3. 原语的概念
    原语由若干条机器指令构成,用于完成特定功能的程序段。这些指令组合在一起,形成了具有特定功能的操作,能够对进程进行精确的控制,如进程的创建、撤销、阻塞等操作。
二、进程间的通信
  1. 同步与互斥
    • 同步:同步属于合作进程间的直接制约问题。当多个进程需要合作完成一个任务时,它们之间需要协调执行的顺序和时机,以确保任务能够正确完成。例如,在一个生产线上,不同的工序需要按照一定的顺序进行,前一个工序完成后,后一个工序才能开始,这就是进程同步的体现。
    • 互斥:互斥是申请临界资源进程间的间接制约问题。临界资源是指一次仅允许一个进程使用的资源,如打印机、共享内存等。当多个进程都需要访问临界资源时,为了避免冲突和数据不一致,需要通过互斥机制来保证同一时刻只有一个进程能够访问该资源。
  2. 信号量机制
    • 信号量的定义:信号量是一个整型变量,会依据控制对象的不同被赋予不同的值。
    • 信号量的分类
      • 公用信号量:主要用于实现进程间的互斥,其初值通常为 1 或者资源的数目。当多个进程竞争同一临界资源时,通过对公用信号量的操作来实现互斥访问。
      • 私用信号量:用于实现进程间的同步,初值为 0 或某个正整数。私用信号量可以协调进程之间的执行顺序,确保某个进程在特定条件满足时才继续执行。
    • 利用 PV 操作实现进程的互斥
      令信号量 mutex 的初值为 1,当进程要进入临界区时执行 P 操作,退出临界区时执行 V 操作。利用 PV 操作实现进程互斥的代码段如下:
P(mutex)
临界区
V(mutex)

例如,在交通流量统计程序中,通过对信号量的 P、V 操作,可以实现 P1 和 P2 两个进程间的互斥,避免两个进程同时访问共享资源而导致数据错误。

脑图

返回图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Bol5261

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

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

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

打赏作者

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

抵扣说明:

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

余额充值