操作系统复习(一)

1.进程堵塞的原因 (不包括时间片轮转 等待时间片属于就绪态)

等待IO
等待同步锁
Sleep

2.进程间通信的方法 (IPC 进程间通信)

1)管道(无名管道)

a.半双工(一个方向传输数据)
b.创建两个文件描述符, 一个写,一个读
c.两个文件并不是真正的文件,只存在于内存当中
d.只能用于父子和兄弟之间的文件读取
e.关闭管道将两个文件描述符关闭即可

2)FIFO(命名管道)

a.FIFO可以在无关的进程之间交换数据,与无名管道不同
b.FIFO有路径名与之关联,它以一种特殊设备文件形式存在于文件系统中
c.图示:

3)消息队列

a.消息的链接表,存放于内核中,一个消息队列由队列标识符(队列ID)来标识。
b.消息队列是面向记录的,其中的消息具有特定的格式和特定的优先级
c.消息队列独立于发送与接收进程,进程终止时,消息队列不会被销毁
d.可支持随机查询,不一定是先进先出,也可以按类型查询

4)信号量

a.信号量是一个计数器,用于实现进程间的互斥与同步,而不是用于存储进程间的通信数据
b.只能进行两种操作,等待和发送信号 P(S) V(S)
P操作:
S>0 S-1 此时数据表示可用资源的数目
S=0 挂起该进程 S-1 表示等待进程的数目
V操作:
S>0 S+1 可用资源的数目
S=0 S+1
S<0 从进程等待队列中调一进程 S+1 表示等待进程的数目

5)共享内存

a.共享内存是最快的IPC 因为进程是直接对内存进行读取
b.多个进程可以同步操作,多以要支持同步
c.信号量与共享内存结合使用,信号量用来同步对共享内存的访问

6)总结

a.管道: 速度慢, 容量有限,只有父子兄弟能通信
b.FIFO:任何进程都能通信,但是速度慢
c.消息队列:容量受到系统限制,注意第一次读的时候,上一次没有销毁移除的数据
d.信号量: 不能传递复杂消息,只能用来同步
e.共享内存: 容易控制容量,速度快,要注意同步问题

3.死锁产生的原因

1)竞争资源引发死锁

a.可剥夺资源和不可剥夺资源
b.竞争不可剥夺资源,多个进程都占有部分,在等待其他进程使用完后释放资源,陷入循环等待

2)进程推进顺序不当引发死锁

4.产生死锁的四个条件

1) 互斥条件: 得到的资源不允许其他进程访问
2) 请求和保持条件: 对其他资源请求,又保持自己已获得的的资源不释放
3) 不可剥夺条件: 资源未使用完成,系统不能剥夺
4) 循环等待

5.处理死锁的方法

1) 预防: 设置限制条件,破坏死锁产生的必要条件
2) 避免: 资源分配过程中,避免进入不安全状态
3) 检测: 检测到死锁,解除
4) 解除

猜你喜欢

转载自blog.csdn.net/weixin_39265000/article/details/81052344