最近更新日期:2009/08/03
软件程序运作 鸟哥在上课时常常会开玩笑的问:『我们知道没有插电的计算机是一堆废铁,那么插了电的计算机是什么?』 答案是:『一堆会电人的废铁』!这是因为没有软件的运作,计算机的功能就无从发挥之故。 就好像没有了灵魂的躯体也不过就是行尸走肉,重点在於软件/灵魂罗!所以底下咱们就得要了解一下『软件』是什么。 一般来说,目前的计算机系统将软件分为两大类,一个是系统软件,一个是应用程序。但鸟哥认为我们还是得要了解一下什么是程序,
尤其是机器程序,了解了之后再来探讨一下为什么现今的计算机系统需要『操作系统』这玩意儿呢! 机器程序与编译程序 我们前面谈到计算机只认识0与1而已,而且计算机最重要的运算与逻辑判断是在CPU内部, 而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内容, 然后撰写让CPU读的懂得指令码给CPU执行,这样就能够让CPU运作了。 不过这样的流程有几个很麻烦的地方,包括:
那怎么解决啊?为了解决这个问题,计算机科学家设计出一种让人类看的懂得程序语言, 然后创造一种『编译器』来将这些人类能够写的程序语言转译成为机器能看懂得机器码, 如此一来我们修改与撰写程序就变的容易多了!目前常见的编译器有C, C++, Java, Fortran等等。 机器语言与高阶程序语言的差别如下所示: 图4.1.1、编译器的角色 从上面的图示我们可以看到高阶程序语言的程序码是很容易察看的!鸟哥已经将程序码(英文)写成中文说~ 这样比较好理解啦!所以这样已经将程序的修改问题处理完毕了。 问题是,在这样的环境底下我们还是得要考量整体的硬件系统来设计程序喔! 举例来说,当你需要将运作的数据写入内存中,你就得要自行分配一个内存区块出来让自己的数据能够填上去, 所以你还得要了解到内存的位址是如何定位的,啊!眼泪还是不知不觉的流了下来... 怎么写程序这么麻烦啊! 为了要克服硬件方面老是需要重复撰写控制码的问题,所以就有操作系统(Operating System, OS)的出现了! 什么是操作系统呢?底下就来谈一谈先! 操作系统 如同前面提到的,在早期想要让计算机执行程序就得要参考一堆硬件功能函数,并且学习机器语言才能够撰写程序。
同时每次写程序时都必须要重新改写,因为硬件与软件功能不见得都一致之故。那如果我能够将所有的硬件都驱动,
并且提供一个发展软件的参考介面来给工程师开发软件的话,那发展软件不就变的非常的简单了?那就是操作系统啦!
操作系统(Operating System, OS)其实也是一组程序, 这组程序的重点在於管理计算机的所有活动以及驱动系统中的所有硬件。 我们刚刚谈到计算机没有软件只是一堆废铁,那么操作系统的功能就是让CPU可以开始判断逻辑与运算数值、 让主内存可以开始载入/读出数据与程序码、让硬盘可以开始被存取、让网络卡可以开始传输数据、 让所有周边可以开始运转等等。总之,硬件的所有动作都必须要透过这个操作系统来达成就是了。 上述的功能就是操作系统的核心(Kernel)了!你的计算机能不能做到某些事情,都与核心有关! 只有核心有提供的功能,你的计算机系统才能帮你完成!举例来说,你的核心并不支持TCP/IP的网络协定, 那么无论你购买了什么样的网卡,这个核心都无法提供网络能力的! 但是单有核心我们使用者也不知道能作啥事的~因为核心主要在管控硬件与提供相关的能力(例如网络功能), 这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万一使用者不小心将核心程序停止或破坏, 将会导致整个系统的崩溃!因此核心程序所放置到内存当中的区块是受保护的! 并且开机后就一直常驻在内存当中。
既然我的硬件都是由核心管理,那么如果我想要开发软件的话,自然就得要去参考这个核心的相关功能! 唔!如此一来不是从原本的参考硬件函数变成参考核心功能,还是很麻烦啊!有没有更简单的方法啊! 为了解决这个问题,操作系统通常会提供一整组的开发介面给工程师来开发软件! 工程师只要遵守该开发介面那就很容易开发软件了!举例来说,我们学习C程序语言只要参考C程序语言的函式即可, 不需要再去考量其他核心的相关功能,因为核心的系统呼叫介面会主动的将C程序语言的相关语法转成核心可以了解的任务函数, 那核心自然就能够顺利运作该程序了! 如果我们将整个计算机系统的相关软/硬件绘制成图的话,他的关系有点像这样: 图4.2.1、操作系统的角色 计算机系统主要由硬件构成,然后核心程序主要在管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等等), 因此只要硬件不同(如x86架构与RISC架构的CPU),核心就得要进行修改才行。 而由於核心只会进行计算机系统的资源分配,所以在上头还需要有应用程序的提供,使用者才能够操作系统的。 为了保护核心,并且让程序设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发介面, 那就是系统呼叫层。软件开发工程师只要遵循公认的系统呼叫参数来开发软件,该软件就能够在该核心上头运作。 所以你可以发现,软件与核心有比较大的关系,与硬件关系则不大!硬件也与核心有比较大的关系! 至於与使用者有关的,那就是应用程序啦!
简单的说,上面的图示可以带给我们底下的概念:
既然核心主要是在负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要的就是CPU与主内存, 因此,核心至少也要有这些功能的:
老实说,驱动程序可以说是操作系统里面相当重要的一环了!不过,硬件可是持续在进步当中的! 包括主机板、显示卡、硬盘等等。那么比较晚推出的较新的硬件,例如显示卡,我们的操作系统当然就不认识罗! 那操作系统该如何驱动这块新的显示卡?为了克服这个问题,操作系统通常会提供一个开发介面给硬件开发商, 让他们可以根据这个介面设计可以驱动他们硬件的『驱动程序』,如此一来,只要使用者安装驱动程序后, 自然就可以在他们的操作系统上面驱动这块显示卡了。 图4.2.2、驱动程序与操作系统的关系 由上图我们可以得到几个小重点:
所以,如果你想要在某个操作系统上面安装一张新的显示卡,那么请要求该硬件厂商提供适当的驱动程序吧! ^_^! 为什么要强调『适当的驱动程序』呢? 因为驱动程序仍然是依据操作系统而开发的, 所以,给Windows用的驱动程序当然不能使用於Linux的环境下了。 应用程序 应用程序是参考操作系统提供的开发介面所开发出来软件,这些软件可以让使用者操作,以达到某些计算机的功能利用。 举例来说,办公室软件(Office)主要是用来让使用者办公用的;影像处理软件主要是让使用者用来处理影音数据的; 浏览器软件主要是让使用者用来上网浏览用的等等。 需要注意的是,应用程序是与操作系统有关系的,如同上面的图示当中的说明喔。因此,如果你想要购买新软件, 请务必参考软件上面的说明,看看该软件是否能够支持你的操作系统啊!举例来说,如果你想要购买线上游戏光盘, 务必参考一下该光盘是否支持你的操作系统,例如是否支持Windows XP/Windows Vista/MAC/Linux等等。 不要购买了才发现该软件无法安装在你的操作系统上喔! 我们拿常见的微软公司的产品来说明。你知道Windows XP, Office 2007之间的关系了吗?
|
||||||||
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室