收藏 分享(赏)

计算机系统基础.ppt

上传人:myw993772 文档编号:7022965 上传时间:2019-05-02 格式:PPT 页数:53 大小:4.15MB
下载 相关 举报
计算机系统基础.ppt_第1页
第1页 / 共53页
计算机系统基础.ppt_第2页
第2页 / 共53页
计算机系统基础.ppt_第3页
第3页 / 共53页
计算机系统基础.ppt_第4页
第4页 / 共53页
计算机系统基础.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、计算机是如何执行程序的? 南京大学计算机系 袁春风 email: 2013.11,主要内容,计算机硬件是什么样子的? 应用问题离电信号到底有多远? 软件和硬件的接口界面是什么? 指令貌似很关键,它是何东东? 高级语言程序如何转换为机器级代码? 计算机中如何表示整数并进行运算? 举例说明整个过程,PC里面长啥样啊?,PC主板是啥东东?,CPU插座,内存条,PCI总线插槽,PC主存储器芯片,由若干内存条组成 把若干片DRAM芯片焊装在一小条印制电路板上制成 内存条必须插在主板上的内存条插槽中才能使用,计算机中的芯片是什么啊?,个人计算机由主机和外设组成,主机中包含多个电路板,每个电路板中有十几个

2、芯片,每个集成电路中有十几个模块,每个模块中有上千万个单元,各单元有十几个门电路,每个门电路实现基本的逻辑运算,所有信息都用二进制编码表示,计算机由芯片构成,芯片包含若干门电路,门电路由若干晶体管组成,集成电路芯片是怎么造出来的呢?,单晶硅锭,圆形薄片 / 硅抛光片 (6/8/12寸,厚度不足1mm),IC小片 / 芯片,不合格的用磁浆点上记号,封装:将芯片固定在塑胶或陶瓷基座上,把芯片上蚀刻出来的引线与基座底部伸出的引脚连接,盖上盖板并封焊成芯片,约需400多道工序!,“晶圆” / 大芯片,Pentium4处理器芯片内部布局,控制器,控制器,指令Cache,数据Cache,I/O接口,浮点数

3、和多媒体处理,控制器,高级流水线和超线程支持,控制器,整数处理,二级Cache和内存访问接口,南京大学学生设计的CPU框图,5级MIPS架构基本流水线CPU,什么是计算机? 计算机是一种能对数字化信息进行自动、高速算术和逻辑运算的通用处理装置。计算机的功能 数据运算、数据存储、数据传送、控制计算机的基本组成 软件 + 硬件(中间是指令系统) 软件:系统软件 + 应用软件 硬件:控制器 + 运算器 + 存储器 + 输入/输出,计算机系统到底是干什么的呢?,计算机是按照什么思路造出来的呢?,冯诺依曼结构的主要思想: 计算机应由运算器、控制器、存储器、输入设备和输出设备五个基本部件组成。 各基本部件

4、的功能是: 存储器不仅能存放数据,而且也能存放指令,形式上两者没有区别,但计算机应能区分数据还是指令; 控制器应能自动执行指令; 运算器应能进行加/减/乘/除四种基本算术运算,并且也能进行一些逻辑运算和附加运算; 操作人员可以通过输入设备、输出设备和主机进行通信。 内部以二进制表示指令和数据。每条指令由操作码和地址码两部分组成。操作码指出操作类型,地址码指出操作数的地址。由一串指令组成程序。 采用“存储程序”工作方式。,一台计算机到底有哪几部分组成呢?,PC:程序计数器;ALU:算术/逻辑单元;USB:通用串行总线,Hardware/Software Interface(界面),机器语言由指令

5、代码构成,能被硬件直接执行。,软件和硬件的界面: ISA(Instruction Set Architecture )指令集体系结构,软件,硬件,指令是啥东东呢?, , EXTop=1,ALUSelA=1,ALUSelB=11,ALUop=add, IorD=1,Read,MemtoReg=1,RegWr=1,temp = vk; vk = vk+1; vk+1 = temp;,lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2),1000 1100 0100 1111 0000 0000 0000 0000 1000 1100 010

