用计算机转换层次的例子,程序的表示、转换与链接-week1

最近在 coursera 上发现一门不错的课程,程序的表示、转换与链接,内容是类似《深入理解计算机系统》这本书的,说来惭愧,虽然在上学时零星上过一些相关的课程,但是却没有系统地将这些内容串起来理解。本着算法工程师首先得是个工程的原则,觉得还是有必要去了解一下这块内容;而且课程内容讲得挺通俗的,值得一听。

本文的内容主要是 week1 的内容,较为宏观地介绍了如何从冯·诺依曼体系结构演进至现代计算机结构、程序执行的基本原理、微体系结构与指令集(ISA)等。由于课程 PPT 说得已经较为清晰了,这里大部分内容会直接截图(懒得再打字也是一个原因。。。)

冯·诺依曼结构

基本思想

冯-诺依曼结构主要思想是存储程序的工作方式,即让计算机完成的任何的一项工作,事先要编写成程序,然后把这个程序以及程序处理的这个数据先要送到主存,然后启动运行,运行以后,计算机就可以自动的取出一条一条指令,并且取出来进行执行,就是取出指令,执行。然后再取下条指令再执行,这样按部就班的取出指令并执行

按照上面的描述,计算机应该有如下的组成部分

d3595cc6234943398573e694df486696.png

更抽象一点的结构如下

e58535ba6a4d250b05638e39d29eb320.png

因此,冯-诺依曼结构主要思想是

计算机由运算器,控制器,存储器,输入设备和输出设备五个基本部件组成

各部件的基本功能是存储器不仅能存放数据,也能存放指令,形式上两者都是0/1序列

控制器能自动取出指令来执行

运算器能够进行加减乘除、与或非等运算

操作人员可以通过输入设备和输出设备与主机进行通信

内部以二进制表示指令和数据。每条指令由操作码和地址码组成,操作码指出操作类型,地址码指出操作数的地址

采用“存储程序”的工作方式

现代计算机的模型结构和工作原理

现代计算机采用的基本就是前面提到的冯-诺依曼结构,更深入地看 CPU 的基本组成如下图所示,

fc0e2c637f21d2c1a155eb18d7674cda.png

各个部件的作用如下

PC(program counter): 程序计数器,是一个用于存储指令在 memory 中的地址的寄存器,需要执行的指令先送到 PC,然后送到 MAR

MAR(memory address register):存储 memory 中某些指令或数据的地址(跟总线相连),除了接收 PC 的指令地址,还可以接收 GPR 的数据地址

MDR(memory data register): 从 memory 读出的指令或数据(跟总线相连),送给 IR 或 GPR(同理也可往里面写)

IR(instruction register):存储真实的指令,每条指令由 OP 和 ADDR 组成,表示指令的具体操作和要操作的对象的地址,供控制器读取

标志寄存器:存储运算的结果得到的符号是什么,有没有进位 有没有溢出等等一些标志信息

因此,cpu 从内存读取指令/数据的流程是:PC/GPR -> MAR -> memory -> MDR ->IR/GPR(同时会有一些控制信号,即图中的红色虚线)

下面是以做菜的例子更详细描述计算机是如何工作的

719efb9cbe42539785ba979cb2289ef7.png

1143a876e31bdc1d91b5c449ec913e02.png

从机器语言到高级编程语言机器语言(01表示指令):增减指令后需要重新对纸带打孔

汇编语言(符号表示指令): 增减指令不影响,需要通过汇编程序转为机器语言

高级语言:与平台无关,编译程序(生成目标文件)和解释程序(不生成目标文件)

因此,高级语言(这里以c为例)需要执行如下步骤才能最终被计算机执行

5f10c36c5be9090f7d39e40ceac48612.png

各个步骤做的事情如下

预编译(生成 .i 文件):主要是处理 # 开头的语句,如进行宏展开、将被 include 的文件插入到对应的地方(递归执行)

编译(生成 .s 文件):将代码编译成汇编代码,包括词法分析、语法分析、语义分析和生成汇编代码的优化;虽然不同语言都可通过 gcc 来统一编译,但是 gcc 对于对于不同的语言调用了不同的编译程序(如c是cc1,c++是cclplus,java是jc1)

汇编(生成.o文件):将汇编代码逐条转换成机器指令(有查找表)

链接(生成可执行文件):静态链接与动态链接

下面是一个简单的例子

07ec332c0298aea5c7786f319277b0dd.png

上面的图中有几点值得注意

汇编指令与机器指令是一一对应的

任何程序最终都是通过执行若干条指令来完成

指令集体系结构由计算机硬件决定

计算机的层次结构

计算机简单可分为软件和硬件两个层次,而在这两个层次内又可以做更细的划分,连接着两层的则是指令集(ISA) 如下图所示

1b1056daa6fff217d62ed6936bf59b6a.png

作为软件和硬件的桥梁,ISA 具体做了些啥,简单来说,ISA 规定了如何使用硬件;类似于一个协议,其细节如下图所示

05a736d0d1ec8d347c68b24858aca764.png

44c3025213e6e9f57700ca5fea4675b5.png

小结

week1 的内容比较宏观地介绍了冯·诺依曼结构的计算机系统层次结构、程序在计算机系统内运行的基本原理、高级语言如何转换为机器语言、ISA 的概念等基本内容,课程总共有12周,后面的课程当于是对上述的相关部分内容进行展开。

bd257645917333f4a48be5fd1d725fb6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值