《计算机系统结构》读书笔记(三)
第二章 数据表示、寻址方式与指令系统
2.2 寻址方式
寻址方式指的是指令按什么方式寻找(或访问)到所需要的操作数或信息的。
寻址方式在多样性、灵活性、寻址范围、地址映像算法和地址变换速度等方面都有了很大的进展。
2.2.1 寻址的三种面向
多数计算机都讲主存、寄存器、堆栈分类编址,分别有面向主存、面向寄存器和面向堆栈的寻址方式。
面向主存的寻址主要访问内存,少量访问寄存器。
面向寄存器的寻址主要访问寄存器,少量访问主存和堆栈。
面向堆栈的寻址主要访问堆栈,少量访问主存或寄存器。
2.2.2 寻址方式在指令中的指明
寻址方式在指令中一般有两种不同的指明方式。
1.占用操作码的某些位来指明。
2.在地址码部分专门设置的寻址方式位字段指明。
寻址方式位的寻址方式灵活,操作码短,但需要专门的寻址方式位字段。
2.2.3 程序在主存中的定位技术
逻辑地址是编程用的地址。
主存物理地址是程序在主存中的实际地址。
(1)静态再定位
利用Von Neumann型机器指令可修改的特点,在目的程序装入主存时,由装入程序用软件方法把目的程序的逻辑地址变换成物理地址,程序执行时,物理地址不再改变。
缺点:因指令地址码可修改,会因一道程序地址改错而使其他程序出错。
(2)动态再定位
基址寻址法:增加相应的基址寄存器和地址加法器,在程序不做变换直接装入主存的同时,将装入主存的起始地址a存入对应该道程序使用的基址寄存器中。
程序执行时,只要通过地址加法器将逻辑地址加上基址寄存器的程序基址形成物理(有效)地址后访存即可。
执行每条指令时才形成访存物理地址的方法称为动态再定位。
基址寻址与变址寻址原理上相似,但不是同一概念。变址寻址是对诸如向量、数组等数据块原酸的支持,以便于实现程序的循环。
基址寻址是对逻辑地址空间到物理地址空间变换的支持,以利于实现程序的动态再定位。
在实际应用中,基址寻址和变址寻址都会同时用到。基址寻址将装入程序形成物理地址改由地址加法器形成,加快地址变换速度。
因地址不是直接取之灵地址码,而是经地址硬件变换形成,为防止储存,形成地址后需判断其是否有效,设定上下界,判断有效地址是否越界。
(3)虚实地址映像表
地址加界法要求程序员所用编址空间不能超出实际主存的容量。采用虚拟存储器增加了映像表硬件后,使程序空间可以超过实际主存空间,进一步的发展了动态再定位技术。

