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

(以下内容全部来自上述课程)

目录

  • 同步、互斥问题
    • [1. 什么是进程同步](#1. 什么是进程同步)
    • [2. 什么是进程互斥](#2. 什么是进程互斥)
    • [3. 小结](#3. 小结)
  • 进程互斥的软件实现方法
    • [1. 单标志法](#1. 单标志法)
    • [2. 双标志先检查法](#2. 双标志先检查法)
    • [3. 双标志后检查法](#3. 双标志后检查法)
    • [4. Peterson算法](#4. Peterson算法)
    • [5. 小结](#5. 小结)
  • 进程互斥的硬件实现方法
    • [1. 中断屏蔽方法](#1. 中断屏蔽方法)
    • [2. TestAndSet指令](#2. TestAndSet指令)
    • [3. Swap指令](#3. Swap指令)
    • [4. 小结](#4. 小结)
  • 信息量机制(一)
    • [1. 整型信息量](#1. 整型信息量)
    • [2. 记录型信号量](#2. 记录型信号量)
    • [3. 小结](#3. 小结)
  • 信息量机制(二)
    • [1. 实现进程互斥](#1. 实现进程互斥)
    • [2. 实现进程同步](#2. 实现进程同步)
    • [3. 实现进程的前驱关系](#3. 实现进程的前驱关系)
    • [4. 小结](#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. 小结

相关推荐
czhc11400756637 分钟前
C# 1221
java·servlet·c#
晴天¥7 分钟前
Oracle中的安全管理(用户、权限、角色)
数据库·安全·oracle
黄俊懿9 分钟前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——全局事务的回滚
java·后端·spring·spring cloud·微服务·架构·架构师
派大鑫wink15 分钟前
【Day12】String 类详解:不可变性、常用方法与字符串拼接优化
java·开发语言
柏木乃一16 分钟前
进程(6)进程切换,Linux中的进程组织,Linux进程调度算法
linux·服务器·c++·算法·架构·操作系统
Jelly-小丑鱼17 分钟前
Linux搭建SQLserver数据库和Orical数据库
linux·运维·数据库·sqlserver·oracal·docker容器数据库
JIngJaneIL18 分钟前
基于springboot + vue健康管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端
秋饼19 分钟前
【三大锁王争霸赛:Java锁、数据库锁、分布式锁谁是卷王?】
java·数据库·分布式
电商API&Tina22 分钟前
【电商API接口】关于电商数据采集相关行业
java·python·oracle·django·sqlite·json·php
刘一说26 分钟前
Spring Boot中IoC(控制反转)深度解析:从实现机制到项目实战
java·spring boot·后端