Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1352950
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类:

2008-12-30 14:05:21

如同前面提到的,在早期想要让电脑执行程式就得要参考一堆硬体功能函数,并且学习机器语言才能够撰写程式。 同时每次写程式时都必须要重新改写,因为硬体与软体功能不见得都一致之故。那如果我能够将所有的硬体都驱动, 并且提供一个发展软体的参考介面来给工程师开发软体的话,那发展软体不就变的非常的简单了?那就是作业系统啦!

* 作业系统核心(Kernel)

作业系统(Operating System, OS)其实也是一组程式这组程式的重点在于管理电脑的所有活动以及驱动系统中的所有硬体。 我们刚刚谈到电脑没有软体只是一堆废铁,那么作业系统的功能就是让CPU可以开始判断逻辑与运算数值、 让主记忆体可以开始载入/读出资料与程式码、让硬碟可以开始被存取、让网路卡可以开始传输资料、 让所有周边可以开始运转等等。总之,硬体的所有动作都必须要透过这个作业系统来达成就是了。

上述的功能就是作业系统的核心(Kernel)了!你的电脑能不能做到某些事情,都与核心有关! 只有核心有提供的功能,你的电脑系统才能帮你完成!举例来说,你的核心并不支援TCP/IP的网路协定, 那么无论你购买了什么样的网卡,这个核心都无法提供网路能力的!

但是单有核心我们使用者也不知道能作啥事的~因为核心主要在管控硬体与提供相关的能力(例如网路功能), 这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万一使用者不小心将核心程式停止或破坏, 将会导致整个系统的崩溃!因此核心程式所放置到记忆体当中的区块是受保护的! 并且开机后就一直常驻在记忆体当中。
Tips:
所以整部系统只有核心的话,我们就只能看著已经准备好运作(Ready)的电脑系统,但无法操作他! 好像有点望梅止渴的那种感觉啦!这个时候就需要软体的帮忙了!

* 系统呼叫(System Call)

既然我的硬体都是由核心管理,那么如果我想要开发软体的话,自然就得要去参考这个核心的相关功能! 唔!如此一来不是从原本的参考硬体函数变成参考核心功能,还是很麻烦啊!有没有更简单的方法啊!

为了解决这个问题,作业系统通常会提供一整组的开发介面给工程师来开发软体! 工程师只要遵守该开发介面那就很容易开发软体了!举例来说,我们学习C程式语言只要参考C程式语言的函式即可, 不需要再去考量其他核心的相关功能,因为核心的系统呼叫介面会主动的将C程式语言的相关语法转成核心可以瞭解的任务函数, 那核心自然就能够顺利运作该程式了!

如果我们将整个电脑系统的相关软/硬体绘制成图的话,他的关系有点像这样:




图4.2.1、作业系统的角色

电脑系统主要由硬体构成,然后核心程式主要在管理硬体,提供合理的电脑系统资源分配(包括CPU资源、记忆体使用资源等等), 因此只要硬体不同(如x86架构与RISC架构的CPU),核心就得要进行修改才行。 而由于核心只会进行电脑系统的资源分配,所以在上头还需要有应用程式的提供,使用者才能够操作系统的。

为了保护核心,并且让程式设计师比较容易开发软体,因此作业系统除了核心程式之外,通常还会提供一整组开发介面, 那就是系统呼叫层。软体开发工程师只要遵循公认的系统呼叫参数来开发软体,该软体就能够在该核心上头运作。 所以你可以发现,软体与核心有比较大的关系,与硬体关系则不大!硬体也与核心有比较大的关系! 至于与使用者有关的,那就是应用程式啦!
Tips:
在定义上,只要能够让电脑硬体正确无误的运作,那就算是作业系统了。所以说, 作业系统其实就是核心与其提供的介面工具,不过就如同上面讲的,因为最阳春的核心缺乏了与使用者沟通的亲和介面, 所以在目前,一般我们提到的‘作业系统’都会包含核心与相关的使用者应用软体呢!

