进程同步机制 个由临界区和剩余区1和剩余区2程序段组成的进程采 用进程同步机制后的描述如下: begin remainder section 1; 剩余区1 进入区 critical section 临界区 退出区 remainder section 2 剩余区2 en 进程同步机制在临界区前加上进入区,它负责对欲访问 的临界资源状态进行检查,以决定是允许该进程进入临界 区还是等待。同时在临界区后加上退出区,它负责释放临 界资源以便其它等待该临界资源的进程使用。 实现进程互斥和同步的信号量机制有软件方法、硬件指令 方法、信号量机制和管程等 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 进程同步机制 ⚫ 一个由临界区和剩余区1和剩余区2程序段组成的进程采 用进程同步机制后的描述如下: begin remainder section 1; 剩余区1 进入区 critical section ; 临界区 退出区 remainder section 2 ; 剩余区2 end 进程同步机制在临界区前加上进入区,它负责对欲访问 的临界资源状态进行检查,以决定是允许该进程进入临界 区还是等待。同时在临界区后加上退出区,它负责释放临 界资源以便其它等待该临界资源的进程使用。 实现进程互斥和同步的信号量机制有软件方法、硬件指令 方法、信号量机制和管程等
3.13利用软件方法解决进程互斥( Mutual Exclusion)问题 问题:有二个进程Pi和Pj互斥共享临界资源R, begin parbegin Pi parend end 下列算法只写出进程Pi程序。 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 3.1.3 利用软件方法解决进程互斥(Mutual Exclusion )问题 问题:有二个进程Pi和Pj互斥共享临界资源R, begin parbegin Pi: ...… Pj: .....… parend end 下列算法只写出进程Pi程序
利用软件方法解决进程互斥问题-1 算法1 该算法设置了一个公用整型变量trn,用于指示被允许进入 临界区的进程编号,既若ture=0,表示允许Pi进程进入临界 区 Pi进程 Pj进程: repeat repeat while turn≠ i do no op while turn≠ j do no op Critical section Critical section turn=J turn=1 Remain section Remain section until false until false 该算法可确保每次只允许一个进入临界区。但采用强制两个 进程轮流进入临界区,很容易造成资源利用不充分。当P 退出后置turn为j,但Pj并未使用CS,Pi又想使用时,则无 法置turn=i,不能进入CS,违背“空闲让进” 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 利用软件方法解决进程互斥问题-1 算法1 该算法设置了一个公用整型变量turn,用于指示被允许进入 临界区的进程编号,既若ture=0,表示允许Pi进程进入临界 区。 Pi进程: Pj进程: repeat repeat while turn≠i do no op while turn≠j do no op Critical section Critical section turn=j turn=i Remain Section Remain Section until false until false 该算法可确保每次只允许一个进入临界区。但采用强制两个 进程轮流进入临界区,很容易造成资源利用不充分。当Pi 退出后置turn为j,但Pj并未使用CS, Pi又想使用时,则无 法置turn= i,不能进入CS,违背“空闲让进”
利用软件方法解决进程互斥问题-2 算法2: 算法基本思想:在每一个进程访问临界区资源之前,先动査看 下临界资源是否正被访问,若正被访问,该进程需等待, 否则才进入自己的临界区。为此设置了一个布尔型数组fag], 如第个元素值为 false-fag[i]= false--表示Pi进程未进入临界 区,值为true-- flag[i]ue--表示P进程进入临界区 Pi: repeat Pj: repeat while flaglj] do no op; while flagli do no op flagli]: =true 2 flaglj]: true critical section:- 1 critical section flagli]: false flag[j]: false remainder section remainder section until false until false 会出现Pi和Pj同时进入临界区错误,违背忙则等待。 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 利用软件方法解决进程互斥问题-2 算法2: 算法基本思想:在每一个进程访问临界区资源之前,先动查看 一下临界资源是否正被访问,若正被访问,该进程需等待, 否则才进入自己的临界区。为此设置了一个布尔型数组 flag[], 如第i个元素值为false--- flag[i]=false----表示Pi进程未进入临界 区,值为true--- flag[i]=true------表示Pi进程进入临界区。 Pi:repeat Pj:repeat while flag[j] do no_op; while flag[i] do no_op; flag[i]:=true; 2 flag[j]:=true; critical_section; 1 critical_section; flag[i]:=false; flag[j]:=false; remainder section; remainder section; until false until false 会出现Pi和Pj同时进入临界区错误,违背忙则等待
利用软件方法解决进程互斥问题3 算法3 算法2是先检测对方进程状态标志后再置自己标志,由于在检 测和放置中可插入另一个进程时检测操作,会造成二个进程 在分别检测后同时进入临界区。为此算法3米用先设置自己标 志后再检测对方状态标志,它的程序如下,布尔型数组fag[], 如第个元素值为 false-fag[i]= false--表示Pi进程未进入临界 区,值为true-- flags]ue--表示Pi进程进入临界区/要求进 入CS Pi: repeat repeat ag true laglj]: = true while flaglj do no op; while flagli do no op critical section I critical section flagli]: =false flag Lj]: - false remainder section remainder section until false 计算机操作系 until false
2001年9月20日9时1分 计算机操作系统 利用软件方法解决进程互斥问题-3 算法3: 算法2是先检测对方进程状态标志后再置自己标志,由于在检 测和放置中可插入另一个进程时检测操作,会造成二个进程 在分别检测后同时进入临界区。为此算法3采用先设置自己标 志后再检测对方状态标志,它的程序如下,布尔型数组 flag[], 如第i个元素值为false--- flag[i]=false----表示Pi进程未进入临界 区,值为true--- flag[i]=true------表示Pi进程进入临界区/要求进 入CS。 Pi:repeat Pj:repeat flag[i]:=true; 2 flag[j]:=true; while flag[j] do no_op; while flag[i] do no_op; critical_section; 1 critical_section; flag[i]:=false; flag[j]:=false; remainder section; remainder section; until false until false