计算机系统基础:计算机系统概述

这是一个 CSAPP-like 的系列博客


通用电子计算机历史

第一台通用电子计算机是宾夕法尼亚大学于1946年研制的ENIAC,它采用十进制,是可编程、图灵完备的电子计算机。
随后,Von Neumann 加入ENIAC的研制组,进行新的 “存储程序式通用电子计算机” EDVAC的研制,
为此冯诺依曼以"关于EDVAC的报告草案"为题发表了全新的"存储程序式通用电子计算机方案",
在该方案中,提出了冯诺依曼体系结构
然而第一台完成的存储程序计算机,是1949年剑桥大学研制的EDSAC,而非1951年完成的EDVAC


计算机系统的基本组成与基本功能

计算机是一种能对数字化信息进行自动、高速算术和逻辑运算的处理装置

冯·诺依曼结构

几乎所有的现代通用计算机都采用冯·诺依曼结构
冯·诺依曼结构的主要思想是:

  • 计算机由运算器控制器存储器I/O设备 五个基本部件组成
  • 各部件的基本功能是:
    • 存储器不仅能存放数据,而且也能存放指令,形式上两者没有区别都是01序列(而是通过存储位置区分)
    • 控制器可以自动取出指令,逐条执行
    • 运算器能进行加减乘除四则运算,并且可以进行一些逻辑运算和附加运算
    • 操作人员可以通过输入设备输出设备和主机进行通信
  • 计算机内部以二进制表示指令和数据,每条指令由操作码和地址码组成,操作码指出操作类型,
    地址码指出操作数的地址;程序由一系列指令组成
  • 采用存储程序工作方式
    计算机要完成的工作都要先被编写成程序,然后将程序和原始数据送入主存并启动执行
    一旦程序启动,计算机能在不需要人工干预的情况下,自动完成逐条取出指令并执行指令的任务

冯·诺依曼结构的计算机也称为冯·诺依曼机器
在这里插入图片描述
早期部件间用分散方式连接,现在部件间大多使用总线方式连接

计算机的工作方式:"存储程序"工作方式
数据和指令都按序存放在存储器中,存储器上每个存储单元都按一定的存储单位编址

  • 指定起始PC位置
  • 根据PC取指令
  • 指令译码
  • 取操作数
  • 执行指令
  • 回写结果
  • 修改PC值
  • 执行下一条指令

指令执行过程中,指令和数据被从存储器取到CPU,存放在CPU的寄存器中;指令在IR中,数据在GPR中;
指令中需给出的信息:

  • 操作码(操作性质)
  • 源操作数1 或/和 源操作数2 (单目运算/双目运算) (操作数形式:立即数、寄存器型号、存储地址)
  • 目的操作数地址(结果:寄存器编号、存储地址)
    存储地址的描述与操作数的数据结构有关

计算机实现的所有任务都是通过执行一条一条指令完成的

计算机中的基本部件(微结构)

在这里插入图片描述
CPU:中央处理器;PC:程序计数器;MAR:存储器地址寄存器;
ALU:算术逻辑部件;IR:指令寄存器;MDR:存储器数据寄存器;
GPRs:通用寄存器组(由若干通用寄存器组成,早期就是累加器);
总线:地址总线(AddressBus,AB),控制总线(ControlBus,CB),数据总线(DataBus,DB),

其中:

  • 运算器(数据运算):ALU、GPRs、标志寄存器等
  • 存储器(数据存储):存储阵列、地址译码器、读写控制电路
  • 总线(数据传输):数据(MDR)、地址(MAR)和控制线
  • 控制器(控制):对指令译码生成控制信号

程序开发和执行过程
机器语言

早期,程序都是用机器语言编写的,机器语言即是用01序列表示指令与数据
程序记录在纸带或卡片上,穿孔表示0,未穿孔表示1
使用按钮、开关输入;指示灯等输出

例如下面一段机器代码程序,此处假设0010表示某种跳转指令

0 : 0101 0110
1 : 0010 0100
2 : .... ....
3 : .... ....
4 : 0110 0111
5 : .... ....
6 : .... ....

上述程序在执行至第1条指令时,跳转到第四条指令

若逻辑程序逻辑稍稍改变,比如在2与3间加入一条指令
那么指令1就要重新计算跳转的地址了,再重新制作打孔卡片
且机器语言是与机器相关的,不同机器可能使用不同的机器语言

总之,虽然机器语言能直接被计算机执行,但机器语言并不适合写程序

汇编语言

在机器语言的基础上发展出了汇编语言
汇编语言程序由汇编指令构成,
汇编指令是用助记符和标号来表示、与机器指令一一对应的指令
 指令:
  包含操作码和操作数或其地址码
  只能描述 存/取一个数;两个数间的运算(加减乘除与或 等);根据运算结果判断是否转义执行

