请教Xtang先生有关进程竞争临界资源的问题,请给予解答。谢谢

请问一台主机(A)上的两个相互独立的进程,分别接收来自另一台主机(B)上的两个客户进程的服务请求,请问主机A上的这两个同时运行的进程会不会竞争临界资源,这时,主机A上的网卡是不是临界资源?
小弟对此不很清楚,望Xtang先生给予指点,非常感谢。

每个一进程都拥有自己的资源,如果你没有指定让它们之间共享某些资源,如共享内存。那么就没有什么临界资源的问题。也就是说不需要用到什么同步的机制。

比方你在一台机器上运行了TELNET的同时也运行了FTP,它们之间是没有什么竞争临界资源的问题的。

网卡是一个全局的资源,它会处理好不同进程的请求。不需要你作过多的考虑。当然它的能力是有限的。如果负荷太大可能会掉包或超时等。

你好,谢谢你的回复。不过我还想再问一下,你说一台机器上运行了TELNET的同时也运行了FTP,那么这两个进程都会用到网卡来传输数据,那么他们两个之间会不会竞争网卡这个资源呢?比如说TELNET的优先级比FTP的优先级高,那么当FTP在通过网卡传输数据时,TELNET进程就不能使用网卡这个资源了吧?

我明白你的“竞争”的意思了。分情况:

照你的意思举个例子简单来说吧,telnet和ftp进程都向网卡(驱动)发送数据包。telnet一秒70个包,优先级为20(高);ftp一秒30个包,优先级为10(低)。

当网卡处理能力>=100/秒时,两个进程共用网卡资源,网卡有能力满足他们的请求。没有竞争的情况发生。可能是你发10包,我发10包这样循环着。也就是我们所谓的共产主义社会的最终形态,什么都有,无所谓竞争了,只能说是共用。

当网卡能力不足的时候,10/秒,自然就是优先级高的telnet先把包发出去。ftp进程会堵塞等待网卡资源。你所谓的“竞争”就发生了。telnet先富起来,ftp下岗等待再就业。

这样的硬件资源的竞争也可以引申到其它资源。也正由于在嵌入式世界是资源常是比较有限的。QNX才会被设计成基于优先级的,可抢占的实时操作系统。保证高优先级的进程的运行。

你好,谢谢你的回复

我还想问另外一个问题,希望能够给予解答。

因为实验的需求,要求一个程序具有较高的实时性。对此,这个程序采用了基于优先级的进程调度方式,满足了实时性的要求。我想问一下,如果现在在这个主机上再增加一个进程,那么,增加的这个进程的运行,会不会对原来进程的运行有影响?会不会影响原来进程的实时性?

影响是有可能的!

实时性是指当你需要响应时,系统能在多少时间内满足你的请求。这个很重要,很多设备的超时是不可接受的。

抢占式的实时操作系统本身就不是一个“公平”的操作系统。
在资源不足的情况下,影响是肯定的。
一般的“公平”的操作系统是让大家都吃不饱。
基于优先级的操作系统,可以通过不同进程间优先级的设置,来设定进程之间对资源使用的关系。
高优先级的进程先得到满足,这样自然会影响低优先级进程的运行。
如果是相同优先级,那就平分资源了。
这里你需要了解的是,QNX不能保证每个人都吃饱,不能保证每个进程都不受影响。很简单,如当CPU性能不足时。但是QNX可以保证重要的进程能优先运行。如一个扫雷设备,当然是保证扫雷进程优先运行,再谈如GPS定位等的问题吧!

从你的描述,感觉你对实时性有一些误解。实时性是一个系统的特点。不能说某进程实时性的高低。按道理来讲,系统里所有进程拥有的实时性都是一样的。有资源的时候,系统就会马上运行它们。 资源不足的时候,我们就要按优先级来出牌了。
这只是优先级不同,和实时性无关。

假设你是一个国王吧,那么QNX是一个能力很强的执行官,而不是能满足你国民所有需要的上帝。

水平有限,写太多,不知是否解释的对了。请大家多多指正。

非常感谢你的解答,使我对问题越来越清楚了。
不过,我还是想再继续问一下。还是上面的问题。我的意思是,由于实验的要求,要求程序中的各个进程必须在1ms内完成各自的任务。目前,这个程序的各个进程在完成各自的任务所花费的时间都小于1ms,满足了实验的要求。我想问的是,如果我在主机上再加入一个进程,用于和另一台主机的一个进程进行网络通信,那么,新加入的进程的运行是否对原有进程的运行造成影响?是否会使原有进程的运行时间变长呢?
如果对原有进程的运行有所影响,具体影响体现在哪些方面呢?希望再次给予解答,非常感谢哦。

可能会有影响。

会不会造成影响,就要看实际情况。

具体影响,就要看你新加进来的进程用得最多的资源是什么:是CPU,是网络带宽,还是内存,还是什么东西。然后你再看看,是否会超过整个系统的能力从而对某些进程造成影响。

又或者你就先加吧,等有情况再来看看是为什么。