操作系统复习笔记1:实现临界区同步机制有哪些方法?
实现临界区同步机制的方法如下:
软件方法:尝试算法1(忙等&不能保证进程互斥进入临界区-->2个都用);尝试算法2(忙等&死锁--->2个都不能用qwq);Peterson算法(比较理想,忙等--->孔融让梨嘤嘤嘤);
硬件方法:禁止中断法(不适用);特殊指令法(TS指令(Test And Test),exchange(SWAP))---->忙等,空循环qwq
开放的并发的环境,执行的相对速度无法相互控制,就会出现所谓与时间有关的错误。(与时间片的轮转RR有关哦)
多终端系统:学校的教务系统(手动滑稽)
实现临界区( critical section )管理有软件和硬件两种方式。
软件方法:尝试算法1(忙等&不能保证进程互斥进入临界区-->2个都用);尝试算法2(忙等&死锁--->2个都不能用qwq);Peterson算法(比较理想,忙等--->孔融让梨嘤嘤嘤);
CPU与内存的访问是一对一的,只能是一个一个的,当然速度非常快,一般在10ns周期内。
单独的内部逻辑比较完美,如何找与时间有关错呢,考虑时间片轮转,寻找那一寸的错误(天道好轮回,苍天饶过谁2333)。
临界区的管理尝试(1)就是有这种其情况:
进程P1的while(inside2);执行完后时间片恰好用完,----->P2的while(inside1)执行完后其分配的时间片恰好用完--->
P1去进入临界区----->P2去进入临界区。出现与时间有关的错误qwq。
先修改自己的逻辑变量,再判断对方是不是在临界区。看样子似乎不错了2333
但是:这个算法是有缺点的:
可能都进不去的。死锁。
P1的inside1=true执行完时间片用完-->P2的inside2=true执行完时间片用完-->P1死循环——————>P2死循环
Peterson算法:bool flag[n]--->意愿;turn----->轮次
让全等待,"我想进来之前,我先礼让三分2333!"仁者无敌的哲学了2333
硬件方法:禁止中断法(不适用);特殊指令法(TS指令(Test And Test),exchange(SWAP))
x就跟empty似的,2333!
others;
Be countinued!!!!!!