6、1 0000 0000 0000 0000 0100 1010 1100 0101 0000 0000 0000 0000 0000 1010 1100 0100 1111 0000 0000 0000 0100,指令就是一串0/1序列,其中要告诉CPU从哪里取数据、CPU做什么操作、结果存到哪里等。,汇编指令和机器指令是一一对应的,高级语言好懂,汇编语言勉强,机器语言完全读不懂啊!,软件到底有哪几类啊?,System software(系统软件) - 简化编程过程,并使资源被有效利用 操作系统(Operating System):资源管理,用户接口 语言处理系统:翻译程序+ Linker,

7、Debug, etc 翻译程序(Translator)有三类: 汇编程序(Assembler):汇编语言源程序机器语言目标程序 编译程序(Complier):高级语言源程序汇编/机器语言目标程序 解释程序(Interpreter ):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件。 其他实用程序: 如:磁盘碎片整理程序、备份程序等 Application software(应用软件) - 解决具体应用问题/完成具体应用任务 各类媒体处理程序:Word/ Image/ Graphics/ 管理信息系统 (MIS) 游戏软件, ,一个典型程序的转换处理过程,1 #include 2 3

8、 int main() 4 5 printf(“hello, worldn“); 6 ,经典的“ hello.c ”C-源程序,# i n c l u d e n n i n t m a i n ( ) n 104 62 10 10 105 110 116 32 109 97 105 110 40 41 10 123 n p r i n t f ( “ h e l 10 32 32 32 32 112 114 105 110 116 102 40 34 104 101 108 l o , w o r l d n “ ) ; n 108 111 44 32 119 111 114 108 100

9、 92 110 34 41 59 10 125,hello.c的ASCII文本表示,计算机能够直接识别hello.c源程序吗?,不能,需要转换为机器语言代码! 即:编译、汇编等,输出“hello,world”,程序的不同形态:源程序、可重定位目标程序、可执行目标程序、进程,Hello程序的数据流动过程,Hello可执行文件,Red:shell命令行处理 Blue:可执行文件加载 Cyan:hello执行过程,“hello”,“hello,world/n”,“hello,world/n”,所有过程都是在CPU执行指令所产生的控制信号的作用下进行的。,数据经常在各存储部件间传送。故现代计算机大多采

10、用“缓存”技术!,应用软件,现实世界中的模运算系统,时钟是一种模12系统假定钟表时针指向10点,要将它拨向6点, 则有两种拨法: 倒拨4格:10- 4 = 6 顺拨8格:10+8 = 18 (mod 12) 6 模12系统中: 10- 4 10+8 (mod 12) - 4 8 (mod 12) 则,称8是- 4对模12的补码 (即:- 4的模12补码等于8)。同样有 -3 9 (mod 12)-5 7 (mod 12),结论2: 对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。,补码(modular运算):+ 和 的统一,结论1: 一个负数的补码等于模减该负

11、数的绝对值。,现实世界中的模运算系统,四档算盘是“4位十进制数” 模运算系统假定算盘只有四档,且只能做加法,则在算盘上计算9828-1928等于多少? 9828+(104-1928) = 9828+8072 = 1 7900 (mod 104)=7900,计算机运算系统是模运算系统,8位二进制加法器模运算系统 计算0111 1111 - 0100 0000 = ?0111 1111 - 0100 0000 = 0111 1111 + (28- 0100 0000)=0111 1111 + 1100 0000 = 1 0011 1111 (mod 28)= 0011 1111,结论1: 一个负数

12、的补码等于对应正数“各位取反、末位加一”,计算机中运算器是一个模运算系统,计算机中运算器只有有限位。假定为n位,则运算结果只能保留低n位,故可看成是个只有n档的二进制算盘。所以,其模为2n 。,当n=4时,共有16个机器数:0000 1111,可看成是模为24 的钟表系统。真值范围为: -8+7(signed)或 0 15(unsigned),补码的定义 假定补码有n位,则: X补= 2n + X (-2nX 2n ,mod 2n),计算机内部用补码表示带符号整数 无符号整数就是二进制编码的整数,重要认识1:带符号整数x的机器数是x补,其第一位为1,则x为负数。,计算机中只能处理二进制数据,以

