当前位置:C++技术网 > 精选软件 > Windows核心编程入门:2 什么是操作系统内核

Windows核心编程入门:2 什么是操作系统内核

更新时间:2016-04-10 21:27:11浏览次数:1+次

    在文章《Windows核心编程基础开篇:计算机体系结构分层入门讲解》中,已经从计算机体系结构范围作了一个详细的概要性讲解,让对于计算机体系结构不太清楚的非计算机专业人士,有一个基本的了解。
    我想作为读者的你,对于操作系统不会陌生,至少对于Windows操作系统是熟悉的。然而对于操作系统内核是什么玩意,这个就不是很多人都知道的东西了。这个专业的系统程序员玩的东西,不过作为旁观者的我们,可以简单了解下。没吃过猪肉总要见到猪跑吧。
    操作系统内核是操作系统的核心,是支撑操作系统运作的关键。一个操作系统好不好,主要看内核怎么样。内核就和汽车的发动机一样,可以驱动整个系统高效的运转的核心部件。所以,你也就很自然理解,操作系统内核并不是操作系统的全部。你只有一个汽车的发动机,就能像普通汽车一样奔跑吗?不行的。你得有车轮吧,你的要方向盘吧等等。在听到操作系统内核不等于操作系统,很多人会很诧异。现在用汽车来比喻,应该也不难理解了吧。你只有发动机而已哦。
    不过,既然内核是操作系统的核心,我们研究清楚了内核,那也基本拿下了操作系统了。其他各种功能组件,也都是辅助实现各种功能的基本工具。如果没有内核,这一切都是空谈。如果汽车没有发动机,轮子再贵,外观再漂亮,也只是摆设。所以内核的地位可想而知,没有内核,系统跑不起来,那还玩什么。
    我们这是从概念上的理解,先有一个基本的定位。在计算机体系结构分层入门文章中,我们知道,操作系统内核是介于应用层和硬件层之间。硬件抽象层是介于系统和硬件之间的。操作系统的职责就是包装硬件的操作,让硬件操作起来更加方便。我们的电脑都是精密机器,都是大规模集成电路,这个不像收音机还有个按钮可以人工自己按,直接去操作,然而集成电路,你如何去操作。人工无法直接操作的。
    然而我们要操作这些硬件,就是要通过电路来控制。因为电脑是硬件,如果没有操作系统,我们可以直接写代码来操作硬件,直接给硬件发送命令,驱使硬件运动起来。直接操作硬件,要知道硬件的运作原理,各种特性,而且要写很多代码才能让硬件运作起来,然后还要写很多代码做高级功能。如果什么都是从直接控制硬件开始做,一个功能也做得不能够有多发杂,因为工作量实在太大,而且难度太高了,没有几个人会。
    所以,操作系统就来了。这些硬件操作操作系统全包了,操作系统把硬件都打包起来,你要操作硬件,只要跟系统说一下就行了。系统很熟悉如何操作硬件,你只要告诉他要做什么就可以了。这样我们就不用直接操作硬件了,这样我们就轻松了,也就可以做更加复杂的功能了。我们告诉系统要操作哪些硬件的方式就是调用系统提供的API了。

    下面是一个示意图:

应用程序只能通过操作系统操作硬件,也只需要通过操作系统操作硬件

【应用程序只能通过操作系统操作硬件,也只需要通过操作系统操作硬件】
    操作硬件管理硬件的这部分程序是最基本的程序了,而且无时无刻在运行着,这就是操作系统内核。那么内核程序的代码就是内核代码。内核编程就是写这些内核代码。我们这里讲的是核心编程,只是调用系统提供的API函数,只是这些函数是操作内核中的一些对象的,是开始接触内核的知识了,然而还是在应用程序层中。
    对于硬件的基本管理,还有一些基本的功能,就构成了操作系统的内核。操作系统内核构建了这么一层基本的硬件操作支持,可以让你轻松的操作硬件,而不需要直接操作硬件了。而操作系统内核也会通过几层的包装,让每一层都可以做一部分工作,从而降低操作硬件的难度,这个包括虚拟驱动、包括抽象硬件层。分层降低工作难度应该比较好理解,如果一个事情有很多步才能完成,如果交给一个人做,他要从头到尾做一遍,而且重复的从头到尾做,这样全部兼顾的方式会容易带入错误。而分成多层之后,每一层让一个人做,一个人只做其中一步,这样对于这个人来说,就简单了,简单的事情就不容易出错了。整体上每一层的工作就简单轻松了,整体上稳定性更好了。
    所以,你可以知道,内核只是做来操作硬件的基本的操作,比如打开设备,关闭设备,向设备发送一个基本的命令。然而这个命令做什么用,是完成一个复杂功能的哪一个步骤,内核是不知道的。我们只有内核,也是无法完成一个完整功能的。这个就好比,你只有发动机,没有轮子,车子跑不起来。如果没有方向盘,没法转弯。反正发动机一直在转动,发动机不知道某一时刻在完成哪个功能,或许此时只是在直线走,也可能在玩漂移呢。
    所以操作系统内核就是这样一个核心的部件,然而要完成一个完整的操作系统,还要添加很多配套的设施,比如文件管理器(磁盘),内存管理程序,进程线程调度程序(管理CPU)。有了这些管理工具程序之后,就在高层次管理硬件了,操作系统就可以提供强大的管理功能了。这些管理工具不算是操作系统内核的东西了,然后确实非常重要。这些工具为上层的应用程序提供了强有力的支持。再要更多的管理硬件的功能,就是应用软件的事情了。而我们现在用的操作系统,则含有系统内核、重要的系统组件、大量的辅助应用程序,所有这个整套就是一个操作系统。这个操作系统很庞大,无所不有。然而内核则不会很大,内核只提供基本的硬件操作等功能,这些功能时时刻刻都在运行着,一直占用着内存。
    操作系统内核也是各种程序组成的。而一个系统内核的多个部件之间相互配合一起完成管理硬件的任务,所以,内核程序之间也会相互通信,如果是在一个进程的多个模块,可以直接相互调用模块的函数就可以了。如果是独立的进程运行的,则可以通过进程间通信来相互交流合作。
    操作系统内核有一个完整的生态,这个生态就是管理硬件,而不是完成某个应用功能的。管理好硬件,为上层提供不错的支持,就是内核的全部了。所以,评价一个操作系统要看系统的内核,而评价一个系统内核则要看系统内核的稳定性、运行效率,扩展性等等。内核的好坏直接决定了一个操作系统的好坏。操作系统内核也是操作系统的灵活。
    各种从linux包装的系统,内核都是Linux的,也就表示,系统内核结构和性能都是一样的,只是上层的应用层的包装不一样罢了。如果这个内核存在一个严重Bug,这些包装的系统都存在这个Bug。所以,如果一个内核设计的不好,这个系统也就走不远了。
    Linux内核开源免费,很成熟了,就一般的水平,根本就没法提出更高更强的设计了,这也是为什么国人为什么也只能修修改改了。如果水平比内核用的水平还低,如何能够改进呢?写出自己的内核,一定是要设计出自己的一套架构,而不是复制一个已经存在的,而且还是开源的。国内能够完全驾驭Linux内核的人都不多,都不知道有没有,能够很熟悉内核就已经很厉害了。当然,这个不只是国内,国外也不多。但是就学习技术的风气来说,国外的会多很多。所以这也是我想办好C++技术网的意义所在,引导更多人的能够静下心研究技术。
    为什么写一个自己的内核那么难?世界上存在的内核也不多,现有的开源内核做的太好了。在追逐利益最大化的现在,哪个公司愿意去花钱做这样的事情呢?研究还不一样有成果,况且现存的开源内核这么好,都找不到几个人能够掌握的,去哪找人做自己的内核呢?真如果有一个人,完全驾驭Linux内核了,我想这些大公司必然愿意出大价钱招进去,这样做一个自己的内核,完全自主知识产权的,那不是真发了。而且公司还不用花太多的开发研究成本,直接开始做系统即可。而现在是国家扶持操作系统开发,也没有那么好的效果。这就不是钱的问题了。如果真的认真做,虽然时间长点,但还是有一定的成果的,而不是在Linux内核上修修改改了事,而是借鉴Linux内核的设计有点,然后设计出更加优秀的一套系统。这个难度是很大的,但是如果一直坚持做,迟早是能够出成果的。咱们不用急,技术是一点点积累的。国内如果出现技术研究新浪潮,风气形成,技术研究都能够沉下心研究,其实中国这么多技术人,影响还是很大的。
    现在的商圈,互联网商业搅得国内市场乱乱翻,国内的法律制度一直都很落后,所以都是被搞烂了才慢慢吞吞的出台一些法律政策。互联网商业影响实在太大了。这里又想多说几句,看看各种媒体整天在报道什么,看看各种网站的配图,一只猪的事情都可以报道出来,一只狗的新闻都可以配一个大尺度美女图。到处是美女大尺度图片,虽然不构成色情犯罪,但是网络的风气已经搞得少儿不宜了。看看新闻报道的这个强奸那猥亵这被拐卖,这都是些什么新闻,都是些垃圾新闻。到处充斥着垃圾的信息,让大家都迷失了,都很不知所措,然后各种法律都让犯罪代价太低了。大肆的低俗风气,浮躁的社会,让很多人本来老实本分的,都变得不老实。
    对于技术学习,要花大量时间一个人研究,要忍受孤独,而且还要抵抗社会的浮躁的风气,不能被诱惑,还有社会的各种压力,让一个人想好好研究技术都觉得不踏实。此时你谈开发内核,那不是让人笑掉大牙了。能够好好做一下应用开发就不错了。
    但是,我极力阻止这样风气来技术程序员身上蔓延,不断的净化自己的内心,传播正能量,踏实做技术,也是有好出路的。我首先要做好的就是自己的内心要得到净化,才有能力影响到其他人。C++技术网作为程序员的一盏路灯,希望越照越亮。
    那么对于操作系统内核的讲解,大概也就这么多了。下一篇讲一下操作系统内核的几种类型,在进一步的了解一下现在的操作系统内核的情况。