21 世纪已经过去了 1/5,还没有接触过计算机的朋友应该很少了吧。但是,你真的了解你每天都在使用的计算机吗?计算机由哪些部件组成?内存和硬盘有什么区别?在 Windows 上能运行的软件为什么在 Mac OS 上就不能运行了?
计算机的结构
计算机的定义
生活中常见的如台式电脑、笔记本电脑、平板电脑、智能手机等,这些东西都是计算机。
生活中常见的计算机
这些东西有什么共性呢,它们都是『接受使用者输入的信息,经由 CPU 处理,然后产生有用的资讯』。因此,只要有输入设备(键盘)及输出设备(显示屏),并且能将你的输入信息转换成有用资讯,就算是一部计算机了。
计算机的定义
计算机的五大硬件单元
现代的大部分计算机都属于 冯·诺伊曼 结构,这是一种将程序指令存储器和数据存储器合并在一起的计算机结构。
- 控制单元
- 负责从存储单元中取出指令,并对指令进行 译码。根据指令的要求,负责向其它各部件发出控制信号,保证各部件协调一致地工作。控制器主要由寄存器、译码器、程序计数器等组成。
- 运算单元
- 运算单元又称算术逻辑单元(Arithmetic Logic Unit, ALU)。它是计算机对数据进行加工处理的部件,包括算术运算(加、减、乘、除等)和逻辑运算(与、或、非、异或、比较等)。
- 存储单元
- 存储单元是计算机存储数据的部件。计算机中的全部信息,包括原始的输入信息、经过初步加工的中间数据以及最后处理完成的有效资讯都存放在存储单元中。而且,指挥计算机运行的各种程序也都存放在存储单元中。存储单元可分为内存储器(内存)和外存储器(硬盘、U 盘等)两种。
- 输入单元
- 输入单元是给计算机输入信息的设备。它是重要的人机交互接口,负责将输入的信息转换成计算机能识别的二进制码,送入存储单元中保存。
- 输出单元
- 输出单元是输出计算机处理结果的设备。在大多数情况下,它将这些结果转换成人类可读的形式。
计算机的五大硬件单元
上面图示中的『系统单元』其实指的就是主机壳内的硬件,重点在于 CPU 与内存。特别要注意的是实线部分代表的数据传输方向,基本上数据都是流经内存再转出去的,至于数据会流进/流出内存则是由 CPU 所控制的。 而 CPU 实际要处理的数据则完全来自于内存! 这是个很重要的概念喔!这也是为什么当你的内存不足时,系统的性能就很糟糕(这也是电脑厂商拼命宣扬自己的电脑内存空间大的原因)。
CPU 的种类
其实 CPU 内部已经含有一些微指令,我们所使用的软件都要经过 CPU 内部的微指令集来完成才行。而这些指令集的设计主要分为两种设计理念,这就是目前世界上常见的两种主要 CPU 架构,分别是: 精简指令集 和 复杂指令集。
- 精简指令集(Reduced Instruction Set Computing, RISC)
- 这种 CPU 的设计中,微指令较为精简,每个指令执行的时间都很短,完成的操作也很单纯,指令的执行性能较佳;但是要做复杂的事情,就要由多个指令来完成。
- 复杂指令集(Complex Instruction Set Computing, CISC)
- 与 RISC 不同,在 CISC 的微指令集中,每个指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因为指令执行较为复杂,所以每条指令花费的时间较长,但每条指令可以处理的工作较为丰富。
操作系统是什么
机器程序与编译程序
我们知道计算机只认识 0 和 1,且计算机最重要的运算与逻辑判断都在 CPU 内执行,而 CPU 又有着自己独特的指令集。因此,当我们需要 CPU 帮忙工作时,就得要参考微指令集的内容,然后编写让 CPU 读得懂的指令码给 CPU 执行,这样就能够让 CPU 运行了。理论上这样是行的通的(纸带打孔编程),但利用这种方式编程存在以下几个难点:
- 需要了解机器语言
- 机器只认识 0 和 1,因此你必须要学习直接写给机器看的语言。这个相当有挑战!
- 需要了解所有硬件的功能函数
- 因为你的程序要写给机器看,你就必须要参考机器本身的功能,然后针对该功能去编写程序。例如,你要让 DVD 影片能够放映,那就得要参考 DVD 光碟机的硬件信息才行。万一你的系统有比较冷门的硬件,光是参考技术手册就可能会晕倒。
- 程序不具有可移植性
- 每个 CPU 都有独特的微指令集,同样,每个硬件都有其独特的功能函数。因此,你为 A 计算机编写的程序,理论上是没有办法在 B 计算机上面运行的。
- 程序不可复用
- 因为这样的程序必须要针对硬件功能函数来编写,如果已经开发了一个浏览器程序,想要再开发文件管理程序时,还是得重头再参考一遍硬件的功能函数来编写,每天都在挑战『硬件』。
编译器的角色
针对上述的种种问题,计算机界的前辈们想到了一种解决思路:人为什么要直接去理解计算机语言呢?我们可以设计出一种便于人类理解的语言,用它来编程,然后再通过一个编译程序,将写好的代码翻译成机器能识别的机器码就行了。如此一来,我们编写与修改程序就变得容易多了!这种语言我们称之为高级语言,常见的如 C、C++、Java、Python、Lisp 等。
操作系统
如同前面提到的,在早期想要让电脑执行程序就得要参考一堆硬件功能函数,并且学习机器语言才能够编写程序。同时每次安装程序时都必须要重新改写,因为硬件与软件功能不见得都一致。那么我如果能够将所有的硬件都驱动,并且提供一个开发软件的参考接口来给工程师使用的话,那开发软件不就变的非常简单了?这就是操作系统啦!
- 操作系统内核(Kernel)
- 操作系统(Operating System, OS)其实也是一组程序,这组程序的重点在于管理电脑的所有活动以及驱动系统中的所有硬件。
- 系统调用(System Call)
- 既然我的硬件都是由内核管理,那么如果我想要开发软件的话,自然就得去参考这个内核的相关功能。如此一来不是从原本的参考硬件函数变成参考内核功能,换汤没换药啊!
- 为了解决这个问题,操作系统通常会提供一整组的开发接口来给工程师开发软件。工程师只需要遵守该开发接口那就很容易开发软件了。
操作系统角色
应用程序
应用程序是参考操作系统提供的开发接口所开发出来的软件,这些软件会利用计算机的一些硬件功能,来达到用户的目的。
- 举例来说,Office 软件主要是用来让用户办公用的;影像处理软件主要是让用户用来处理影音资料的;浏览器软件主要是让用户用来上网浏览网页用的等等。
需要注意的是,应用程序是与操作系统有关系的,参照上图。因此,如果你想要购买新的软件,请务必查看软件上面的说明,看看该软件是否能够支持你的操作系统。
- 举例来说,如果你想要购买线上游戏光碟,务必参考一下该光碟是否支持你的操作系统,例如是否支持 Windows XP/Windows 98/Mac/Linux 等等。不要购买了之后才发现该软件无法安装在你的操作系统上!