进程间通信(IPC)解决和问题和算法

所属分类: 软件教程 / 网络通讯 阅读数: 2025
收藏 0 赞 0 分享
谈谈我们的进程间通信,上次我们谈进程是什么?进程是社会的一个个人,每个都有自己的财产,都有自己的空间,那么人需要通信吗?人需要通信,否则社会不会向前流通,而进程作为一个个实体也会有自己的沟通,否则一个个憋在那能干什么?当然当个笑话听!这里面涉及到三个问题,第一是比较棘手的,怎么把信息从一个进程传给另外一个进程?这个我们这样想,人在社会上生存是不是要交流,你给老外讲中文他能听懂?所以信息必须以一种约定好的规格传递,当然,这只是我这样想。第二点,人在社会中生存,我们都会有竞争,我们都需要抢夺资源,这对于进程来讲也一样的,而且很多时候两者会产生冲突造成一些不可预估的结果,我们想人之间有冲突会打架需要调节,进程不一样的吗?最后一点是进程间的执行有时是需要秩序的,进程A获得数据而进程B打印数据,诸如此类。 所以我们归纳进程间通信(IPC)主要解决三个问题:在进程间传递数据进程间约定秩序协调对于共享数据的互斥访问 topic1: 竞争条件:当两个或多个进程同时访问某个共享区域时(通常会有读写两种情况),最后的运行结果取决于进程的运行时序,这样就产生了竞争条件,很经典的问题就是对文件的读写,一个在读,一个在写,读出来的东西很可能不是你想要的,所有IPC必需要协调好对于共享数据的互斥访问,也就是说,必需要有这样一种机制能够避免这种竞争的发生! 临界区的概念: 既然有竞争,那我们就必须要去协调!如何避免?比如张三和李四都想要某个东西,两个人打起来了,现在怎么办,他们自己肯定不想停下来,都想要这个东西,现在我们作为他们的上级,肯定要说,你们不要打了,让其中一个拿走这个东西,或者更好的建议是,我们在之前就应该分配好,在更高的层次上说,比如张三就应该先拿走这个东西,可是这样对于其他人(其他进程)是不公平的,所以谁先到先得,我们只需要保证,当他拿到这个东西的时候,其他人不能抢夺,拿不走,同样的思想,运用在进程上!这种思想的根本在于对于互斥的实现,一个人在做,另外的人只能看! 不知你懂否,看了这么久,其实我们就是在探讨一个问题,上面的问题3,如何达到互斥访问,但是这样的描述其实还不够精确,因为事实上,进程真正访问共享区域的只有一部分时间而已,为了把互斥做得更细致,我们要往下走!一个进程访问共享区域的那部分代码,我们不妨称之临界区,其实名字无所谓,但是这个考试或者面试经常考,而且很多人误以为是内存或者资源,不要闹了笑话!那我们以这样的视角看,大家都有开车的时候,这么多人,都某个点开出来那么肯定会堵车,那我们只要让大家错开时间段出来就好了啊! 当然这依然是一个很粗的模型,事实上,我们需要提出一个方案(也就是一个算法)解决互斥(如同解决交通堵塞问题一样),这个方案最好应该满足以下的条件: 基本条件,解决互斥 你的方案不应该对cpu速度和这类条件作任何假设,这个很容易理解,cpu的执行在多道程序模型下是具有不可再现性的! 因为临界区互斥,A进程在占用,B进程阻塞,但是C进程不能因为B进程的阻塞阻塞,也就是说不要引起无关人的损伤! A执行,B阻塞,你让我一直等!no!那我还咋混!笑话听。 上面最后两点涉及到后面会谈到的死锁,活锁,饥饿,反正大家记住,系统就是要让每个进程都能安安稳稳的执行! 说白了,比较好的结果就,A执行,B等一会,A走了,B跑,大家走,理想的效果! 下面就这个算法向大家介绍一些比较典型的算法! 这个为了讲清楚,我不想讲的很笼统,首先大家要知道从大的角度看,有两种方式,忙等待与非忙等待! 忙等待和非忙等待不是两种算法,而是两种思路,下面包括实际的解决方法,其实忙等待和非忙等待是很经典的两个模型,不仅在进程通信有这个概念,其实就是事件模型,当某个事件发生的时候,你如何知道?比如你在等某一个人,如果你很急,你可能会不断跑到门口去看,来了没有啊!这就是忙等待,非忙等待就是我在这睡觉,咦,有人敲门了,好,等到了!这个听懂了,很多其他开发你自然理解了! 我们说忙等待,如何实现互斥? 笼统的讲,忙等待实现互斥是通过不断的检测一个状态变量,当这个状态变量为某个值的时候就往下执行!你也可以按你的思路理解,这个状态变量,就像一把锁,你不断去看开了没有,也可以理解为一个信号灯,随你的想法了,但是思想都是一样的! 忙等待的几个算法: first:禁止中断,这种方法你需要知道一个前提,我们需要让进程1执行完后进程2,3,4.。。依次执行,如何实现?我们通过时间中断,每次时间中断后更新进程x的执行时间,到了时间了,对不起了您,收拾东西先回去吧!所以如果你关了中断,这就是开了外挂啊,哥想执行多久就执行多久,谁还能抢夺我的时间,我得资源?可是这样带来了一些问题,第一用户没有权利开关中断,限于内核编程,另外现在cpu多核,关一般关一个核的中断,最后,你掌控了全局的寿命,这不是很安全的做法,要是你小子不把时间给其他人咋办?所以,现在这种方式不是很有用。 second:严格交替法,设置一个变量不妨为x,这种方法在进程1和进程0间讨论,设x最开始为0,进程0不断对x检测看是否为0,进程1不断对x检测看是否为1,这里先叙述到这,下章再续。
更多精彩内容其他人还在看

