日期:2014-05-16  浏览次数:20862 次

熬之滴水成石:最想深入了解的内容--windows内核机制(1)
                                     53--关于OS
本来接着是要写HTML的,但是一次偶遇让我改变了想法。近段时间,我遇到了一个技术牛人褚老大,他跟我提出一些关于OS的事情,那个时候我才发现自己的深入是那么的肤浅,关于windows编程,我曾经还写过几个原理。在他深入的提问中,我发现其实好多东西我都已经忘记,或者我曾经从事的开发工作只是这浩瀚内容中一个简短的篇幅而已。所以我决定将OS好好的温习和整理一遍,所以关于HTML的搁置其后再写,因为此刻我对于windows内核的了解欲望是那么那么的强烈。
windows操作系统和其它操作系统从本质上来说其实也是一种软件,其特殊性就在于它是随硬件配置而生的,而其它的应用软件都是依附操作系统而生长的。可以说操作系统应该是专门管理硬件资源的软件,硬件是干什么的,应该只是提供了数据计算和数据存储,而操作系统则是控制着这些功能。这些功能随后衍生出许多我们熟悉的字眼:进程、设备、线程等等的概念。OS相当于我们编码中运用到的面向对象的知识:抽象!它高度的概括和浓缩了许多功能,这让用户没有感觉在直觉操作硬件。实际上所有的应用程序在OS上都是共享着硬件资源,操作系统也分为多个种类,对我而言目前接触过的OS也就是Windows和liunx,然而Windows还是我接触最多,使用最多的OS。所以OS的说起还是从Windows开始吧!
在学操作系统时,我们都清楚操作系统最为重要的就是存储资源和计算资源,CPU是最为重要的计算核心,目前硬件技术的发展都是走多核CPU的套路了。如果单从OS角度来看,有多个CPU实际上就可以执行多个任务,所以作为操作系统无非就是在调度这些任务,让多个CPU的资源都能够利用起来,避免出现竞争或者是闲置的时候。我们知道任务之所以能够切换,任务的状态从一种状态到另一种状态都是因为硬件提供了一种叫中断的功能。这种功能能够让操作系统能够按照某种算法(eg:银行家算法)暂停当时正在之行的任务,并选择一个新的任务从而实现了任务切换。因此多个任务很有可能在一个CPU中被轮流的之行,操作系统可以根据实际需求设定相应的调度算法。
再说说存储资源,我们知道通常会包括内存,但也考虑有外存,外存其实就是通过标准的I/O来管理的,而内存是通过CPU来管理的,具体的说是通过系统总线来访问。内存是CPU在执行一个任务时必须要用到的资源,虽然CPU其实是有寄存能力的,但那只是一个仅仅计算的地方,数据来源还是需要内存来提供。在OS中,每个任务都有独立的内存空间,这样可以解决任务之间不干扰的问题。假设所有任务的内存需求加起来的总量操作了物理内存,那么OS肯定会让一些任务stop,或者将一些任务转移到磁盘上去,用时间换空间的办法来争取内部运作,所以当你配置小内存的PC在运行一些耗内存的应用时,你通常会感到机器运行缓慢无比,其实它正是在做这个事情。当然这个时候,有个内容我们必须要知道了,那就是虚拟内存。虚拟内存的映射就是为内存不足时做数据的转换作用,它主要是靠OS来运作的。
我们知道CPU访问设备是通过寄存器,当然不同的系统有不同的方式,但是大体上原理是想通的。那就是,设备的寄存器实际上是一个地址空间,CPU通过I/O端口来访问。I/O端口的分配跟软件和硬件都有关,其实就跟我们写通讯程序是一样,不同的硬件都有不同的端口。中断机制保证了硬件的工作状态让CPU知道,中断是有编号的,在操作系统中则是相当于全局编号的概念。其实操作系统正是定义了一个这样的框架,来容纳和支持各种各样的I/O设备。I/O设备的驱动程序会加载到操作系统中,以便OS对硬件设备的控制能力支持数据传输的支持。另外OS提供应用程序的是一个运营的环境,在这个环境中应用程序只需跟OS打交道而不需要跟硬件打交道。所以对于应用程序在OS衍生出来的概念便是进程和线程。每个任务都应该偶自己的执行环境。这里面就涉及到更多操作系统的内核的东东了.........
                                                    (未完待续.......)