操作系统基础点(一)

进程,线程,协程的对比和选择

进程间的五种通信方式

管道

管道

  1. 是半双工的,有固定的读端和写端
  2. 只用于亲缘关系间的通信(父子/兄弟进程)
  3. 只存在内存中

 FIFO命名管道

类似于在进程中使用文件来传输数据,在数据读出时候同时清空数据,并且先进先出

  1. 可以在无关进程之间通信
  2. 有路径名与之关联,以一种特殊设备文件形式存在于文件系统中,但是FIFO中数据存放在内存中

消息队列

是消息链表,存放在内核中,一个消息队列有一个队列ID来标识

  1. 有特定格式和优先级
  2. 消息队列独立于进程,里面的内容不会被删除
  3. 可以实现随机查询,读取方式可以先进先出,也可以按类型读取 

信号量

它是一个计数器,信号量用于实现进程间的互斥和同步,不是用于存储进程间的通信数据。

  1. 信号量用于进程同步,需要进程间传递数据要结合共享内存
  2. 信号量基于操作系统的PV操作(请求和释放资源),程序对信号量的操作都是原子操作
  3. 支持信号量组

共享内存

指两个或者多个进程共享一个给定的存储区

  1. 最快的进程间的通信方式,进程直接对内存进行读取
  2. 多进程同时操作,需要进行同步
  3. 信号量和共享内存常结合使用,信号量用于同步对共享内存的访问

死锁

死锁是指一组进程中进程都占有无法释放的资源,但是因为互相申请别其他进程占用的无法释放的资源而造成的死锁

死锁的四个条件

  1. 互斥条件:资源共享,只能一个进程使用
  2. 请求与保持条件:已经获得资源的进程,可以再次申请新的资源
  3. 非剥夺条件:已经获得资源的进程,不能强制剥夺该进程资源
  4. 循环等待:形成环路,每个进程都在等待对应资源的释放

死锁可能性的最根本原因:

  1. 是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环;
  2. 默认的锁申请操作是阻塞的。

破坏死锁的方法:

  1. 破坏请求保持条件和非剥夺条件,获取锁设置超时时间,超时就释放,尽量避免锁不能释放的问题
  2.  破坏死循环等待条件,设置超时时间

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值