从零建造计算机 (十一)
一、 计算机外部的世界
如果所有计算机能够做的就是运行一个程序并重新排列RAM中的bytes,没人会知道它正在做什么。因此计算机需要更多的功能才能变得有用,与外界进行通信就是一种方式。处理计算机外部的事物简称为输入输出或者叫做IO。有些东西只能输入,例如键盘,有些东西只能输出,例如显示屏,有些东西既可以输入也可以输出,例如磁盘。构建IO所需的只是几条新的连线和一条新的指令。对于连线,我们要做的就是将CPU的bus扩展到计算机之外并增加4根线 (负责控制)。 12条连线的组合称为IO bus并且所有外部设备都连接到此一条IO bus上。连接到IO bus的设备称为外围设备。IO bus上可以连接多个外部设备但是一次只能激活其中之一。连接到IO bus的每个设备都必须具有自己的唯一IO地址。下图是CPU中的IO bus,位于图的右下方。
CPU bus是与总线相同的。 Input/Output确定了数据在CPU总线上移动的方向。 Data/Address告诉我们是要传输数据还是要选择可以连接到IO bus的其中一个的设备的IO地址。 I/O Clk e和 I/O Clk s用于enable和set寄存器,以便可以来回移动bytes。下图是新指令的连接方式:
IR位4和5始终置于IO bus上。 只需要执行一个步骤使IO操作发生。 对于输出,enableReg B,并且在Step4期间打开和关闭IO Clk s。Step5和6不执行任何操作。 对于输入,enableIO Clk e,并在Step5中setRegB。步骤4和6不执行任何操作。下面是IO指令的指令代码和计算机语言例子:
每个IO设备都有其独特的特性,因此需要独特的零件和布线才能将其连接到IO bus。将设备连接到bus的零件的集合称为“设备适配器”。每种类型的适配器都有特定的名称,例如“键盘适配器”或“磁盘适配器”。适配器不执行任何操作,除非其地址出现在bus上。完成后,适配器将响应计算机发送给它的命令。通过OUT Addr指令,计算机打开地址线,并将要与之通信的设备的地址放在CPU bus上。其他所有外围设备都有其他的地址,因此它们不会响应。
二、键盘
键盘是连接到IO bus的最简单的外设之一。 它只有输入,并且一次仅向CPU提供一个byte。键盘内部有八根线,如下图所示,它有自己的小bus。 当您按下一个键时,它只是将线连接到必要的线上,以创建与按下的键相对应的ASCII码。 当按下某个键时,还会显示一个提示“控制”的小方框,并将ASCII码设置到“键码寄存器”中。
当按下键盘的按键之后,一个ASCII码会在Keycode寄存器里面等待。AND门1有8个输入,他们连接到CPU bus上。AND门1只有在8个输入一次接收0000 1111这样的代码后才会输出1,这就是键盘的IO地址。AND门2只有在指令是OUT和Address,clk s打开的情况下才会输出1.这样M模块的set端打开,存入刚刚AND门1的输出1,这时也就意味着AND门4的一个输入被激活了。AND门3只有在clk e打开,指令是IN Data的情况下才输出1,这样AND门4输出1并将Keycode寄存器激活将内容输出到CPU的Reg B上。下面之程序流程:
三、硬盘
大多数计算机都有硬盘, 它是连接到IO bus的另一个外围设备。它可以做两件事:存储bytes,也可以让它发送一些以前存储过的bytes。大多数计算有两个原因要使用硬盘。首先,它们具有存储大量bytes的能力,比RAM要多得多。 CPU只能执行RAM中储存的程序,但是没有足够的空间来存储所有事情。这样一来,硬盘将容纳所有的内容,并且当你想做一件事情时,在磁盘上的bytes将被复制到RAM中并被使用。计算机需要硬盘的第二个原因是关闭电源后,硬盘上存储的bytes不会消失。但是RAM会丢失其所有内容。
我们之前讲过bits代表了有电和没电的状态,一旦停电所有的状态都将归零。但是硬盘采用了磁化的方法储存信息,用北极和南极来代表有电没电的状态,一旦磁化后状态就不随电源关闭与否所影响了。这种硬盘也叫做磁盘。磁盘是圆形的,可以快速旋转并涂有易于磁化的材料。磁盘上有一个磁头安装在手臂上。手臂将磁头保持在非常靠近旋转磁盘表面的位置,并且手臂可以前后摆动,以便磁头可以到达磁盘表面上的任何点。如果磁头通电,它会磁化磁盘的表面。此外,它的工作方式相反。当磁头经过磁化区域时,会使包裹在磁头周围的电线中产生电。因此,磁头既可以写也可以读取先前写在磁盘上的内容。磁盘的表面分为一系列彼此非常靠近的环,称为轨道。磁头可以在表面上移动并停在任何一条轨道上。每个循环轨道通常分为几小段,称为扇区。由于磁盘有两个面,通常两个面都涂有磁性材料,并且每个面都有一个磁头。下图是磁盘的原理图:
在RAM中,每个byte都有其自己的地址。 在磁盘上,还有一种定位byte的方法,就是指定byte块位于哪个磁头,哪个磁道和哪个扇区。 这就是磁盘上的数据具有的“地址”类型,例如“磁头0,磁道57,扇区15”。 并且在这个地址不仅有一个byte,而是有一堆bytes,通常是几千个bytes。读取或写入磁盘时,无法访问byte块中的单个byte。 整个块必须先被转移到RAM,在RAM中进行处理,然后整个块被写回到磁盘。
四、计算机的中断
现在我们有了一些外部设施,但是计算机每时每刻检查这些外部设施有没有操作是一件很繁琐的事情,这里我们需要中断来帮助CPU减轻工作。中断意味着让CPU暂时停止手头的工作,将任务暂时储存在RAM中然后执行目前的IO操作,当IO操作结束后在重新取回原来工作的进度重新执行。
完结