个人小爱好:Operating System:three easy pieces---第6章第4节_担心并发问题?

担心并发问题?

你们中的一些仔细又善于思考的读者也许会想到:“当在执行一个系统调用或者处理着一个中断的同时,另一个中断又出现了的情况会发生什么事情?这样子在内核中处理起来会更加麻烦吗?”对的,这是个好问题,我们对你又更加抱有期待了!

答案是肯定的,操作系统确实需要考虑到当处于一个中断处理中或者系统调用执行中,另外一个中断发生的情况。事实上,这也是这本书第二部分的将要讨论的内容:并发;我们将会把细节的讨论推到那一部分。

为了满足你们的好奇心,我们将大概讲解一下操作系统处理这些复杂情况的基础。其中一个简单的方法是:操作系统也许会在中断处理时禁止中断(disable interrupts);这样确保了在一个中断被处理时,不会有其他的中断被传递到CPU。当然,操作系统必须对此(关闭中断)十分小心,因为禁止中断过长时间会造成中断的丢失(没有被及时处理,被后面的中断覆盖掉),这样显然是十分糟糕的。

操作系统通常会建立许多复杂的锁定方案(locking schemes ,不清楚是否这样翻译?因为我起初学的是嵌入式操作系统,虽然两者同原理,但是有些名词可能不同)以保护内部数据的并发访问。这使得多个活动能够在内核中同时进行,且在多核处理器中尤其有用。正如我们将在本书关于并发的下篇了解到的,这种锁可能是复杂的并且会导致各种有趣和难以发现的漏洞。

旁注:上下文切换需要消耗多少时间?

你们也许会问道一个本质的问题:上下切换,或者系统调用这类操作会消耗多长时间?对于你们中的那些好奇的人,有个叫lmbench的工具,它可以精确测量这个数据,以及其他一些与性能相关的信息。

随着时间的推移,这个结果有了很大的提升,也大致是跟着处理起性能的发展。比如,在1996年时,在一台200MHzP6CPU上运行Linux1.3.37版本时,系统调用消耗约4微妙,上下文切换大约6微妙。而,现在的系统有着级数级别的提升,在2-3GHz的处理起中消耗只有亚微妙级。

但应该注意到,不是所有的系统性能都跟着CPU性能的提升而提升,根据Ousterhout的观察,许多操早系统指令都是内存密集型的,但是内存带宽并没有随着处理器速度提升而有显著的提高。因此,视你的工作负荷而定,用最新最强的处理起也许并不会如你所期望般的提高速度!

 

 

原文地址:https://www.cnblogs.com/CXianRen/p/10484976.html