
在前面几天我已经对计算机的硬件做了简单介绍,但是只有硬件的计算机只是一堆废铁,不能帮助我们做任何的工作,要让计算机变得能够符合我们的心意是离不开软件的支持的,硬件是计算机的骨肉,那么软件就是灵魂了。一个完整的计算机系统包含硬件系统和软件系统两大部分。硬件通常是指一切看得见,摸得着的设备实体;而软件通常泛指各类程序和文件,它们实际上是由一些算法以及其在计算机中的表示所构成的。
软件是计算机的物质基础,正是在高速发展的硬件基础上,才有软件赖以生存的空间和活动场所,没有硬件对软件的支持,软件的功能就无从谈起;同样,软件是计算机系统的灵魂,没有软件的硬件“裸机”将不能给用户任何帮助,犹如一堆废铁。因此,硬件和软件是相辅相成、不可分割的整体。
当前,计算机的硬件和软件正朝着互相渗透、互相融合的方向发展,在计算机系统中并没有一条明确的软硬件分界线。原来一些硬件实现的功能可以改由软件模拟来实现,这种做法称为硬件软化,它可以增强系统的功能和适应性;同样,原来由软件实现的功能也可以改由硬件来实现,称为软件硬化,它可以显著降低软件在时间上的开销。由此可见,硬件和软件之间的界限是模糊而浮动的,对于程序设计人员来说,如软件和硬件在逻辑上是等价的。一项功能究竟采用何种方式实现,应该从系统的效率、速度、价格和资源状况诸方面综合考虑。
除去硬件和软件,计算机中还有一个常见的概念,固件(Firmware),固件是1967年由美国人A.Opler首先提出的。固件是指那些存储在能永久保存信息的器件(如ROM)中的程序,是具有软件功能的硬件。固件的性能指标介于硬件和软件之间,吸收了软硬件各自的优点,其执行速度快于软件,灵活性优于硬件,是软、硬件结合的产物,计算机功能的固件化将成为计算机发展的一个趋势。
一般来说,目前的计算机系统将软件分为两大类,一个是系统软件(OS),一个是应用程序,我们在了解OS之前先来了解一下什么是程序,尤其是机器程序。
我们知道计算机只认识0和1(关于0和1,我们放在后面的数据表示中讲解),而且计算机最重要的运算与逻辑判断是在CPU内部,而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内容,然后撰写让CPU读的懂的脚本给CPU执行,这样才能让CPU运作。
不过这样的流程有几个很麻烦的地方,包括:
需要了解机器语言:机器只认识0和1,因此你必须要学习直接写给计算机看的语言,这是相当困难的。
需要了解硬件的相关功能函数:因为你的程序必须要写给机器看,当然你就得要参考机器本身的功能,然后针对该功能去撰写程序代码。例如,你要让DVD影片能够播放,那就得要参考DVD光驱的硬件信息才行。万一你的系统有比较冷门的硬件,光是参考技术手册可能就会累死。
程序不具有可移植性:每个CPU都有独特的微指令集,同样的,每个硬件都有其功能函数。因此,你为A计算机写的程序,理论上是没有办法在B计算机上面运作的。而且程序代码的修改也是非常困难的,因为是机器码,并不是人类看得懂的程序语言。
程序具有专一性:因为这样的程序必须要针对硬件功能函数来编写,如果已经开发了一支浏览器程序,想要再开发档案管理程序时,还得从头再参考硬件的功能函数来继续编写,每天都在和硬件奋战。

从上面的图示我们可以看到高阶程序语言与程序代码是很容易查看的。问题是,在这样的环境底下我们还是得要考虑整体的硬件系统来设计程序。
举例来说,当你需要将运作的数据写入内存中,你就得要自行分配一个内存区块出来让自己的数据能够填上去,所以你还得要了解内存地址是如何定位的,想到这里就不禁觉得程序员知道的好多啊。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-75013-1.html
中国现在的教授实在无法令人尊敬
这是个无利不起早的国家
你想下啤酒就明白了