13、下各变量的机器数是什么? unsigned char uc=30; unsigned short us=4098; unsigned int ui=32769; short s=-8196; int i=-32769; char c=30;,计算机中的数据称为机器数,对应的现实中的数称为真值,30=31-1: 1 1110B 4098=4096+2: 1 0000 0000 0010B 8196=8192+4: 10 0000 0000 0100B 32769=32768+1: 1000 0000 0000 0001B,B是二进制数后缀,H是十六进制后缀(也可用0x前缀),uc: 0001 1

14、110=1EH us: 0001 0000 0000 0010=1002H ui: 00 1000 0000 0000 0001=00008001H s: 1101 1111 1111 1100=DFFCH i: 11 0111 1111 1111 1111=FFFF7FFFH c: 0001 1110=1EH(0x1E),计算机中的算盘长啥样?,补码加减运算公式 A+B补 = A补 + B 补 ( MOD 2n ) AB补 = A补 + B 补 ( MOD 2n ) 补码加减运算要点和运算部件 加、减法运算统一采用加法来处理 符号位(最高有效位MSB)和数值位一起参与运算 直接用Adder实

15、现两个数的加运算(模运算系统)问题:模是多少?运算结果高位丢弃,保留低n位,相当于取模2n 实现减法的主要在于:求B 补,问题:如何求B补?,当Sub为1时,做减法 当Sub为0时,做加法,问题:Adder中执行的是什么运算? 相当于无符号数加!,计算机中的算盘长啥样?,重要认识1:计算机中所有运算都基于加法器实现!,重要认识2:加法器不知道所运算的是带符号数还是无符号数。重要认识3:加法器不判定对错,总是取低n位作为结果,并生成标志信息。,溢出标志,零标志,符号标志,进/借位标志,各个标志如何生成呢?,标志信息是干什么的?,Ex1: -7- 6 = -7 + (-6) = +3 -3 - 5

16、 = - 3 + (- 5) = - 89 - 6 = 3 13 - 5 = 8,1,1,+,+,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,1,Ex2: 用8位机器数计算107+46=?结果错误: 107 + 46 = -103.,溢出现象:(1) 最高位和次高位的进位不同(2) 和的符号位和加数的符号位不同,X,OF=1、ZF=0、 SF=1、借位CF=0,做减法以比较大小,规则如下: Unsigned: CF=0时,大于 Signed:OFSF=0时,大于(即OF=SF),OF=0、ZF=0、 SF=1、借位CF=0,OF=1 ZF=0 S

17、F=0 借位CF=0,例子:程序的机器级表示与执行,float sum (int a , unsigned len) int i,sum = 0;for (i = 0; i = len1; i+)sum += ai;return sum; ,当参数len为0时,返回值应该是0,但是在机器上执行时,却发生了存储器访问异常。 Why?,i 在%eax中,len在%edx中 %eax: 0000 0000 %edx: 0000 0000 subl 指令的执行结果是什么? cmpl 指令的执行结果是什么?,Sum_elements: .L3:movl -4(%ebp), %eaxmovl 12(%eb

18、p), %edxsubl $1, %edxcmpl %edx, %eaxjbe .L3,问题:i 和 len 分别存放在哪个寄存器中? %eax? %edx?,subl $1, %edx指令的执行结果,执行“subl $1, %edx”:A=0000 0000H,B为0000 0001H,Sub=1,因此Sum是32个1,即%edx中为FFFF FFFFH。,已知%edx中为 len=0000 0000H,cpml %edx,%eax指令的执行结果,“cmpl %edx,%eax”执行时:A=0000 0000H,B为FFFF FFFFH,Sub=1,因此Sum是001, CF=1, ZF=0