两台电脑共享LAN快车上网的解决方案

问:单位的电脑使用中国电信的LAN方式上网,操作系统是Windows XP SP2,上网时需要进行虚拟拨号,是没有Modem的那种连接。我的一个同事最近又加了一台电脑,请问,用什么简单的方法连接这两台电脑共同用这个LAN上网?   
收藏 0 赞 0 分享

必学:电脑与网络维护常用技巧

如果你做电脑和网络维护方面的工作,来看看,你会发现这里面的小技巧很多是值得收藏并好好加以利用和学习的    第一条:Windows 2000 连接共享    interner connect share ICS
收藏 0 赞 0 分享

ADSL路由方式的NAT(端口映射)

NAT是网络地址翻译就是把公网IP翻译成私有地址, 又叫端口映射或端口转发. 采用路由方式是指ADSL拥有一个动态或固定的公网IP,ADSL直接接在HUB或交换机上,所有的电脑共享上网。这时ADSL的外部地址只有一个,比如61.177.*.*
收藏 0 赞 0 分享

防火墙配置不当导致网络无法共享

最近某小型局域网内的工作站无法通过服务器连接Internet,服务器可以访问Internet,管理员在进行自查无果后向笔者求救,笔者赶到后,首先了解了一下情况,此局域网所有机器操作系统均为Windows XP,通过服务器的Internet连接共
收藏 0 赞 0 分享

net命令使局域网文件同步更新

现在大家都希望有个同步软件可以达到网络目录或者文件的更新来减少自己的工作量,现在网络上也有很多软件可以达到这个目的,象同步专家之类的,但是这些软件需要安装服务端和客户端,客户端要常驻才能使用,并且占用了一定的资源。 
收藏 0 赞 0 分享

在网吧中如何使用双ADSL线路

现在网吧中使用ADSL作为上网线路的越来越多,一是因为ADSL比较便宜,另外是因为ADSL安装方便。但是ADSL的带宽有限,而网吧能否提供给用户高速稳定的上网线路,是能够留住顾客的关键。按照经验,如果是一条512K的ADSL线路,有10人同时
收藏 0 赞 0 分享

关于网络拥挤问题及对应处理办法

网络拥挤现象的基本症状是网络的某一部分或整个网络性能低劣。在高峰期,可能这只是暂现象。在其他情况下,这种现象可能逐渐漫延持续几周或几个月的时间,直到最后使网络性能降低到无法容忍的水平。   引起网络拥挤现象的原因有多
收藏 0 赞 0 分享

Internet连接共享组网实例技巧

ICS(Internet连接共享)是Windows 2000内置的一种网络连接共享服务,它可以使家庭网络或小型办公室网络用户非常容易的连接到Internet。    要使用ICS,有几点需要注意:    (1)启用ICS的计算机必须具有两个网络
收藏 0 赞 0 分享

加快Windows 2000访问网上邻居的速度

在部分机器的Windows 2000中打开“邻近的计算机”,常常会等上几十秒的时间,让人无法忍受。仔细分析会发现,在找到的计算机当中,包括“打印机”和“任务计划”两项。通过“网上邻居”浏览计算机时,Windows 2000会先搜索
收藏 0 赞 0 分享

浅谈Win 98中一块网卡实现两个网段的通信

目前,鉴于我国中小学信息技术教材内容的设置,绝大部分中小学校计算机安装的依然是Windows 98。笔者所在学校也一样,且教师办公用机和学生机的IP地址分属两个网段(办公用机在10.10.8.?网段,学生机在192.168.0.?网段)。办公
收藏 0 赞 0 分享
查看更多