美文网首页
[Computer Science] Week1 Data Ma

[Computer Science] Week1 Data Ma

作者: 霞客环肥 | 来源:发表于2019-11-11 10:31 被阅读0次

    1.0 Computer Architecture/ 计算机结构

    • CPU Basics/ CPU基础知识
    • The Stored-Progarm Concept/ 存储程序概念

    1.1 CPU Basics

    计算机中控制数据操作的电路成为中央处理器,central processing unit, CPU。

    CPU由3个部分构成:

    1. 算术/逻辑单元(arithmetic/logit unit)
    2. 控制单元(control unit)
    3. 寄存器(register)

    其中寄存器又可分为:

    • 通用寄存器(general-purpose register)
    • 专用寄存器(special-purpose register)
    CPU.png

    通用寄存器用来临时存储CPU正在操作的数据。

    为了传输位模式,CPU和主存储器之间通过一组称为总线(bus)的线路进行连接。

    这里英文版本比较好理解。
    For the purpose of transferring bit patterns, a machine's CPU and main memory are connected by a collection of wires called bus.

    利用总线,可以完成CPU与主存储器之间的数据传输,即

    • CPU从主存储器中取出(读)数据
    • CPU向主存储器中放入(写入)数据

    以2 + 3 这个两数相加的操作为例,共有5步,

    1. 从存储器中取出 2 放入一个寄存器中;
    2. 从存储器中取出 3 放入另一个存储器中;
    3. 激活加法电路,将上述两个寄存器作为输入,并且用另一个寄存器存放相加的结果;
    4. 将结果存入存储器;
    5. 停止。

    可以发现这个过程中,涉及到3个寄存器单元,1次算术逻辑单元,那么控制单元呢?

    在这5步背后,对于数据的位置移动,进行怎样的处理,都是控制单元来控制的。

    1.2 The Stored-program Concept

    早期的计算机不是很灵活,每个设备所执行的步骤都被内置于控制单元中,作为计算机的一部分。

    这里出现了一个重大突破,事实上一个程序可以像数据一样编码并存储在主存储器中。

    那么对一个程序的执行过程就可以变为,

    1. 控制单元从存储器中读取程序;
    2. 将程序解码;
    3. 执行程序。

    这时可以发现 机器遵照执行的程序就可以被修改了!只需要改变计算机存储器中的内容,而不需要对CPU进行重新布线。

    这种将计算机程序存储到主存储器中的思想称为存储程序概念(stored-program concept),这也是今天的标准方法。

    这里的困难注意源于人民最开始将数据和程序视为不同的实体:

    • 数据存储在存储器中;
    • 而程序为CPU的一部分。

    只见树木,不见森林。
    Not seeing the forest for the trees.

    2.0 Machine Language

    为了应用Stored-program concept,CPU被设计成可以识别位模式编码指令。

    机器语言 = 指令 + 编码系统

    通过这种语言,对CPU下达的命令,就称为机器指令(machine instruction).

    2.1 指令系统

    前提:一个典型CPU能够解码和执行的机器指令有限(非常少).

    也就是说,一旦机器能够实现某些基本而精选的任务,理论上,再添加其他更多的特性都不会再增加机器的能力;但是添加的特性可以使机器更对人友好。(类比python和汇编的区别)

    那么在设计机器时,就产生了2种CPU体系哲学。

    1. CPU只需要执行最小的机器指令集,即精简指令集计算机(reduced instruction set computer),RISC
    • 优点:效率高,速度快,制造成本低。
    1. CPU需要执行大量复杂的指令,尽管其中许多在技术上使多余的,即复杂指令集计算机(complex instruction set computer), CISC.
    • 优点:CPU越复杂愈能应对现代软件日益增加的复杂性。

    事实上,即使是CISC下,程序利用一个强大的丰富指令集,这其中的很多指令都是RISC中简单指令的组合而已。

    在21世纪初,CISC处理器和RISC处理器在抢夺desktop computer的市场。

    CISC RISC
    台式计算机&笔记本 因特尔处理器 powerPC(苹果,IBM和摩托罗拉联合开发)
    \uparrow 胜利(因为CISC的制造成本大大降低 )
    游戏控制器/数字电视/导航系统/汽车部件/移动电话/智能手机/等 ARM的处理器
    \uparrow 胜利 (因为RISC的低功耗)

    不管是RISC还是CISC,机器指令都可以分为3类:

    1. 数据传输类(data transfer group);
    2. 算术/逻辑类(arithmetic/logic group);
    3. 控制类(control group)。

    简单介绍一下,
    1. 数据传输类(data transfer group)

    简单来说就是将数据从一个位置移到另一个位置。

    标准来说,并不是移到,因为传输的数据很少被从原位置擦掉,所以,执行传输指令的过程更像是:

    • 复制(copy)
    • 克隆(clone)

    其实CPU和主存储器之间的数据传输,是有专门的术语的。

    • 数据:主存储器\to通用寄存器,LOAD,加载;
    • 数据:通用寄存器\to主存储器,STORE,存储;

    对于例子,2 + 3 两数相加,共有5步,

    1. 从存储器中取出 2 放入一个寄存器中;
    2. 从存储器中取出 3 放入另一个存储器中;
    3. 激活加法电路,将上述两个寄存器作为输入,并且用另一个寄存器存放相加的结果;
    4. 将结果存入存储器;
    5. 停止。

    第1,2步是LOAD指令,第4步是STORE指令。

    另外,外设(打印机,键盘,显示器,磁盘驱动等)与CPU-主存储器之间的通信指令,称为I/O指令;也可以将I/O指令归入数据传输类。

    2. 算术/逻辑类(arithmetic/logic group)

    这里有个逻辑关系:
    算术/逻辑类指令\to控制单元\to算术/逻辑单元
    算术/逻辑类指令 告诉 控制单元 请求 在算术/逻辑单元内实现一个活动。

    即上例的第3步。

    算术/逻辑类指令 = 算术指令 + 逻辑指令 + 数据左右移动

    逻辑指令即常见的布尔运算AND, OR, XOR。

    数据左右移动是指在寄存器中数据左右移动,称为

    • 移位(SHIFT);
    • 循环移位(ROTATE)。

    区别:是丢弃 移出的位,还是将 移出的位 移动到另一端。

    whether the bits that 'fall off the end' of the register are merely discarded (SHIFT) or are used to fill the holes left at the other end (ROTATE).

    3. 控制类(control group)

    控制类指令包含指导程序执行而非数据操作的指令。

    即上例的第5步。

    再比如“跳过下一步” 的操作,称为JUMP指令,分为:

    • unconditional jump
    • conditional jump

    2.2 一种演示用的机器语言

    我们来看一下典型计算机的指令是如何编码的。

    image.png

    这是我们要讨论的机器,它有16个寄存器,256个主存储器单元,每个存储单元容量为8位。

    在十六进制下,我们把寄存器标号为0~F,把存储单元标号为00~FF。

    机器指令编码 = 操作码{\rm (op-code)} + 操作数{\rm (operand)}

    image.png

    在这台机器中,每条指令用16位编码,由4个十六进制数字表示。第1位是操作码,后3位是操作数。

    这里的操作码3:代表STORE;操作数为5A7

    image.png

    这个指令的意思是:将寄存器5中的位模式存储(STORE)到地址为A7的存储单元中。

    再举个例子,指令 70C5

    这里的操作码7:代表OR;操作数为0C5

    指令 70C5的意思是:对寄存器C和寄存器5中的内容进行OR运算,并把结果存到寄存器0中。

    3.0 Program Execution/ 程序执行

    程序是由 存储在主存储器中的 一条条指令组成的;执行程序的过程,就是执行其中的一条条指令;主存储器不具有执行指令的能力,所以,计算机需要先把存储器中的指令复制到CPU中,再由CPU来处理这些指令

    这个过程中用到了CPU中的2个专用寄存器(special purpose register):

    1. 指令存储器(instruction register);
    2. 程序计数器(program counter)。

    指令寄存器用来存储正在执行的指令;程序计数器则存储下一步待执行的指令的地址,相当与一直在跟进程序运行的进度。

    CPU通过不断重复执行 机器周期(machine cycle)来完成工作。

    什么是机器周期?即完成一条指令的所有步骤。


    machine cycle

    机器周期分为3步:

    1. Fetch/ 取指, CPU请求主存储器提供程序计数器指令的地址的指令。我们使用的机器的每一条指令的长度为2个字节(2 bytes),所以Fetch过程需要从主存储器读取2个存储单元的内容。

    并且,将程序计数器的值加2,使得程序计数器可以指向下一条指令的地址。

    1. Decode/ 译码,将Fetch来的指令译码成操作码 + 操作数的形式。

    2. Execute/ 执行, CPU激活相应电路来执行指令,完成所请求的任务。

    一旦指令寄存器中的指令执行完成,CPU将从Fetch步骤开始下一个机器周期。

    相关文章

      网友评论

          本文标题:[Computer Science] Week1 Data Ma

          本文链接:https://www.haomeiwen.com/subject/fwprbctx.html