临界资源与共享资源
1. 概念层级与关系
-
共享资源 (Shared Resource): 这是总称,指系统中可供多个进程共同使用的资源。其核心目的是提高资源利用率。根据其共享方式的不同,可进一步细分为以下两种。
-
互斥共享资源 (Mutually Exclusive Shared Resource): 这就是我们通常所说的 临界资源 (Critical Resource)。
-
同时共享资源 (Simultaneous Shared Resource)
-
因此,你问题的核心,就是辨析“互斥共享”和“同时共享”这两种模式。
2. 两种共享方式的深度辨析
这两种共享方式的根本区别在于:在“任一时刻”,资源是否允许被一个以上的进程访问。
2.1 临界资源 (互斥共享方式)
官方定义: 在一段时间内,只允许一个进程访问的资源。访问该资源的代码段称为临界区。
核心解读:
-
“任一时刻” (At any single moment): 严格限制只有一个进程能正在使用该资源。如果进程A正在使用打印机,那么在同一微秒,进程B绝对不能使用。这是物理或逻辑属性决定的,强行违背会导致数据错乱或设备损坏。
-
“某段时间内” (Over a period of time): 多个进程可以通过分时复用 (Time-Division Multiplexing) 的方式来“共享”该资源。它们在时间上是交替、串行地使用该资源,而不是真正地“同时”使用。
图示与实例:以打印机为例
假设有进程 P1
, P2
, P3
都需要打印文件。打印机本身是一个典型的临界资源。
| P1使用 | | P2使用 | | P3使用 |
-----+--------+---------+--------+------+--------+-----> 时间轴
t1 t2 t3 t4 t5 t6
-
在
t1
到t2
这段时间的任意时刻: 只有P1
在向打印机发送数据,P2
和P3
必须等待。 -
在
t3
到t4
这段时间的任意时刻: 只有P2
在使用,P1
已用完,P3
仍在等待。 -
在
t1
到t6
这段较长的时间内: 我们看到P1
,P2
,P3
都使用了打印机,完成了各自的任务。从宏观用户的角度看,打印机这个设备被“共享”了。
实现机制:
这种“共享”是由操作系统通过同步互斥机制(如我们之前讨论的信号量和P、V操作)来管理的。对于打印机这类设备,通常还会采用 SPOOLing 技术 (假脱机技术),将所有进程的打印请求先放入一个缓冲区(磁盘上的一个队列),然后由打印机进程依次从队列中取出并打印。这本质上就是将并发请求串行化,以适应临界资源的互斥属性。
常考点:
-
临界资源是引发进程同步与互斥问题的根源。
-
所有关于P、V操作、死锁的讨论,都是围绕着如何管理对临界资源的访问。
-
常见的临界资源:物理设备(打印机、扫描仪)、共享内存中由多个进程共同读写的变量、共享文件、消息队列等。
2.2 同时共享资源
官方定义: 在一段时间内,允许多个进程“同时”访问的资源。
核心解读:
-
“任一时刻” (At any single moment): 允许有多个进程正在访问该资源。
-
“某段时间内” (Over a period of time): 自然也允许多个进程访问。这里的“共享”是真正的并行或并发访问,而非时间上的交替。
实例:以只读文件为例
假设一个可重入的代码文件(如库函数)或一个公共的只读数据文件(如配置文件)被加载到内存中。进程 P1
, P2
, P3
都需要执行这段代码或读取这份数据。
P1读取 --> | |
P2读取 --> | 共享的只读文件 | <-- 在同一时刻 t
P3读取 --> | |
- 在任意时刻
t
:P1
可以读取文件的A部分,P2
可以读取文件的B部分,P3
可以读取文件的C部分。它们的访问行为因为不改变资源状态,所以互相之间没有冲突。它们是真正在“同时”访问。
为什么可以同时?
关键在于访问的性质。如果所有访问都是“只读”的,不改变资源内容和状态,那么并发访问就是安全的。一旦有任何一个进程需要“写入”,那么这个资源在该“写入”操作期间就退化为了一个临界资源,需要进行互斥处理。(这也是“读者-写者问题”的由来,该问题是考研高频考点)。
常见的可同时共享资源:
-
可重入代码 (Reentrant Code)。
-
只读的数据文件或内存区域。
3. 总结与辨析表格
为了让你更清晰地掌握其区别,我为你整理了以下表格:
特性 | 临界资源 (互斥共享) | 同时共享资源 |
---|---|---|
本质定义 | 一次仅允许一个进程访问的资源 | 允许一次有多个进程访问的资源 |
访问属性 | 互斥性 (Mutual Exclusion) | 并行性 (Parallelism/Concurrency) |
“任一时刻”的访问 | 仅一个进程 | 可多个进程 |
“某段时间内”的共享 | 通过分时复用实现,进程串行、交替地使用 | 进程并发或并行地使用 |
实现方式 | 需要同步互斥机制(如P/V操作、锁)来管理和调度 | 无需特殊的互斥控制(当访问性质为只读时) |
典型实例 | 打印机、磁带机、被多个进程修改的共享变量、文件 | 可重入代码、只读文件、ROM |
4. 关于“共享设备”的补充说明
“共享设备”是一个广义的术语。一个设备是临界资源还是同时共享资源,取决于其物理特性和使用方式。
-
打印机: 是共享设备,但其管理方式是作为临界资源。
-
硬盘: 情况更复杂。从物理上讲,磁盘的磁头在“任一时刻”只能在一个位置读写,因此物理设备本身是临界资源。但从逻辑上看,操作系统通过文件系统可以将磁盘空间划分为不同的文件,只要进程
P1
和P2
访问的是不同的文件,它们的访问请求就可以在宏观上并发进行(由磁盘调度算法进行优化),看起来像是“同时共享”。但如果P1
和P2
同时写同一个文件,那这个文件就成了临界资源。