6.云计算&大数据_linux基础知识(5)计算机为何物_计算机如何运作(内功)
没有软件的运作,计算机的功能就无从发挥,硬件资源需要软件的调度才能发挥作用,目前的计算机系统将软件分为两大类,一个是系统软件,一个是应用程序
一.机器程序与编译程序
计算机最重要的运算与逻辑判断是在CPU内部, 而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内容, 然后撰写让CPU读的懂得指令码给CPU执行
综上的话,我们需要如下技能
- 需要了解机器语言:机器只认识0与1,因此你必须要学习直接写给机器看的语言! 这个地方相当的难
- 需要了解所有硬件的相关功能函数:因为你的程序必须要写给机器看, 当然你就得要参考机器本身的功能,然后针对该功能去撰写程序码。例如,你要让DVD影片能够放映, 那就得要参考DVD光驱的硬件信息才行。万一你的系统有比较冷门的硬件,光是参考技术手册可能会昏倒~
- 程序不具有可携性:每个CPU都有独特的微指令集,同样的,每个硬件都有其功能函数。 因此,你为A计算机写的程序,理论上是没有办法在B计算机上面运作的!而且程序码的修改非常困难! 因为是机器码,并不是人类看的懂得程序语言啊!
- 程序具有专一性:因为这样的程序必须要针对硬件功能函数来撰写, 如果已经开发了一支浏览器程序,想要再开发档案管理程序时,还是得从头再参考硬件的功能函数来继续撰写, 每天都在和『硬件』挑战!
所以不难看出,直接使用机器语言是非常有难度的一个事情
为了解决这个问题,计算机科学家设计出一种让人类看的懂得程序语言, 然后创造一种『编译器』来将这些人类能够写的程序语言转译成为机器能看懂得机器码, 如此一来我们修改与撰写程序就变的容易多了!目前常见的编译器有C, C++, Java, python等等
机器语言与高阶程序语言的差别如下所示:
但是此时依旧有问题存在,当你需要将运作的数据写入内存中,你就得要自行分配一个内存区块出来让自己的数据能够填上去, 所以你还得要了解到内存的位址是如何定位的,为了要克服硬件方面老是需要重复撰写控制码的问题,所以就有操作系统(Operating System, OS)的出现了
二.操作系统
操作系统简单说就是将所有的硬件都驱动, 并且提供一个发展软件的参考介面(API)来给工程师开发软件
1> 操作系统核心(Kernel)
操作系统的功能就是让CPU可以开始判断逻辑与运算数值、 让主内存可以开始载入/读出数据与程序码、让硬盘可以开始被存取、让网络卡可以开始传输数据、 让所有周边可以开始运转等等,硬件的所有动作都必须要透过这个操作系统来达成
操作系统的核心(Kernel)决定计算机能不能做到某些事情, 只有核心有提供的功能,你的计算机系统才能帮你完成!举例来说,你的核心并不支持TCP/IP的网络协定, 那么无论你购买了什么样的网卡,这个核心都无法提供网络能力的
核心主要在管控硬件与提供相关的能力(例如网络功能), 这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万一使用者不小心将核心程序停止或破坏, 将会导致整个系统的崩溃!因此核心程序所放置到内存当中的区块是受保护的! 并且开机后就一直常驻在内存当中
TIPS:
所以只有核心的话,我们就只能看著已经准备好运作(Ready)的计算机系统,但无法操作他! 这个时候就需要软件的帮忙
2>系统呼叫(System Call)
硬件都是由核心管理,那么如果我想要开发软件的话,自然就得要去参考这个核心的相关功能! 唔!如此一来不是从原本的参考硬件函数变成参考核心功能,还是很麻烦啊!有没有更简单的方法啊!
为了解决这个问题,操作系统通常会提供一整组的开发介面给工程师来开发软件! 工程师只要遵守该开发介面那就很容易开发软件了!举例来说,我们学习C程序语言只要参考C程序语言的函式即可, 不需要再去考量其他核心的相关功能,因为核心的系统呼叫介面会主动的将C程序语言的相关语法转成核心可以了解的任务函数, 那核心自然就能够顺利运作该程序了!
如果我们将整个计算机系统的相关软/硬件绘制成图的话,他的关系有点像这样:
- 操作系统的核心层直接参考硬件规格写成, 所以同一个操作系统程序不能够在不一样的硬件架构下运作。举例来说,个人计算机版的Windows XP不能直接在RISC架构的计算机下运作。 所以您知道为何Windows XP又分为32位及64位的版本了吧?因为32/64位的CPU指令集不太相同, 所以当然要设计不同的操作系统版本了。
- 操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出装置及档案系统档。 如果没有其他的应用程序辅助,操作系统只能让计算机主机准备妥当(Ready)而已!并无法运作其他功能。 所以你现在知道为何Windows XP上面要达成网页影像的运作还需要类似PhotoImpact或Photoshop之类的软件安装了吧?
- 应用程序的开发都是参考操作系统提供的开发介面, 所以该应用程序只能在该操作系统上面运作而已,不可以在其他操作系统上面运作的。 现在您知道为何去购买线上游戏的光盘时,光盘上面会明明白白的写著该软件适合用於哪一种操作系统上了吧? 也该知道某些游戏为何不能够在Linux上面安装了吧?
计算机系统主要由硬件构成,然后核心程序主要在管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等等), 因此只要硬件不同(如x86架构与RISC架构的CPU),核心就得要进行修改才行。 而由於核心只会进行计算机系统的资源分配,所以在上头还需要有应用程序的提供,使用者才能够操作系统的。
为了保护核心,并且让程序设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发介面, 那就是系统呼叫层。软件开发工程师只要遵循公认的系统呼叫参数来开发软件,该软件就能够在该核心上头运作。 所以你可以发现,软件与核心有比较大的关系,与硬件关系则不大!硬件也与核心有比较大的关系! 至於与使用者有关的,那就是应用程序啦!
3>核心功能
既然核心主要是在负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要的就是CPU与主内存, 因此,核心至少也要有这些功能的:
- 系统呼叫介面(System call interface)
刚刚谈过了,这是为了方便程序开发者可以轻易的透过与核心的沟通,将硬件的资源进一步的利用, 於是需要有这个简易的介面来方便程序开发者。 - 程序管理(Process control)
总有听过所谓的『多工环境』吧?一部计算机可能同时间有很多的工作跑到CPU等待运算处理, 核心这个时候必须要能够控制这些工作,让CPU的资源作有效的分配才行!另外, 良好的CPU排程机制(就是CPU先运作那个工作的排列顺序)将会有效的加快整体系统效能呢! - 内存管理(Memory management)
控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序码与数据都必须要先存放在内存当中。 通常核心会提供虚拟内存的功能,当内存不足时可以提供内存置换(swap)的功能哩。 - 档案系统管理(Filesystem management)
档案系统的管理,例如数据的输入输出(I/O)等等的工作啦!还有不同档案格式的支持啦等等, 如果你的核心不认识某个档案系统,那么您将无法使用该档案格式的档案罗!例如:Windows 98就不认识NTFS档案格式的硬盘; - 装置的驱动(Device drivers)
就如同上面提到的,硬件的管理是核心的主要工作之一,当然罗,装置的驱动程序就是核心需要做的事情啦! 好在目前都有所谓的『可载入模组』功能,可以将驱动程序编辑成模组,就不需要重新的编译核心
应用程序
应用程序是参考操作系统提供的开发介面所开发出来软件,这些软件可以让使用者操作,以达到某些计算机的功能利用。 举例来说,办公室软件(Office)主要是用来让使用者办公用的;影像处理软件主要是让使用者用来处理影音数据的; 浏览器软件主要是让使用者用来上网浏览用的等等