进程的交互 知道程度关系 对其他进程潜在问题 的影响 相互不知道竞争 结果无影响互斥 计时受影响死锁 饿死 间接知道对方通过共享合作结果受影响互斥 共享对象 计时受影响死锁 饿死 数据一致性 直接知道对方通过通信合作结果受影响死锁 通信原语 计时受影响饿死
进程的交互 知道程度 关系 对其他进程 的影响 潜在问题 相互不知道 竞争 结果无影响 计时受影响 互斥 死锁 饿死 间接知道对方 -共享对象 通过共享合作 结果受影响 计时受影响 互斥 死锁 饿死 数据一致性 直接知道对方 -通信原语 通过通信合作 结果受影响 计时受影响 死锁 饿死
进程中的资源争用 1/O设备,内存,CPU ■■■■■■ 临界资源与临界区 critical section 互斥 mutual exclusion 多个进程不能同时使用临界资源 死锁 deadlock 多个进程循环等待对方占用的资源 全部处于阻塞状态 饥饿 starvation 临界资源只被部分进程轮流使用 有的进程永远无法获得
进程中的资源争用 I/O设备,内存,CPU…… • 临界资源与临界区critical section • 互斥mutual exclusion – 多个进程不能同时使用临界资源 • 死锁deadlock – 多个进程循环等待对方占用的资源 – 全部处于阻塞状态 • 饥饿starvation – 临界资源只被部分进程轮流使用 – 有的进程永远无法获得
进程中的资源争用 P1 P2 R1 P1 P2 死锁 R2 互斥 P1 P2 P3 R1 饥饿
进程中的资源争用 P1 P2 互斥 P1 P2 R1 死锁 R2 P1 P2 P3 R1 饥饿
互斥机制 Const int n=进程数 Void p(int) While true intercritical( 临界区 Exitcritical (; Void main( Iparbegin (p(R1), p(R2),.p(Rn))I
互斥机制 Const int n=进程数 Void p(int i) {while true {entercritical (i); 临界区 Exitcritical (i); …}} Void main() {parbegin (p(R1),p(R2),…,p(Rn))}
进程通过共享合作 共享的变量、文件、数据库 ■■■■■ 写操作的互斥 数据的一致性 P1 P2 a=a+1 b=2*b b=b+1 a=2*a;
进程通过共享合作 P1 a=a+1; b=b+1; P2 b=2*b; a=2*a; • 写操作的互斥 • 数据的一致性 共享的变量、文件、数据库……