《计算机系统:系统架构与操作系统的高度集成》——2.5 高级数据抽象-阿里云开发者社区

开发者社区> 华章计算机> 正文

《计算机系统:系统架构与操作系统的高度集成》——2.5 高级数据抽象

简介:
+关注继续查看

本节书摘来自华章计算机《计算机系统:系统架构与操作系统的高度集成》一书中的第2章,第2.5节,作者:(美)拉姆阿堪德兰(Ramachandran, U.)(美)莱希(Leahy, W. D.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.5 高级数据抽象

截至目前,我们已经讨论了高级语言中的简单变量,例如char、int和float。我们将这些变量称为标量。这些变量需要的存储空间都是先验的。编译器可选择将标量变量放在寄存器或者内存中。然而,对于高级语言通常支持的数据抽象,如数组和结构,编译器只能把它们分配在内存中,除此之外别无选择。回想一下,由于可寻址性的问题,处理器中寄存器的数量通常只有十来个。所以,这些数据结构庞大的体积排除了将它们分配在寄存器中的可能。

2.5.1 结构
高级语言中的结构数据类型可以通过基址加偏移量的寻址模式来提供支持。
考虑如下C语言结构:
image

如果这个结构的基地址在某个寄存器rb中,那么访问结构中的任意字段都可以通过提供一个相对于基址寄存器的偏移量来完成。编译器知道每个数据类型需要多少空间,也知道每个变量在内存中的对齐情况。
2.5.2 数组
考虑如下的声明:
image

这里的a所指的并非是单个变量,而是变量a[0],a[1]等组成的一个数组。由于这个原因,数组也常被称为向量。这种变量需求的空间在编译的时候可能知道也可能不知道,这取决于高级语言的语义。许多编程语言允许数组在运行时动态地决定大小而不是在编译的时候确定。这意味着,在编译期间编译器不知道数组所需要的存储空间。与之相反的是,标量在编译时是知道所需空间大小的。因此,编译器通常会使用内存来为这些向量变量分配空间。
编译器可能会将变量a在内存中按下图排布:
image

考虑下面这条操作数组的语句:
image

为了编译前面这条语句,假设指令集只允许ALU使用寄存器,那么首先我们需要将a[7]从内存中取出。显然这是可行的,使用我们已经介绍过的基址加偏移量寻址模式:
image

rb初始化为100时,上面这条指令就完成了将a[7]加载到r1中的工作。
一般来说,数组常在循环中使用。在这种情况下,可能有个循环计数器(设为j),它被用来索引数组。考虑下面的指令:
image

在上面的语句中,相对于基址寄存器的偏移量是不固定的。它由循环当前的索引值得到。尽管还可以生成代码来加载a[j],在能够计算出a[7]的有效地址之前还需要额外的指令。所以,一些计算机体系结构提供了一种寻址模式允许有效地址来自两个寄存器内容之和。这被称为基址加索引的寻址模式。
每条新指令和每种新寻址模式给实现增加了复杂性,因此需要非常小心地衡量其中的利弊。这通常由花费/性能分析来完成。例如,为了增加基址加索引寻址模式,我们需要问以下几个问题:
1)在程序的执行中,这种寻址模式有多常用?
2)从减少指令条数的角度来说,基址加索引寻址模式相对于基址加偏移量寻址模式有什么优势?
3)从执行时间的角度来说,使用基址加索引寻址模式的加载指令与使用基址加偏移量寻址模式相比需要付出什么代价?
4)为了支持基址加索引寻址模式,需要什么额外的硬件?
对上面四个问题的回答将给我们提供一个定量的标准来判断是否应该将基址加索引寻址模式包含进去。
我们在后面讨论处理器实现和性能影响时还会回头考虑如何评价向处理器中添加新指令和新寻址模式。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《UNIX环境高级编程(第3版)》——2.3 UNIX系统实现
在McKusick等[1996]的1.1节中给出了UNIX系统家族树的详细历史。UNIX的各种版本和变体都起源于在PDP-11系统上运行的UNIX分时系统第6版(1976年)和第7版(1979年)(通常称为V6和V7)。
1908 0
高级文件系统管理_学习笔记
时间:2017.12.04作者:李强参考:man,info,magedu讲义,万能的internet实验环境:CentOS 6.9与CentOS7.4声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
822 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 KEEP 规定在数据集中保留的变量 DROP 规定在数据集中删除的变量 ARRAY 定义一个数组 RENAME
1389 0
《逻辑与计算机设计基础(原书第5版)》——1.2 计算机系统设计的抽象层次
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.2节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1684 0
《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.14 进程0由0特权级翻转到3特权级,成为真正的进程
本节书摘来自华章计算机《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》一书中的第2章,第2.14节,作者:新设计团队著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1148 0
深入理解计算机系统——系统级I/O
一、UNIX I/O     在UNIX系统中有一个说法,一切皆文件。所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行。
741 0
深入理解计算机系统结构——并发编程
并发编程 如果逻辑控制流在实际上重叠,那么它们就是并发的,这种常见的现象称为并发,出现在计算机系统的许多不同层面上。 应用级并发在其他情况下也是很有用的: 访问慢速I/O设备。 与人交互。 通过推迟工作以降低延迟。
730 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载