19、, OF=0, SF=0,已知%edx中为 len-1=FFFF FFFFH%eax中为 i=0000 0000H,jbe .L3指令的执行结果,“cmpl %edx,%eax”执行结果是 CF=1, ZF=0, OF=0, SF=0,说明满足条件,应转移到.L3执行! 显然,对于每个 i 都满足条件,因为任何无符号数都比32个1小,因此循环体被不断执行,最终导致数组访问越界而发生存储器访问异常。,例子:程序的机器级表示与执行,正确的做法是将参数len声明为int型。 Why?,例: float sum (int a , int len) int i,sum = 0;for (i = 0; i

20、 = len1; i+)sum += ai;return sum; ,Sum_elements: .L3:movl -4(%ebp), %eaxmovl 12(%ebp), %edxsubl $1, %edxcmpl %edx, %eaxjle .L3,i 在%eax中,len在%edx中 %eax: 0000 0000 %edx: 0000 0000 subl 指令的执行结果是什么? cmpl 指令的执行结果是什么?,i 和 len 分别存放在哪个寄存器中? %eax? %edx?,subl $1, %eax指令的执行结果,执行“subl $1, %edx”的结果与前面一样。运算部件不知道这

21、是无符号还是带符号整数运算!执行后%edx中是什么?,已知%edx中为 len=0000 0000H,执行前,%edx:FFFFFFFFH%eax: 00000000H,cpml %edx,%eax指令的执行结果,“cmpl %edx,%eax”执行时:A=0000 0000H,B为FFFF FFFFH,Sub=1,因此Sum是001, CF=1, ZF=0, OF=0, SF=0,jle .L3指令的执行结果,“cmpl %edx,%eax”执行结果是 CF=1, ZF=0, OF=0, SF=0 ,说明不满足条件,应跳出循环执行,执行结果正常。,例: 在有些32位系统上-214748364

22、8 2147483647结果为false(与事实不符),Why?int i = -2147483648;i 2147483647结果为true,Why?-2147483647-1 2147483647”,结果怎样?,理解该问题需要知道: 编译器如何处理字面量 机器级数据的表示 高级语言中运算规则 机器指令的含义和执行 计算机内部的运算电路,计算机一定会得到你想的结果吗?,现实世界中(x+y)+z= x+(y+z),但在计算机世界并不一定成立。 现实世界中x20,但在计算机世界并不一定成立。例如,在C语言中,若 x 和 y 为int型, 当 x=65535 时,则y =x*x=-131071。W

23、hy?,计算机一定会得到你想的结果吗?,理解该问题需要知道: 机器级数据的表示 机器指令的含义和执行 计算机内部的运算电路 ,计算机一定会得到你想的结果吗?,例:以下是一段C语言代码: #include main() double a = 10;printf(“a = %dn“, a); 在IA-32上运行时,打印结果为a=0在x86-64上运行时,打印出来的a是一个不确定值为什么?,理解该问题需要知道: 机器级数据的表示 IA-32和x86-64中过程调用的参数传递 计算机内部的运算电路 ,计算机一定会得到你想的结果吗?,打印结果: d=0,x=1 072 693 248 Why?,1 do

24、uble d; 2 3 void p1( ) 4 5 d=1.0; 6 ,1 int d=100; int x=200; void p1(); 4 int main() 5 6 p1( ); 7 printf (“d=%d, x=%dn”, d, x ); 8 return 0; 9 ,main.c p1.c,理解该问题需要知道: 机器级数据的表示 链接器的符号解析规则 ,计算机一定会得到你想的结果吗?,例:应始终返回d0中的3.14,但并非如此。Why?,double fun(int i) volatile double d1 = 3.14;volatile long int a2;ai =

25、 1073741824; /* Possibly out of bounds */return d0; ,fun(0) 3.14 fun(1) 3.14 fun(2) 3.1399998664856 fun(3) 2.00000061035156 fun(4) 3.14, 然后存储保护错,不同体系结构上执行结果可能不同。Why?,理解该问题需要知道: 机器级数据的表示 栈帧中数据的布局 ,计算机一定会得到你想的结果吗?,以下两个程序功能完全一样,算法完全一样,因此,时间和空间复杂度完全一样,但是性能相差21倍。Why?,void copyji (int src20482048,int dst2

26、0482048) int i,j;for (j = 0; j 2048; j+)for (i = 0; i 2048; i+)dstij = srcij; ,void copyij (int src20482048,int dst20482048) int i,j;for (i = 0; i 2048; i+)for (j = 0; j 2048; j+)dstij = srcij; ,21 times slower (Pentium 4),理解该问题需要知道: Cache机制 访问局部性 ,算法,功能部件/RTL,应用 (问题),指令集体系结构 (ISA),操作系统/虚拟机,微体系结构,器件

