Cha4并发性:互斥和同步
Cha4 并发性:互斥和同步
并发( concurrency)导致的问题 进程的相对执行速度不可预测 °资源共享引起的危险 最佳资源分配 难以定位程序错误
并发(concurrency)导致的问题 • 资源共享引起的危险 • 最佳资源分配 • 难以定位程序错误 进程的相对执行速度不可预测
回显字符的Echo过程 Void echo In=getchar Chou=chin Putchar(chou P2 P1
回显字符的Echo过程 Void echo() { In=getchar(); Chout=chin; Putchar(chout); } P1 P2
共享资源的问题 Process p Process p 2 chin=getchar b—chin= getchar(0 Chou=chin; Putchar(chou) Chout=chin tchar(chou),b
共享资源的问题 Process p1 . chin=getchar(); . . . Chout=chin; Putchar(chout); Process p2 . . chin=getchar(); Chout=chin; Putchar(chout); . a b b b
OS需要管理的问题 能够记住所有进程 为每个进程分配资源 CPU,内存,文件,WO设备 保护进程的数据和物理资源 保证进程结果与执行速度无关
OS需要管理的问题 • 能够记住所有进程 • 为每个进程分配资源 – CPU,内存,文件,I/O设备 • 保护进程的数据和物理资源 • 保证进程结果与执行速度无关
进程的交互 知道程度关系 对其他进程潜在问题 的影响 相互不知道竞争 结果无影响互斥 计时受影响死锁 饿死 间接知道对方通过共享合作结果受影响互斥 共享对象 计时受影响死锁 饿死 数据一致性 直接知道对方通过通信合作结果受影响死锁 通信原语 计时受影响饿死
进程的交互 知道程度 关系 对其他进程 的影响 潜在问题 相互不知道 竞争 结果无影响 计时受影响 互斥 死锁 饿死 间接知道对方 -共享对象 通过共享合作 结果受影响 计时受影响 互斥 死锁 饿死 数据一致性 直接知道对方 -通信原语 通过通信合作 结果受影响 计时受影响 死锁 饿死
进程中的资源争用 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; • 写操作的互斥 • 数据的一致性 共享的变量、文件、数据库……