add  B
jc  L0
......
......
L0: sub  C
......
B: ......
C: ......

如上述程序,增加某行指令,无须再重新计算指令地址

汇编语言使用更便于阅读的符号,且增减指令无须修改其他指令中的指令地址
但是计算机并不能直接执行汇编语言程序,汇编语言程序需要用汇编程序(汇编器)转换为机器语言
且汇编语言与机器相关,可移植性差

汇编语言与机器语言均面向硬件,有时合称为机器级语言

总之,在程序的编写上,汇编语言优于机器语言,但是还是有点难办

高级程序语言

随着计算机科学与技术的发展,出现了许多高级编程语言

  • 与具体机器结构无关(辣鸡C语言,狗头
  • 面向算法描述,抽象能力更强
  • 一条语句可能对应几条,几十条,甚至几百条指令
  • 有编程思想之分(面向过程、面向对象等)
  • 处理逻辑基本包括:顺序结构,选择结构,循环结构
  • 有两种转换方式
    • 编译执行:将高级语言源程序转换为机器级目标程序,执行时只要启动目标程序即可
    • 解释执行:每次执行时将高级语言程序逐条翻译成机器指令并立即执行,不生成目标文件

hello world 程序的转换处理过程

在这里插入图片描述
编辑好源程序hello.c,hello.c肯定是不能直接在计算机上执行的
在GCC/Linux平台下,hello.c(源程序 文本) 经预处理得到hello.i(源程序 文本),
再经编译得hello.s(汇编语言程序 文本),继续经过汇编得到hello.o(可重定位目标程序 bin),
hello.o与其他可能用到的.o文件(如 printf.o )链接后,得到可执行二进制程序hello

不同层次语言之间的等价转换入下
在这里插入图片描述

程序开发与运行环境

早期的程序由于是由机器语言编写,直接输入指令和数据,
启动时把第一条指令地址送入程序计数器PC即可

而高级语言需要复杂的支撑环境

语言处理系统
  编辑器:编辑源代码
  翻译程序:
    编译方式:预处理程序、编译器、汇编器、链接器
    解释方式:解释器
操作系统
  人机接口:
    图形用户界面(GUI)
    命令行用户界面(CUI)
  语言的运行时系统
  操作系统内核
指令集体系结构
计算机硬件

语言处理系统运行在操作系统之上,操作系统利用指令管理硬件


计算机系统层次结构

计算机系统层次是与编程语言的抽象过程对应的

机器语言汇编语言高级语言
(现代(传统)计算机系统的层次)
应用程序应用程序
汇编程序语言处理系统
应用程序操作系统操作系统
指令集体系结构指令集体系结构指令集体系结构
计算机硬件计算机硬件计算机硬件

指令集体系结构是对计算机硬件的抽象,而机器语言直接编写指令,故应用程序直接构筑在指令集体系结构上

汇编语言出现之后,应用程序需要通过汇编程序翻译为指令,
而汇编语言程序的编写需要有与计算机交互的界面等,这些由操作系统来提供

现代高级语言出现后,高级语言编写的应用程序需要语言处理系统转换为机器指令,
程序的编写环境、运行环境也由操作系统提供

计算机系统的抽象层

下图中,上层是下层的抽象与应用。下层是上层的具体实现
在这里插入图片描述
程序的执行结果不仅取决于算法程序编写,而且取决于语言处理系统(翻译)
操作系统(服务例程)ISA微体系结构

计算机系统的不同用户所在的层次:
在这里插入图片描述
可以看出,ISA是非常重要的层次,它是硬件的抽象,所有的软件都建立在ISA之上,ISA是软件和硬件的接口

指令集体系结构

指令集体系结构ISA,Instruction Set Architecture,指令系统
ISA是通用计算机系统中必不可少的一个抽象层,它是一种规约(Specification),规定了如何使用硬件,包括:

  • 可执行的指令的集合,包括指令格式操作种类操作数类型
  • 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、编号、长度和用途
  • 操作数所能存放的存储空间大小存放方式(大小端)编址方式
  • 指令获取操作数的方式,即寻址方式
  • 指令执行过程的控制方式,包括程序计数器(PC)条件码定义

ISA和计算机组成(微结构)(IA-32、MIPS、ARM等)有很大关系,因为不同微结构的硬件组成有差别
计算机组成必须能够实现ISA规定的功能,如提供GPR等
同一ISA可以有不同的计算机组成,如有些指令可以由不同的硬件实现


本系列博客的内容:
在这里插入图片描述
在这里插入图片描述


2019/8/9

  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值