进程间通信(IPC)解决和问题和算法
所属分类:
软件教程 / 网络通讯
阅读数:
1992
收藏 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,这里先叙述到这,下章再续。
局域网合理布线的六大规则
网络拓扑结构凌乱、布线过程中偷工减料、设备摆放不合理,别小看这些网络布线时的疏忽大意、有章不循,它们就是一颗颗定时炸弹,随时都会发作,随时都会毁掉你的网络、你的工作。 亡羊补牢?为时已晚,这些问题需要我们提前避免。 如同大厦
收藏 0赞 0分享
技巧:对无线局域网进行高效故障诊断
基于IEEE 802.11标准的WLAN逐渐进入主流网络,使得针对无线网络的故障诊断和安全保障变得与有线网络一样重要。 支持多种模式的分析仪可以扫描所有802.11频段,包括2 .4GHz和5GHz频段中的所有通道,并以图形化的形式显示,从这些图表中
收藏 0赞 0分享
巧用WinXP中的“网桥”功能
当前局域网已经相当普及,经常会遇到以下的状况: 局域网中新增了一台客户机,但集线器端口已接满,为一台电脑增加集线器太不合算。怎么办?Windows XP的“网桥”功能就派上用场了,不过需要一个前提条件,就是局域网中必须有一台安装了双
收藏 0赞 0分享
设置防火墙实现禁用QQ,MSN,联众
现在要求禁止内网用户使用QQ、联众等聊天和网游软件的需求逐渐增多,不久前售后工程师就处理了一项此类业务。工程师在处理过程中发现了一些解决方法,现在进行一下总结,希
收藏 0赞 0分享
XP中网络怪异事件解决方法
未接网线却显示已启用连接 问:Windows XP系统正确识别了新安装的网卡,并安装了驱动程序,在没有连接网线的情况下,网络连接中的“本地连接”显示已启用,并且处于“连接状态”。在接上网线并设置了相应的参数后,进行网络访问,IE显示“无
收藏 0赞 0分享
为您支招 局域网内如何防止ARP欺骗
对于ARP欺骗,提出几点加强安全防范的措施。环境是主机或者网关是基于Linux/BSD的。一、理论前提 本着“不冤枉好人,不放过一个坏人的原则”,先说说我的一些想法和理
收藏 0赞 0分享
网管,请别随意关闭默认共享!
不知道在什么时候,关闭Windows系统中的C$、D$、IPC$等默认共享成为了最基本的安全防范措施,惊弓之鸟们纷纷响应号召,向默认共享宣战。然而存在是有理由的,默认共享的存在同样如此。你可知道盲目地关闭这些默认共享会带来某些非常严重的危害吗
收藏 0赞 0分享
网络应用技巧 用注册表强化网上邻居
每次与内网用户进行信息共享传输时,“网上邻居”就会被派上用场;当然,在默认状态下系统的“网上邻居”功能十分有限,如果你想与内网朋友更高效、更安全地进行共享传输时,就必须想方设法挖掘“网上邻居”自身的潜能。这不,本文为了帮助各位网
收藏 0赞 0分享
教你在局域网中映射网络驱动器的使用
一、为每个学生机建立“映射网络驱动器”
环境为Windows 98对等网。教师机名为“Teacher”,硬盘分成四个区为C、D、E、F;学生机有60台,计算机名为1~60,硬盘分成三个分区C、D、E。
首先在教师机的F盘上建立60个文件夹,文件夹的名字
收藏 0赞 0分享
节约成本 详解网络打印机安装方法
现在很多单位为了节约成本,普遍采取共享使用网络打印机的方法,正巧笔者的单位也要求办公室和其他科室共用办公室的打印机,下面我们一起来看看如何添加网络打印机。 首先,在办公室的计算机上,安装好打印机的驱动,并且把打印机设为共享,
收藏 0赞 0分享
查看更多