27、,编程 (语言),电路,从应用问题到电信号到底有多远?,最终用户,计算420=?,4*20, 202, 20+20+20+20,int z,x=4, int y=20; z=x*y; printf (“42=%d”, z);,问题:计算机是怎样执行程序的呢?,问题算法程序指令集体系结构微结构电路,计算机系统的抽象层及其转换,该课程的主要学习内容,信息(指令和数据)在计算机中如何表示? 指令系统如何设计?,如何设计总线BUS?,总结,计算机硬件是什么样子的? 由门电路构成的,只能处理二进制信息 软件和硬件的接口界面是什么? 指令集体系结构(ISA) 指令貌似很关键,它是何东东啊? 一串0/1序列

28、,由操作码和地址码组成 高级语言程序如何转换为机器级代码? 高级语言源程序编译汇编语言源程序汇编目标代码 计算机中是如何表示整数并运算的? 计算机系统是模运算系统,模为2n,高于n位的位被丢弃 无符号整数就是二进制数,带符号整数用补码表示 用加法实现减法运算,生成各种标志用以判断大小 应用问题离电信号到底有多远? 应用问题算法程序指令控制信号电路器件,MIPS指令格式,有三种指令格式 R-Type 两个操作数和结果都在寄存器的运算指令。如:sub rd, rs, rtI-Type 运算指令:一个寄存器、一个立即数。如:ori rt, rs, imm16 LOAD和STORE指令。如:lw rt

29、, rs, imm16 条件分支指令。如:beq rs, rt, imm16J-Type 无条件跳转指令。如:j target,所有指令都是32位宽,须按字地址对齐字地址为4的倍数!,MIPS指令字段含义,OP:操作码 rs:第一个源操作数寄存器 rt:第二个源操作数寄存器 rd:结果寄存器 shamt:移位指令的位移量 func:R-Type指令的OP字段是特定的“000000”,具体操作由func字段给定。例如:func=“100000”时,表示“加法”运算。immediate:立即数或load/store指令和分支指令的偏移地址 target address:无条件转移地址的低26位。将

30、PC高4位拼上26位直接地址,最后添2个“0”就是32位目标地址。为何最后两位要添“0”?,操作码的不同编码定义不同的含义,操作码相同时,再由功能码定义不同的含义!,指令按字地址对齐,所以每条指令的地址都是4的倍数(最后两位为0)。,若从存储器取来一条指令为00AF8020H,则对应的汇编形式是什么?指令的前6位为000000,是一条R-Type指令,按照R-Type指令的格式得到: rs=00101, rt=01111, rd=10000, shamt=00000, funct=1000001. func=100000,是 “add”操作2. rs、rt、rd的十进制值分别为5、15、16故

31、对应的汇编形式为:add $16 ,$5,$15,Example:汇编形式与指令的对应,000000 00101 01111 10000 00000 100000,这个过程称为“反汇编”,可用来破解他人的二进制代码(可执行程序).,32位指令代码:0000 0000 1010 1111 1000 0000 0010 0000,功能:($5)+($t7) $16,指令就是一串0/1序列,其中,有一部分告诉CPU从哪里取数据,有一部分告诉CPU做什么操作,有一部分告诉CPU结果存到哪里。,MIPS的算术运算指令,Instruction Example Meaning Comments add ad

32、d $1,$2,$3 $1 = $2 + $3 3 operands; exception possible subtract sub $1,$2,$3 $1 = $2 $3 3 operands; exception possible add immediate addi $1,$2,100 $1 = $2 + 100 + constant; exception possiblemultiply mult $2,$3 Hi, Lo = $2$3 64-bit signed product divide div $2,$3 Lo = $2 $3, Lo = quotient, Hi = rem

