顺序程序和并发程序特征:
顺序程序特征:
1.顺序性
2.封闭性(运行环境封闭性)
3.确定性
4.可再现性
并发程序特征:
1.共享性
2.并发性
3.随机性
进程互斥:
由于进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程这种关系为进程的互斥。
系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。
在进程中涉及到互斥资源的程序段叫临界区。
进程同步:
进程同步指的是多个进程需要互相配合共同完成一项任务。
进程间通信的目的:
数据传输:一个进程需要将它的数据发送给另一个进程。
资源共享:多个进程之间共享同样的资源。
通知事件:一个进程需要向另一个过一组进程发送消息,通知它(它们)发生了某种事件(如进程的终止时要通知父进程)。
进程控制: 有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截一个进程的所有陷入和异常,并且能够及时知道它的状态改变。
进程间通信分类:
文件
文件锁
管道(pipe)和有名管道(FIFO)
信号(signal)
消息队列
共享内存
信号量
互斥量
条件变量
读写锁
套接字
System V IPC & POSIC IPC
system V IPC:
system V 消息队列
system V 共享内存
system V 信号量
POSIX IPC:
消息队列
共享内存
信号量
互斥量
条件变量
读写锁
IPC对象的持续性:
随进程持续:一直存在知道打开的最后一个进程结束。(如pipe和FIFO)
随内核持续:一直持续直到内核自举或显示删除。(如system V消息队列,共享内存,信号量)
随文件系统持续:一直存在直到显示删除,即使内核自举还存在。(POSIX消息队列、共享内存、信号量如果是使用映射文件来实现)。
死锁:
死锁是指多个进程之间相互等待对方的资源,而在得到对方资源之前又不释放自己的资源,这样,造成循环等待的一种现象。如果所有进程都在等待一个不可能发生的事情,则进程就死锁了。
死锁产生的必要条件:
互斥条件:
进程对资源进行排它性使用,即在一段时间内某资源仅为一个进程所占用。
请求和保持条件:
当进程已获得的资源在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
环路等待条件:
各个进程组成封闭的环形链,每个进程都等待下一个进程所占用的资源。
防止死锁的办法:
资源一次性分配(破坏请求和保持条件)
可剥夺资源:破坏不可剥夺条件
资源有序分配方法:(破坏循环等待条件)
死锁避免:
预防死锁的几种策略,会严重的损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得比较满意的系统性能。
由于在避免死锁的策略中,允许进程动态的申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁的算法是银行家算法。
信号量:
信号量和P、V原语由迪杰斯特拉提出。
信号量:
互斥:P、V在同一个进程中。
同步:P、V在不同进程中。
信号量及其含义:
s>0:s表示可用资源的个数
s=0:表示无可用资源,无等待进程。
s<0:|s|表示等待队列中进程个数。