0.1、计算机硬件

By | 2014年11月2日

首先,我们来看看硬件和操作系统。

常见的计算机通常使用由冯诺依曼提出的冯诺依曼架构,它一般由下面四部分组成

  1. 运算器
  2. 控制器
  3. 储存器
  4. 输出输出设备

运算器

运算器,顾名思义,它是用来计算的硬件。加减乘除位运算都靠它来完成。

他也叫算数逻辑单元(ALU, Arithmetic Logic Unit

一般来说,ALU是用于处理整数计算的,而对于浮点数的计算(暂且可以理解为小数),现代的计算机中,通常会由一个(或多个)浮点运算单元(Float Point Unit,即FPU)完成。

控制器

控制器是计算机的控制中心,主要是程序计数器、译码器等部分组成。

他可以控制上面的运算器进行计算,也可以处理各种硬件的响应。

通常我们将控制器和运算器置于一块芯片中,这样的芯片也就是传说中的中央处理器(Central Processing Unit, 即CPU)

储存器

储存器不用多说,自然是存储数据的地方。严格的来说,计算机上的储存器分为两种:内部储存器和外部储存器

内部储存器(简称为内存)是由计算机必须的一部分,通常容量较小,而外部储存器则不是必须的

内部储存器又根据性质可以分为两类“,一是 只读存储器ROM(Read-Only Memory )”,二是“随机存取存储器RAM(Random-Access Memory)”

RAM也叫内存,你在计算机上最容易找到的ram也就是内存条了。

计算机内存条

计算机内存条 By No machine-readable author provided. Cyberdex assumed (based on copyright claims). – No machine-readable source provided. Own work assumed (based on copyright claims)., Public Domain, https://commons.wikimedia.org/w/index.php?curid=647267

它的读写速度比较快,用于保存正在运行的程序数据。通常,程序和数据都保存在一块内存上的不同位置。计算机执行程序时,cpu会从内存中取出指令,然后再由cpu执行。(一般来说)RAM上的数据断电后就会丢失,如果你正在编写一个程序,还差最后一个字符就写完了,这时候停电了,那么你就杯具了,因为你刚才写的代码在你保存之前,只会储存在RAM中,断电之后程序就没了。好在现在某些编辑器可以自动保存,妈妈再也不用担心我写的东西不见了 😀

储存在ROM上面的数据不会轻易丢失(熊孩子除外)。千万不要被他名字中的read-only给骗了,尽管在最初它是名副其实的“只读”,而现在由于技术进步,可以擦写(这个说法很形象)的ROM早已进入千家万户。

你可以在任何一块计算机主板上找到一个BIOS储存芯片,BIOS是一段在开机时运行的程序(下一篇我们将谈到)

bios

图中红圈圈住的芯片即为用于储存BIOS的芯片

最初bios是储存与真正的只读芯片里的,而现在则是储存于EEPROM (Electrically Erasable Programmable Read-Only Memory),即电可擦可编程只读存储器(这名字真长)中,顾名思义,这种芯片是可以通过电来擦除的

而外部储存,对于一般人来说就更常见了,例如硬盘,U盘等都是外部储存器

输入输出设备

输入设备(input)和输出设备(output),我们经常将他们合起来说,也就是所谓的IO设备。

输入设备往计算机输入信息,通常有键盘、鼠标、话筒等。

输出设备输出信息,有屏幕、扬声器、打印机等,当然触摸屏也属于输入设备。


说完了硬件,再来谈一谈软件。

可能你对计算机开机过程比较好奇,那么我们就从这里说起。

首先问一个问题,启动的英文怎么说?

他就是“boot”,如果你比较冲动的去查了一下,你会发现它本来的意思是靴子。。。没错,就是靴子

原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:
“pull oneself up by one’s bootstraps”,意思是拽着鞋带把自己拉起来,根据牛顿第三定律,这显然是不可能的。在计算机刚刚发明的时候,工程师是灰常纠结的,为什么呢?如果你仔细看了前面,你会知道,计算机是从RAM里头执行程序的,而RAM又有掉电丢失数据的特点。这意味着每次开机,ram里面都是空的,因此CPU就无法正常运行。

这样就陷入了一个死循环:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!

工程师需要想尽办法,把程序装入RAM,计算机才能启动,而这个过程他们叫做“拉鞋带”,久而久之就叫“boot”了。

之后,人们发明了ROM,人们将开机程序存在ROM里,这样每次开机,计算机就自动从ROM里执行这段开机程序。

这块芯片里的程序叫做”基本输入输出系统”(Basic Input/Output System),简称为BIOS。

在你按下电源的瞬间,电源向计算机供电,在我们看来,计算机一下子就开始工作了。实际上如果我们用更小的时间分度去度量cpu的供电情况,你就会发现加在cpu上的电压并不是一瞬间就达到它的工作电压的(其它芯片类似)。

如果直接让cpu从rom芯片内取出指令,开始执行,很可能会由于rom芯片还没有正常工作,或者是电压的波动产生的干扰,导致cpu运行出错。

因此,为了避免这种情况发生,主板上的芯片会持续向cpu发送一个叫做RESET的信号,cpu收到此信号便不会往下工作。

直到主板上的芯片检测到供电已经稳定,才会停止RESET信号的发送。

没有了RESET信号的限制,cpu就像放学了的小朋友一样,高高兴兴的从某一个固定地址取出第一条指令开始执行了(这个地址会正好位于主板上储存BIOS的EEPROM芯片上)

此时,cpu就开始执行BIOS程序了,这一段程序会检查硬件是否正常工作,如有没有内存(此时只会检查640K常规内存),显卡,如果有问题开机过程会被终止,发出错误信号。

如果硬件检查无误,他将跳转到显卡的BIOS,初始化显卡,此时多数显卡都会在屏幕上显示出一些初始化信息,介绍生产厂商、图形芯片类型等内容。系统BIOS接着会检查其他设备的BIOS,并执行里面的初始化程序。

在这之后,BIOS会检查硬件,如cpu型号,工作频率,检查所有的RAM,扫描安装在计算机上的标准硬件设备,包括硬盘、光驱、串口、并口和软驱等设备(当然是有这些设备的情况下),然后检查即插即用设备,如键盘鼠标等,为他们分配相应的资源。

如果这些都没有错误,BIOS会根据用户设置的启动顺序,从硬盘、光盘等设备中执行引导程序。

至此,BIOS下班了。

引导程序是一段引导操作系统的程序。由于操作系统比较大,bios一般没有办法直接将操作系统全部塞入内存,因此我们需要一小段程序

它的用途是专门负责启动操作系统。由于设计的原因,这段引导代码只能有几百字节。

当然话是这么说,通常操作系统较为复杂,这么一点程序还是很难启动整个系统

因此,很多情况下都采用了分段引导的做法,用一段短的(这也意味着功能较少)程序引导一个功能更为强大(意味着体积更大)的引导程序

最后完成操作系统的启动

3 thoughts on “0.1、计算机硬件

  1. Pingback: 用x86机器码写hello world(上) | 仰望苍天思寰宇

发表评论

电子邮件地址不会被公开。 必填项已用*标注