一、进程间通信
进程间通信(Inter-Process Communition,IPC)就是在进程之间的信息相互传递。现代操作系统一般都是多道程序技术,同时有多个进程运行,这些正在的进程有两种关系:一是相互独立,二是相互关联。
问题:
1、进程之间如何进行通信,也就是如何传递信息
2、当两个或者多个进程访问共享资源的时候怎么保证可以进程顺利运行。
3、当进程之间存在某种依赖关系的时候,如何确保进程的运行顺序,这个问题是进程间的同步问题。
1、进程间通信方式
2、进程的互斥
备注:
对共享内存的访问或共享文件的访问,可能会导致竞争状态的出现。我们把完成这类事情的的那段程序称为“临界区”,把需要互斥访问的共享资源称为“临界资源”。
问题:如何避免进程的互斥
1、基于关闭中断的方法:当一个进程进入它的临界区的时候,先把中断关闭,然后再去执行临界区的代码,关闭中断之后就不能实现进程之间的切换。这里所说的中断主要是指I/O中断,时钟中断。
缺点:这种方法可能会在临界区陷入死循环,也可能在临界区的时候做大量计算。所以影响系统的稳定性、可靠性和效率。
2、基于繁忙等待的方法
①加锁标志位:设置一个共享变量lock,该变量可以被各个进程访问。刚开始时lock = 0,当一个进程想进入临界区的时候,先查看lock是否为0,如果是0就进入临界区,否则等待。当进入临界区之后,就把lock设置为1。当退出临界区的时候再把lock设置为0。
②强制轮流法:每个进程按照轮流的顺序依次进入临界区,对于每一个进程只有轮到它的时候才进入临界区。设置一个共享变量turn,用来表明哪一个进程可以进入临界区。如果turn = 0,表明进程P0可以进入;如果turn = 1,表明P1可以进入。另外,当进程退出临界区的时候,再改变turn的值,把权利交给下一个进程。
③Peterson方法