操作系统学习记录20220404

操作系统学习记录(二)

2.3.4信号量机制

1.信号量分为整型信号量和记录型信号量

2.整型信号量只有初始化、P、V操作,P操作对应wait函数,作用是申请使用并上锁资源,V操作对应signal函数,作用是申请释放并解锁资源。

3.整型信号量的缺点是当多个进程申请使用某种资源的时候,会同时使用P操作导致多个进程阻塞在P操作的while函数部分,解决这个问题的方法是记录型信号量的让权等待操作。

4.P操作和V操作属于原语,即PV操作不能被中断。

5.记录型信号量wait与signal函数的参数是一个结构体,该结构体由系统资源数目与等待队列组成。

6.P操作时,申请系统资源并上锁,对应资源数目减一,但是如果申请时通过系统资源数目发现暂时已无资源,则进入等待队列,进程状态由运行态进入阻塞态(让权等待);V操作时,释放系统资源并解锁,对应资源数目加一,但是如果释放时通过系统资源数目发现等待队列中有等待进程,则对等待进程进行P操作,进程状态由阻塞态进入就绪态。

2.3.5信号量机制处理进程互斥、同步、前驱关系

1.不同的系统资源应该定义不同的信号量变量名

2.处理进程互斥:首先对系统资源A定义信号量名,其次进程1执行P操作,上锁后独立访问系统资源A,此时进程2想访问系统资源A,但是由于进程1未执行V操作,所以进程2在执行P操作时被阻塞进入等待队列。进而实现进程互斥。

2.处理进程同步:同步是指希望各个进程按照我们的需求去依次执行。因为P操作能够在检查到无资源的时候阻塞进程,V操作能够在释放资源之后唤起其他进程。所以,可以在进程1中加入V操作语句,并设置同步资源初始数目为0,在进程2中加入P操作语句。这就可以因为进程1没有执行V操作释放资源导致进程2的P操作一直阻塞等待。进而实现进程同步。

3.处理进程前驱:首先分析各个进程需要执行的顺序,然后通过加入多对同步信号量进行多个进程同步。进程前驱就是多个进程同步控制的组合。

2.3.6 生产者消费者问题

1.在生产和消费的过程中,上锁互斥执行,因此互斥PV对应生产的写入和消费的取出。

2.一共两对同步关系,一对互斥关系。当开始执行时同步P1操作使得系统资源减1,然后互斥PV上锁使用刚刚得到的资源(比如生产者写入数据到缓冲区),V操作之后执行同步V2操作,消费者同步P2操作收到V2的反馈,离开阻塞态使用互斥PV上锁使用刚刚得到的资源(比如消费者从缓冲区读出数据),V操作之后执行同步V1操作。

3.互斥PV一定在一个进程中成对出现。

2.3.7 多生产者消费者问题

1.模型:只有一个盘子,父亲往里放苹果,母亲往里放橘子,女儿只取橘子吃,儿子只取苹果吃。所以有放和吃时的一对互斥信号量PV,一个盘子资源被占用到释放的一对同步信号量P1V1,父亲放完让女儿吃的一对同步信号量P2V2,母亲放完让儿子吃的一对同步信号量P3V3。

2.3.8 单生产者多消费者问题

1.模型:只有一个盘子,一次只能放一种水果,父亲给三个女儿发水果,大女儿只吃苹果,二女儿只吃梨子,三女儿只吃菠萝。父亲开始占用盘子放水果到任意一个女儿吃完将盘子还给父亲这个过程由一对同步信号量P0V0控制,父亲和大女儿之间由一对同步P1V1控制,父亲若放了苹果,就告知大女儿V1,大女儿开始吃苹果P1。同理,父亲和二女儿之间由一对同步P2V2控制,父亲和三女儿之间由一对同步P3V3控制。吃和放这两个纯粹的过程可由互斥信号量控制。

2.3.9 读者写者问题

1.对于共享文件,可以多个读进程同时读数据,注意是读而不是取出。

2.对于共享文件,不能由读进程和写进程同时处理数据,不能由多个写进程同时处理数据。

3.在写进程前,其他读写进程需要全部退出。

4.使用一对互斥信号量P1V1保障读进程的初始化上锁过程P,最后一个执行完的读进程解锁V。

5.为保障由于读进程太多导致写进程饿死,使用一对互斥信号量P2V2保证读进程能够被暂时阻塞。这对互斥信号量P2V2在帮助读进程执行时,也同样对写进程产生了阻塞效果,但是读进程中V2的解锁不能影响读进程互不影响的原则。

6.写进程在写数据时使用上述的PV进行互斥。

2.3.10 哲学家进餐问题

1.哲学家进餐问题的特点是一个进程会占用不止一个临界资源,容易造成死锁现象。

2.解决方法1:给进程获得多个资源的过程加入互斥信号量保证该进程一定会获得资源,虽然这样会造成多个进程,尤其是需要相同资源的进程阻塞等待,但是不会造成死锁现象。

3.解决方法2:限制同时想获取资源的进程的数目,解决僧多粥少的局面。

2.3.11 管程

1.用来实现进程的互斥和同步

2.管程是一个模块,需要定义一个名字,申请一个共享缓冲区,管程有一套被设计的针对该共享缓冲区的语句(函数),也就是对该共享缓冲区的操作方式描述,管程需要初始化。

3.这些操作方式描述或者函数就是被封装好的信号量机制集合。

4.同一时间只有一个进程使用管程内的数据(互斥的体现,由编译器控制这些进程)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值