1.4 软件程序运行
上面我们介绍了计算机的硬件构成,但是只有硬件的计算机只是一堆废铁,不能帮助我们做任何的工作,要让计算机变得能够符合我们的心意是离不开软件的支持的,硬件是计算机的骨肉,那么软件就是灵魂了。
一般来说,目前的计算机系统将软件分为两大类,一个是系统软件(OS),一个是应用程序,我们在了解OS之前先来了解一下什么是程序,尤其是机器程序。
1.4.1 机器程序与编译程序
我们前面谈到计算机只认识9和1,而且计算机最重要的运算与逻辑判断是在CPU内部,而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要村考微指令集的内容,然后撰写让CPU读的懂的脚本给CPU执行,这样才能让CPU运作。
不过这样的流程有几个很麻烦的地方,包括:
l 需要了解机器语言:机器只认识0和1,因此你必须要学习直接写给计算机看的语言,这是相当困难的。
l 需要了解硬件的相关功能函数:因为你的程序必须要写给机器看,当然你就得要参考机器本身的功能,然后针对该功能去撰写程序代码。例如,你要让DVD影片能够播放,那就得要参考DVD光驱的硬件信息才行。万一你的系统有比较冷门的硬件,光是参考技术手册可能就会累死。
l 程序不具有可移植性:每个CPU都有独特的微指令集,同样的,每个硬件都有其功能函数。因此,你为A计算机写的程序,理论上是没有办法在B计算机上面运作的。而且程序代码的修改也是非常困难的,因为是机器码,并不是人类看得懂的程序语言。
l 程序具有专一性:因为这样的程序必须要针对硬件功能函数来编写,如果已经开发了一支浏览器程序,想要再开发档案管理程序时,还得从头再参考硬件的功能函数来继续编写,每天都在和硬件奋战。
从上面的图示我们可以看到高阶程序语言与程序代码是很容易查看的。问题是,在这样的环境底下我们还是得要考虑整体的硬件系统来设计程序。
举例来说,当你需要将运作的数据写入内存中,你就得要自行分配一个内存区块出来让自己的数据能够填上去,所以你还得要了解内存地址是如何定位的,想到这里就不禁觉得程序员知道的好多啊。
为了克服硬件方面老是需要重复撰写内存地址句柄的问题,所及就有了操作系统(Operating System,OS)的出现。下面我们就来认识一下OS。