简单的说,上面的图示可以带给我们底下的概念:

    * 作业系统的核心层直接参考硬体规格写成, 所以同一个作业系统程式不能够在不一样的硬体架构下运作。举例来说,个人电脑版的Windows XP不能直接在RISC架构的电脑下运作。 所以您知道为何Windows XP又分为32位元及64位元的版本了吧?因为32/64位元的CPU指令集不太相同, 所以当然要设计不同的作业系统版本了。

    * 作业系统只是在管理整个硬体资源,包括CPU、记忆体、输入输出装置及档案系统档。 如果没有其他的应用程式辅助,作业系统只能让电脑主机准备妥当(Ready)而已!并无法运作其他功能。 所以你现在知道为何Windows XP上面要达成网页影像的运作还需要类似PhotoImpact或Photoshop之类的软体安装了吧?

    * 应用程式的开发都是参考作业系统提供的开发介面, 所以该应用程式只能在该作业系统上面运作而已,不可以在其他作业系统上面运作的。 现在您知道为何去购买线上游戏的光碟时,光碟上面会明明白白的写著该软体适合用于哪一种作业系统上了吧? 也该知道某些游戏为何不能够在Linux上面安装了吧?

* 核心功能

既然核心主要是在负责整个电脑系统相关的资源分配与管理,那我们知道其实整部电脑系统最重要的就是CPU与主记忆体, 因此,核心至少也要有这些功能的:

    * 系统呼叫介面(System call interface)
      刚刚谈过了,这是为了方便程式开发者可以轻易的透过与核心的沟通,将硬体的资源进一步的利用, 于是需要有这个简易的介面来方便程式开发者。

    * 行程管理(Process control)
      总有听过所谓的‘多工环境’吧?一部电脑可能同时间有很多的工作跑到CPU等待运算处理, 核心这个时候必须要能够控制这些工作,让CPU的资源作有效的分配才行!另外, 良好的CPU排程机制(就是CPU先运作那个工作的排列顺序)将会有效的加快整体系统效能呢!

    * 记忆体管理(Memory management)
      控制整个系统的记忆体管理,这个记忆体控制是非常重要的,因为系统所有的程式码与资料都必须要先存放在记忆体当中。 通常核心会提供虚拟记忆体的功能,当记忆体不足时可以提供记忆体置换(swap)的功能哩。

    * 档案系统管理(Filesystem management)
      档案系统的管理,例如资料的输入输出(I/O)等等的工作啦!还有不同档案格式的支援啦等等, 如果你的核心不认识某个档案系统,那么您将无法使用该档案格式的档案啰!例如:Windows 98就不认识NTFS档案格式的硬碟;

    * 装置的驱动(Device drivers)
      就如同上面提到的,硬体的管理是核心的主要工作之一,当然啰,装置的驱动程式就是核心需要做的事情啦! 好在目前都有所谓的‘可载入模组’功能,可以将驱动程式编辑成模组,就不需要重新的编译核心啦! 这个也会在后续的核心编译当中提到的!

Tips:
事实上,驱动程式的提供应该是硬体厂商的事情!硬体厂商要推出硬体时,应该要自行参考作业系统的驱动程式开发介面, 开发完毕后将该驱动程式连同硬体一同贩卖给使用者才对!举例来说,当你购买显示卡时, 显示卡包装盒都会附上一片光碟,让你可以在进入Windows之后进行驱动程式的安装啊!

* 作业系统与驱动程式

老实说,驱动程式可以说是作业系统里面相当重要的一环了!不过,硬体可是持续在进步当中的! 包括主机板、显示卡、硬碟等等。那么比较晚推出的较新的硬体,例如显示卡,我们的作业系统当然就不认识啰! 那作业系统该如何驱动这块新的显示卡?为了克服这个问题,作业系统通常会提供一个开发介面给硬体开发商, 让他们可以根据这个介面设计可以驱动他们硬体的‘驱动程式’,如此一来,只要使用者安装驱动程式后, 自然就可以在他们的作业系统上面驱动这块显示卡了。


驱动程式与作业系统的关系
图4.2.2、驱动程式与作业系统的关系

由上图我们可以得到几个小重点:

    * 作业系统必须要能够驱动硬体,如此应用程式才能够使用该硬体功能;
    * 一般来说,作业系统会提供开发介面,让开发商制作他们的驱动程式;
    * 要使用新硬体功能,必须要安装厂商提供的驱动程式才行;
    * 驱动程式是由厂商提供的,与作业系统开发者无关。

所以,如果你想要在某个作业系统上面安装一张新的显示卡,那么请要求该硬体厂商提供适当的驱动程式吧! ^_^! 为什么要强调‘适当的驱动程式’呢? 因为驱动程式仍然是依据作业系统而开发的, 所以,给Windows用的驱动程式当然不能使用于Linux的环境下了。


阅读(1128) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~