考研408--操作系统--day4--进程同步互斥信息量机制

(以下内容全部来自上述课程)
目录
- 同步、互斥问题
- 1. 什么是进程同步
- 2. 什么是进程互斥
- 3. 小结
- 进程互斥的软件实现方法
- 1. 单标志法
- 2. 双标志先检查法
- 3. 双标志后检查法
- 4. Peterson算法
- 5. 小结
- 进程互斥的硬件实现方法
- 1. 中断屏蔽方法
- 2. TestAndSet指令
- 3. Swap指令
- 4. 小结
- 锁
- 信息量机制(一)
- 1. 整型信息量
- 2. 记录型信号量
- 3. 小结
- 信息量机制(二)
- 1. 实现进程互斥
- 2. 实现进程同步
- 3. 实现进程的前驱关系
- 4. 小结
同步、互斥问题

1. 什么是进程同步
异步性:随机,自己没办法控制。
同步:就是解决异步性随机的问题,让进程变得可控。

异步:没办法控制写数据和读数据的顺序,可能写先读后,也可能读先写后。
同步:我们需要的是写先读后(毕竟不先写啥都读不到),就需要使进程可控,这个过程就是同步。

2. 什么是进程互斥
互斥:就是两个人上厕所用马桶,不可能一个人用马桶但是还没用完呢,另外一个人直接把马桶抢过来吧。
同时:这个东西可以这个人用了但是还没用完,另外一个人更急就可以让给他,从更宏观的时间来看可以算是同时。

进入区:看看临界资源区能不能用,有没有人占着用不了。
临界区:放临界资源的地方。(可以类比马桶啦其实)
退出区:自己用完了,告诉别人这个资源可以给别人用了。
剩余区:用完资源就去干别的事儿了呗。

空闲让进:马桶没人用的时候,可以让任何人用。
忙则等待:马桶有人用,自己就等着呗。
有限等待:这个坑自己等的时间太久了,就换一个坑呗。
让权等待:比如这个景区的厕所收费,有个人没拿钱用不了,就赶紧让他走,让别人上。

3. 小结

进程互斥的软件实现方法


1. 单标志法
while (turn != 0);:trun=0时不符合循环条件,就可以向下执行,可以访问临界区。
while (turn != 1);:turn=0时符合循环条件,就一直死循环,直到p0执行完turn=1时,才会跳出循环。

劣势:必须轮流,一个用完了才会轮到另外一个,所以前者一直不用,但是后者突然要用了,就只能等。

2. 双标志先检查法
问对方用不用–>对面不用自己再用。(过分谦让)
while(flag[1]);:如果falg[1]=true,符合条件就自己死循环让p1先访问,可惜flag[1]=false(初始赋值),不符合条件,就要自己访问了。
falg[0]=true;:给p0,也就是自己访问临界区了,给临界区上个锁不让别人进来。
以上p1同理。

假设流程:B没说想用马桶–>A没说想用马桶–>A以为B不用所以自己用–>B以为A不用所以自己也用–>一个马桶两个人用(蚌埠住了)
劣势:如果是异步的,可能造成两个人用一个马桶的奇怪情况,也就是没符合忙则等待。

3. 双标志后检查法
实际上就是把确认对方意愿的步骤往后放:先抢–>再问对方用不用。(过分缺德)
就是开抢,不管对面儿用不用

劣势:两边儿光顾着抢了,一个用上厕所的都没。

4. Peterson算法
融合之前的几种方法,改为了先询问再谦让的方法。(很礼貌了)
while(flag[1]&&turn==1):p1要是用(也就是flag[1]=true),并且turn=1(前面定义了,直接白给,就是你要用就用的意思)

谁最后谦让谁没主动权就是了。



5. 小结

进程互斥的硬件实现方法

1. 中断屏蔽方法
缺点:权限太高了,不可能让用户自己用,所以很有局限性。

2. TestAndSet指令
注意:都是用硬件实施的,代码只是为了让自己理解怎么实施的而已。

3. Swap指令

4. 小结

锁


信息量机制(一)

信息量:剩下几个马桶or打印机,啥都行,剩下几个,信息量就是几。
wait(P):进入区。
signal(V):退出区。

1. 整型信息量
就是直接用具体数字表示数量。

2. 记录型信号量
因为不一定就一个机器,而且谁用谁不用数值来回变,所以干脆就赋个没被定义为具体数字的值,机器多几个少几个就不用像数字型的还得自己特意改一下。类似于全自动,解放双手(?)



3. 小结

信息量机制(二)

1. 实现进程互斥
初值为1:就是把临界区定义为机器了,一台机器(马桶)只能一个进程(人)访问,自然一个临界区只能一个进程进入。

2. 实现进程同步
前操作–>v(s)–>p(s)–>后操作
简单理解:后者执行的前提是前者里面的一条执行语句,也就是我想吃雪糕,但是吃雪糕(p)之前我必须先买雪糕(v)。

3. 实现进程的前驱关系
顺着一条线往下看,一个圆到下一个圆之间有一条路,必经之路,也就是必要条件。

4. 小结

