读书人

有一个关于操作系统的有关问题不知哪里

发布时间: 2012-02-19 19:43:38 作者: rapoo

有一个关于操作系统的问题不知哪里问。进程等待的时候是否什么都不做?
我现在学的一本操作系统教材上有一个例子:

有一个车辆监视和报告系统由两个进程组成,一个进程监视马路上的车辆,有车辆通过时,将某个变量的值增加1,另一个进程定期读取变量的值,打印出来,然后将变量清0。

由于变量为两个进程共享,所以两者要互斥地进入修改变量的代码区。假如报告进程正在打印,那么监视进程必须等待。

现在我的问题是:报告进程在打印的过程中,监视进程在等待,这时监视进程能做什么?是否什么都不做?如果这时有车辆通过,监视进程也不递增了,是不是?还是说,它可以把这些递增操作“积压”起来,到等待结束时一并执行?

请教!

[解决办法]
while 有车辆通过 修改变量
sendmessageto 监视进程

监视进程getmessage
判断 变量是否为1
如果是 sendmessageto 打印进程
否则 不作处理

打印进程 接受监视进程发来的消息
判断变量是否为1
如果是 打印 并将变量置0

重复上一步

[解决办法]
在实际应用中,监视进程肯定连接有摄像头,摄像头自己就有处理功能,肯定是时时刻刻在采集数据的,而在只有一个处理部件的cpu上,如果打印进程在进行,监视进程就处于暂停状态了,等到打印进程运行完毕,监视进程重新运行,读取摄像头累计的数据就可以了。
[解决办法]
按照我的理解,是这样:
每个线程都按照各自的正常流程运行,当到达临界区(或互斥锁)时。首先检测是否可进入。
如果是锁状态,
那么该线程就会在临界区边缘被挂起,等待下一次线程被调度再继续这一步。
所以当你的报告线程、被调度,且已经进入临界区时,监视线程应该是被挂起的。也可说处于等待状态,不会再去监视什么了。
也就是是说。报告线程从进入临界区,到退出临界区所用的时间,必须远远小于,一个车俩通过监视区所用的时间。否则就有可能漏检。(实际上,如果仅是读取一下数据,连毫秒级的时间估计都用不了,所以没什么可担心的。)
简而言之,临界区内的代码尽最大可能让他短些。

读书人网 >C++

热点推荐