33、ainder Hi = $2 mod $3 Move from Hi mfhi $1 $1=Hi get a copy of Hi Move from Lo mflo $1 $1=lo,Example:算术运算,例. f= (g+h) - (i+j); 假定编译器将 f, g, h, i, j 分别分配在寄存器$1, $2, $3, $4, $5,add $7, $2, $3 add $8, $4, $5 sub $1, $7, $8,寄存器资源由编译器分配! 简单变量尽量被分配在寄存器中,为什么? 程序中的常数如何处理呢?,E.g. f= (g+100) - (i+50),高级语言程序与指令

34、的对应, , EXTop=1,ALUSelA=1,ALUSelB=11,ALUop=add, IorD=1,Read,MemtoReg=1,RegWr=1,f= (g+h) - (i+j);,add $7, $2, $3 add $8, $4, $5 sub $1, $7, $8,000000 00010 00011 00111 00000 100000 000000 00100 00101 01000 00000 100000 000000 00111 01000 00001 00000 100010,编译,汇编,RTL: The ADD Instruction(加法指令),add rd,

35、rs, rt MPC 从PC所指的内存单元中取指令 Rrd Rrs + Rrt 从rs、rt 所指的寄存器中取数后相加。若结果不溢出,则将结果送rd 所 指的寄存器中;若结果溢出,则不送结果,并转到“溢出处理程序”执行。 PC PC + 4 PC加4,使PC指向下一条指令,RR(R-type)型指令的数据通路,功能:Rrd Rrs op Rrt,如:add rd, rs, rt,32,Result,ALUctr,Clk,busW,RegWr,32,32,busA,32,busB,5,5,5,Rw,Ra,Rb,32 32-bit Registers,rs,rt,rd,ALU,不考虑公共操作,仅R

36、-Type指令执行阶段的数据通路如下:,ALUctr,RegWr: 指令译码后产生的控制信号,Ra, Rb, Rw 分别对应指令的rs, rt, rd,“add rd, rs, rt”控制信号为? ALUctr=add,RegWr=1,溢出时,不写结果并需转异常处理程序,溢出OF,寄存器组结构,ZF,指令译码后R型指令(Add / Sub)操作过程,32,ALUctr = Add or Sub,Clk,busW,RegWr = 1,32,32,busA,32,busB,5,5,5,Rw,Ra,Rb,32 32-bit Registers,Rs,Rt,Rt,Rd,RegDst = 1,Ext,M

37、ux,Mux,32,16,imm16,ALUSrc = 0,ExtOp = x,Mux,MemtoReg = 0,Clk,Data In,WrEn,32,Adr,Data Memory,32,MemWr = 0,ALU,Instruction Fetch Unit,Clk,ZF,Instruction,Jump = 0,Branch = 0,Rrd Rrs + / - Rrt,0,1,0,1,0,1,Imm16,Rd,Rt,Rs,例:实现某11条MIPS指令的ALU,该ALU能实现哪些运算? add,sub,addu,subu,or,slt,sltu,定点整数ALU!,SUBctr、OPctr

38、等由ALUctr决定,美国名校相关课程网站,美国UC Berkeley大学“Machine Structure”2013年课程网站:http:/inst.eecs.berkeley.edu/cs61c/sp13/ 美国UC Berkeley大学“Components and Design Techniques for Digital System”2013年课程网站:http:/inst.eecs.berkeley.edu/cs150/sp13/ 美国UC Berkeley大学“Computer Architecture and Engineering”2013课程网站:http:/inst.

39、eecs.berkeley.edu/cs152/sp13/ 美国Stanford大学“Computer Organization and Systems”2013年课程网站:http:/www.stanford.edu/class/cs107/ 美国Stanford大学“Digital Systems II”2013年课程网站:http:/www.stanford.edu/class/ee108b/ 美国Carnegie Mellon 大学“Introduction to Computer Architecture”2013年课程网站:http:/www.ece.cmu.edu/ece447/ 美国麻省理工学院(MIT)“Computation Structures”2013年课程网站:http:/6004.csail.mit.edu,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报