基址寻址
2.2.4 物理主存中信息的存储分布
采用信息在存储器中按整数边界存储或随机存储。
2.3 指令系统的设计和优化
2.3.1 指令系统设计的基本原则
指令系统是程序设计者看计算机的主要属性,是软、硬件的主要界面,它在很大程度上决定了计算机具有的基本功能。
设计和确定指令系统主要应考虑如何有利于满足系统的基本功能,有利于优化计算机的性能价格比,有利于指令系统今后的发展和改进。
指令系统的设计包括:
指令功能设计
指令格式设计
设计新的指令系统时,一般按一下步骤反复多次进行
1)根据应用初拟指令分类和具体的指令。
2)试编出该指令系统设计的各种高级语言的编译语言。
3)对各种算法便携大量的测试程序并进行模拟测试,看指令系统的操作码和寻址方式效能是否比较高。
4)将程序中高频出现的指令串复合改成一条强功能新指令,改用硬件方式实现,使用频度低的操作改成用基本指令的指令串完成,即用软件方式实现。
指令类型一般分非特权型和特权型两类。
非特权型主要供应用程序员使用,也可供系统程序员使用。特权指令只供系统程序员使用,用户无权使用。
编译程序设计者要求指令系统应设计具有:
1)规整性。对相似的操作做相同的规定
2)对称性。
3)独立性和全能性。
4)正交性。指令中各个不同含义的字段,编码时应互不相关,相互独立。
5)可组合性。让指令系统中所有操作对各种寻址方式和数据类型都能适用。
6)可扩充性。要留有一定数量的冗余操作码
系统结构设置者希望:
1)指令码密度适中。
2)兼容性。
3)适应性。
2.3.2 指令操作码的优化
研究操作码进行优化表示主要是为了缩短指令字长,减少程序总位数以及增加指令字能表示的操作系统和地址信息。
要对操作码进行优化表示,就需要知道每种指令在程序中出现的概率(使用频度)一般可通过对大量的已有的典型程序进行统计求得。
哈夫曼编码:
哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长 度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。
哈夫曼压缩概念:
当各种事件发生的概率不均等时,采用优化技术,对发生概率最高的事件用最短的位数(时间)来表示(处理),而对出现概率较低的事件允许用较长的位数(时间)来表示(处理),就会使表示(处理)的平均位数(时间)缩短。
扩展操作码编码是界于定长二进制编码和完全哈夫曼编码之间的一种编码方式,操作码不是定长的,但只有有限几种码长。仍利用高概率的用短码、低概率的用长码表示的哈夫曼压缩思想,使操作码平均长度缩短,以降低信息冗余。
操作码的信息源熵(信息源所含的平均信息量)
2.3.3 指令字格式的优化
指令字格式优化的措施概括起来包括如下几点:
1)采用扩展操作码,并根据指令的频度pi的分布状况选择合适的编码方式,以缩短操作码的平均码长。
2)采用诸如基址、变址、相对、寄存器、寄存器间接、段式存放、隐式指明等多种寻址方式,以缩短地址码的长度,并在有限的地址长度内提供更多的地址信息。
3)采用0、1、2、3等多种地址制,以增强指令的功能,这样从宏观上就能缩短程序的长度,并加快程序的执行速度。
4)在同种地址制内再采用多种地址形式,如寄存器-寄存器、寄存器-主存、主存-主存等,让没种地址字段可以有多种长度,且让长操作码与地址码进行组配。
5)在维持指令字在寄存器中按整数边界存储的前提下,使用多种不同的指令长度。
2.4 指令系统的发展和改进
2.4.1 两种途径和方向(CISC和RISC)
1、进一步增强原有指令的功能以及设置更为复杂的新指令以取代原先由软件子程序完成的功能,实现软件功能的硬化。按此方向发展,机器指令系统日益庞大复杂。因此,称用这种途径设计CPU的计算机为复杂指令系统计算机(Complex Instruction Set Computer,CISC)。
2、通过减少指令种数和简化指令功能来降低硬件设计的复杂度,提高指令的运行速度。按此方向发展,使机器指令系统精简,因此,称通过各种途径设计CPU的计算机为精简指令系统计算机(Reduced Instruction Set Computer,RISC)。
为增强系统功能和提高速度就不断增加指令系统的复杂度,大致有以下原因:
1)高级语言取代汇编语言,就不断增加新的复杂指令来支持高级语言程序的高效实现。
2)由于访主存的速度明显低于访CPU寄存器的速度,因此,在功能相同时,不断增加用一条功能的新指令来取代原先需要一连串指令完成的功能,将程序软件固化和硬化。
3)系列机软件要求向上兼容和向后兼容,使得指令系统不断扩大和增加。而原有指令不能取消。采用微程序控制后,有人开始滥用控制寄存器,导致指令条数、功能、寻址方式和指令的格式越来越复杂。
2.4.2 按CISC方向发展和改进指令系统
1.面向目标程序的优化实现改进
对已有机器的指令系统进行分析。改进指令实现方式,提高系统软件和应用软件在内的各种机器语言目标程序的实现效率。减少目标程序占用的存储空间,减少程序执行中的访存速度,缩短指令的执行时间,提高程序的运行速度。、
途径1 根据现有机器的机器语言程序及其运行情况,统计各种指令和指令的使用频度加以分析和改进。程序中统计出的指令及指令串使用频度为静态使用频度。
在目标程序执行过程中,对指令和指令串统计出的频度称为动态使用频度。按动态使用频度改进指令着眼于减少目标程序执行时间
对于高频指令,可以增强功能,加快执行速度,缩短指令字长。
对于低频指令,可考虑功能合并到高频指令中去,或在新系列机中取消。对高频指令串可增设新指令取代,减少了目标程序访存指令次数,加快目标程序执行,缩短了目标程序长度。
途径2 增设强功能复合指令来取代原先由常用宏指令或子程序实现的功能,由微程序解释实现,不仅大大提高了运算速度,减少了程序调用的额外开销,也减少了子程序所占的主存空间。
2.面向高级语言的优化实现改进
面向高级语言的优化实现改进就是尽可能缩短高级语言和机器语言的语义差距,支持高级语言编译,缩短编译程序长度和编译时间。
途径1 通过对源程序中各种高级语言语句的使用频度进行统计来分析改进。对高频语句增设与之语义差距小的新指令。这种优化只能是面向用户所用语言,同时这种改进是零碎的、局部的。
途径2 如何面向编译,优化代码生成来改进。
代码生成复杂、效率不高的原因是高级语言与机器语言之间存在很大的语义差距。很难统一。
途径3 改进指令系统,使它与各种语言间的语义差距都有同等的缩小。
途径4 让计算机具有分别面向各种高级语言的多种指令系统、多种系统结构的面向问题动态自寻优的计算机系统。
途径5 发展高级语言计算机
3.面向操作系统的优化实现改进
主要目标是如何通过缩短操作系统与计算机系统结构之间的语义差距,进一步减少运行操作系统的时间和节省操作系统软件所占的存储空间
途径1 对操作系统中的常用指令和指令串使用频度进行分析来改进。效果有限。
途径2 考虑如何增设专用于操作系统的新指令
途径3 把操作系统中频繁使用的,对速度影响大的机构型软件子程序硬化或固化改为直接用硬件或微程序解释实现。
机构型功能:功能稳定。能够确切定义,如进程管理、存储管理。
策略型功能:不固定,在操作系统生存期内可能会不断改变,如上机费用计算、用户标识等。
途径4 发展让操作系统由专门的处理机执行功能分布处理系统结构。
2.4.3 按RISC方向发展和改进指令系统
1.CISC的问题
1)指令系统庞大,一般指令在200条以上,许多指令的功能异常复杂,需要有多重寻址方式、指令格式和指令长度。完成指令的译码、分析、执行的控制器复杂,设计困难,不利于自动化设计、延长设计周期,增加出错机会、增大设计成本。降低系统可靠性,为修正错误付出的时间和代价也会增大。
2)许多指令的操作繁杂,执行速度很低,甚至不如用简单、基本指令组合实现。
3)由于指令系统庞大,使高级语言编译程序选择目标指令的范围太大,因此难以优化生成高效的机器语言程序,编译程序太长、太复杂。
4)由于指令系统庞大,指令使用频度不高,且差别很大。部分指令利用率很低,增加了机器设计人员的负担,降低了系统的性能价格比
2.设计RISC的基本原则
1)只选择使用频率高的指令,再增加少量能有效支持操作系统、高级语言实现及其他功能的指令,大大减少指令条数。
2)减少指令系统所用的寻址方式分类,简化指令格式在两种以内。并让全部指令都是相同长度。
3)所有指令在一个机器周期内完成。
4)扩大通用寄存器数,不少于32个,尽量少访存,所有指令只有存(STORE)、取(LOAD)指令访存,其他指令一律只对寄存器操作。
5)为提高指令执行速度,大多数指令都用硬联控制实现,少量指令采用微程序实现
6)通过精简指令和优化设计编译程序,简单、有效地支持高级语言的实现。
3.设计RISC结构采用的基本技术
1)按设计RISC的一般原则来设计,确定指令系统,通过频度统计出最常用的基本指令,并增设一些对操作系统、高级语言、应用环境等支持最有用的指令,使指令数精简。在指令格式、功能、编码设计上尽可能简化、规整。指令尽可能等长,寻址方式统一成1~2种,一个周期内完成指令执行。
2)逻辑实现采用硬联和微程序相结合。
3)在CPU中设置大量工作寄存器并采用重叠寄存器窗口。
4)指令用流水和延迟转移
5)采用高速缓存Cache
6)优化编译系统
4.RISC技术的发展
采用RISC技术的好处:
1)简化指令系统设计,适合VLSI实现。
2)提高计算机的执行速度和效率。
3)降低设计成本,提高系统的可靠性。
4)可直接支持高级语言的实现,简化编译程序的设计。
RISC的不足和问题:
1)由于指令少,原来在CISC上由单一指令完成的某些复杂功能现在要用多条RISC指令才能完成。加重汇编语言程序设计的负担,增加了机器语言的长度,占用存储空间多,加大了指令的信息流量。
2)对浮点晕眩的执行和虚拟存储器的支持虽有很大加强,但仍显不足。
3)RISC计算机的编译程序比CISC难写
随芯片面积的增大和集成度的提高,多数微型芯片设计开始加入了如下功能
1)进一步增大工作寄存器数量,并修改CPU部分结构,以满足多媒体应用。
2)增加并增大在片Cache的容量,并使其工作时钟与CPU一致。
3)增设不少高速CISC类型的指令。
4)采用附加功能部件执行超标量或超长指令字。
5)在片加速浮点数操作。
6)增大流水线深度或增大分段流水线间的缓冲能力。
7)在前段部分增加对硬件代码转换的支持。
8)在转换之前就开始用猜测方式执行。
9)使用自适应转移预测和恢复。
10)改用数据驱动,让程序动态非顺序地执行。
已有 14 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
全是概念,这看会就睡着了。
还是CSAPP好阿
@dave 唉。。俺看的这个悲剧教材就是这个味儿的。
@大D 考试时间紧不紧? 如果时间宽松的话建议看csapp吧。应付考试的时候再来看这个书, 我就是深受其害,考研的时候一年都在看这种书,后来csapp又没看2完,现在发现很多知识点都不懂。
@52 正因为快考试了。。。我才死记硬背啃这书,不求高分,但求不挂科啊。估计我考完了,就全就饭吃了。
大D果真毅力够强,打了这么多字
@梦之翼
你也用IE10了
@梦之翼 毅力都是逼出来的
@dave D大也IE10了
@dave 我用xp我自豪!!!!!
@52 我用WinXP我也自豪
@大D
大D伪装的UA。。。无误~
@lower 木,虚拟机
@dave 由于显卡兼容性无奈从win8又转战回win7……刚好就升级了IE10
@梦之翼 木有驱动还是?