操作系统对CPU的控制权
感谢《Operating Systems : Three Easy Pieces》这本书,我终于看透了操作系统是如何控制CPU的。很久以来,我都有一个疑惑:操作系统是代码,应用程序也是代码,同为代码,凭什么操作系统对CPU有控制权,这种控制是如何实现的。
第一个问题,凭什么操作系统有控制权。当资源有限的时候,大伙对资源的使用,必定会出现分歧。如果没有人控制,就没有秩序。有的人抓住资源不放,有的人等到花儿谢了也轮不上。各自都只给各自着想,公平无从谈起,更分不清个轻重缓急。所以,我们需要一个管理者,让资源的使用更加高效,更加公平,更加灵活。
第二个问题,操作系统如何保证对CPU的控制,如何阻止不法分子钻空子。下面大家会看到,所谓的控制权,就是看CPU跑的是谁的代码,如果跑的是应用程序的代码,应用程序就决定CPU做什么,如果跑的是操作系统的代码,操作系统就可以选择,下一步把CPU交给谁。
第一招,叫系统调用。大概意思就是,应用程序,你用吧,我让你用,但你不可能只用CPU吧,如果你需要内存,文件,网络等资源,你就得调用我。如果你调用了我,CPU就跑了我的代码,我就可以把控制权拿下。可这一招,有漏洞,有的程序,对CPU的需求特别大,对其他资源的需求少,所以它就可能长时间占用CPU。
第二招,时钟中断。就像大圣打妖怪,打不过,就找菩萨,找老君。操作系统也一样,权利再大,它本身也是代码,遇到解决不了的问题,就求救硬件。时钟中断就是一个例子。你的主板里,会有一个时钟,滴滴答答的走着,每隔一段时间,它就会给CPU发信号。CPU收到信号,就会执行预先设定好的操作系统的代码,一旦这些代码被执行了,操作系统就有控制权了。
这两招合在一起,操作系统就实现了对CPU的控制。后来我体会到,更多的权利其实意味着更多的责任和义务,操作系统虽然会强行执行自己的代码,但它做的事,都是为了别人,让大家都有使用资源的权利。利人不利己,所以大家信任他。