您的位置:首页 > 其它

操作系统IPC

2011-10-13 13:13 87 查看
最近学习操作系统,我在课堂上基本上没怎么认真的听老师讲课,只是明白她讲的的核心思想,但是对于老师讲的具体例子我没听懂,原因不想在此陈述。

我想说一下我对对IPC(Interprocess Communication)的一点总结。

我们在学习新事物的时候,我总想先知道为啥有这个东西。为啥有IPC呢?我的理解是很大原因是由于进程之间需要共享共享资源,比如共享某个全局变量,并且通过对共享资源的读写来进行通信(消息队列不是这样的)。

由于计算机在执行程序时是按照每条指令来执行的,而不是按照每条高级程序语言的语句来执行的,所以在进程间通信时就有可能会出现问题,举一个极端的例子就是死锁。指令和语句的不同是指令是原子性操作,不可分割的,中断时发生在一条指令执行完,所以一条指令在执行的过程中是不会有中断的;而语句是由n条指令组成的,所以语句发生中断是很正常的,其实这也是进程间通信问题的根本原因。

解释一个名词--竞争条件。两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序。(声明一下,本文的名词解释都是参考《Modern Operating Systems》这本书)对于竞争条件的理解最好是举个例子。

竞争条件举例。现在有一个缓冲区(Buffer),这个缓冲区的作用是存放将要被打印的文件,缓冲区的结构可以看成为一个队列,队列中存放打印文件的地方叫槽(英文slot),槽是按照其标号(1、2、3。。。)排列。由于这是一个共享的缓冲区(因为任何想要打印文件的进程都可以向这个缓冲区中存放要打印的文件),所以要设置两个类似于全局变量的变量in和out。in表示缓冲区中下一个空闲的槽,out表示下一个要打印的文件。比如in=7表示7号槽是空的,out=3表示该打印3号槽的文件。每一个想要打印文件的进程,都要对缓冲区执行三个操作1)、读出in的值,目的是找到空槽的位置;2)、此进程将它要打印的文件写入1)中找到的空槽中;3)、把in的值加一。现在有两个进程pro1和pro2,进程pro1先来,读出此时的in值,假如说in=6,进程pro1会在自己的临时变量(如temp1)中保存in=6这个值。这时进程pro2来了,中断发生了。调度器让进程pro2运行,pro2也是先读出in,读出的是6,然后pro2把它要打印的文件放到标号为6的这个槽中,最后pro2对in进行加一操作,现在in变成7。pro2运行完毕离开。进程调度器现在让pro1接着运行,由于pro1它读出的in==6,所以它也要把它要打印的文件放到标号为6的这个槽中,因此pro1的文件把pro2的文件给覆盖了。问题就来了,pro2的文件永远也不会被打印。

这就是竞争条件的一个例子。这对我们理解IPC问题的发生有很大的帮助作用。未完待续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: