为了克服硬件方面老是需要重复撰写内存地址句柄的问题,所及就有了操作系统(Operating System,OS)的出现。下面我们就来认识一下OS。
如同前面提到的,在早期想要让计算机执行程序就得要参考一堆硬件功能参数,并且学习机器语言才能撰写程序。同时每次写程序时都必须要重新改写,因为硬件与软件功能不见得都一致之故。那如果我能够将所有的硬件都驱动,并且提供一个发展软件的参考接口来给工程师开发软件的话,那发展软件不就变得非常简单了?这就是操作系统的主要职责了。
OS其实就是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。我们刚刚谈到计算机如果没有软件只是一堆废铁,那么操作系统的功能就是让CPU可以开始判断逻辑与运算数值、让主存储器可以开始加载/读出数据与程序代码、让硬盘可以开始被存取、让网卡可以开始传输数据、让所有周边可以开始运转等等。总之,硬件的所有动作都必须要透过这个操作系统来达成就是了。
上述的功能就是操作系统的核心(Kernel)了,你的计算机能不能做到某些事情,都与核心有关。只要核心有提供的功能,你的计算机系统就能帮你完成。举例来说,你的核心并不支持TCP/IP的网络协议,那么无论你购买什么样的网卡,这个核心都无法提供网络能力。
但是单有核心我们使用者也不知道能做什么,因为核心主要在管控硬件与提供相关的能力(例如网络功能),这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万一用户不小心将核心程序停止或破坏,将会导致整个系统的崩溃。cpu性能指标有哪些因此核心程序所放置到内存当中的区块是受保护的。并且开机后就一直常驻在内存当中。所以整部系统只有核心的话,那么我们就能看着一个已经准备好运作的计算机系统,但是我们无法运行他。这个时候就需要软件的帮忙了。
既然计算机的硬件都是由OS核心管理,那么如果我想要开发软件的话,自然就得要去参考这个核心的相关功能了。如此一来不是从原来的参考硬件函数变成参考OS Kernel,还是很麻烦的,那么有没有更简单的方法呢?
为了解决这个问题,OS通常会提供一整组的开发接口给工程师开开发软件。工程师只要遵守该开发接口那就很容易开发软件了。举例来说,我们学习C程序语言只要参考C程序语言的函数即可,不需要再去考虑其他核心的相关功能,因为核心的系统呼叫接口会主动将C程序语言的相关语法转为核心可以了解的任务函数,那核心自然就能够顺利运作该程序了。
如果我们将整个计算机系统的相关软件/硬件绘制成图的话,他们的关系如下:


计算机系统主要由硬件构成,然后核心程序主要在管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等等),因此只要硬件不同(如x86架构与RISC架构的CPU),核心就得要进行修改才行。而由于核心只会进行计算机系统的资源分配,所以在上头还需要有应用程序的提供,用户才能够操作系统的。
为了保护核心,并且让程序设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发接口,那就是系统呼叫层。软件开发工程师只要遵循公认的系统呼叫参数来开发软件,该软件就能够在该核心上头运作。所以你可以发现,软件与核心有比较大的关系,与硬件关系则不大。硬件也与核心有比较大的关系,至于与用户有关的,那就是应用程序啦。
在定义上,只要能够让计算机硬件正确无误的运作,那就算是操作系统了。所以说,操作系统其实就是核心与其提供的接口工具,不过就如同上面讲的,因为内核缺乏了与用户沟通的亲和接口,因此在目前,一般我们提到的操作系统都会包含核心与相关的用户应用软件。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-75013-2.html
尊重事实
这就中国的悲哀