《计算机系统:系统架构与操作系统的高度集成》——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)为了支持基址加索引寻址模式,需要什么额外的硬件?
对上面四个问题的回答将给我们提供一个定量的标准来判断是否应该将基址加索引寻址模式包含进去。
我们在后面讨论处理器实现和性能影响时还会回头考虑如何评价向处理器中添加新指令和新寻址模式。

相关文章
|
11天前
|
供应链 安全 数据处理
操作系统高级议题:并发控制与进程互斥技术
操作系统高级议题:并发控制与进程互斥技术
29 0
|
1月前
|
存储 SQL 关系型数据库
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
ClickHouse的核心架构包括执行过程和数据存储两部分。执行过程涉及Parser与Interpreter解析SQL,通过Column、DataType、Block、Functions和Storage模块处理数据。Column是内存中列的表示,Field处理单个值,DataType负责序列化和反序列化,Block是内存中表的子集,Block Streams处理数据流。Storage代表表,使用不同的引擎如StorageMergeTree。数据存储基于分片和副本,1个分片由多个副本组成,每个节点只能拥有1个分片。
164 0
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
|
12天前
|
数据采集 供应链 搜索推荐
数据集成:融合不同来源的数据
【6月更文挑战第4天】数据集成在企业中发挥关键作用,连接数据孤岛,促进信息流动,提升决策能力。通过抽取、清洗、转换和加载(ETL)不同来源、格式的数据,整合到统一框架,进行深度分析。以零售商为例,集成销售、客户和供应链数据可优化库存管理。数据清洗确保质量,转换满足分析需求,最终加载到数据仓库。Python和pandas库是实现这一过程的工具之一。随着技术进步,数据集成将推动企业向智能化和个性化发展。
37 2
|
11天前
|
算法 数据库
操作系统:经典进程同步问题的高级探讨
操作系统:经典进程同步问题的高级探讨
17 1
|
3天前
|
存储 安全 调度
深入理解操作系统:从基础概念到高级应用
本文将深入探讨操作系统的基本概念、功能和特性,以及其在现代计算环境中的应用。我们将从操作系统的定义和历史开始,然后详细介绍其主要组件和工作原理,包括进程管理、内存管理、文件系统和设备管理等。最后,我们将讨论一些高级主题,如操作系统的安全性、性能优化和虚拟化技术。无论您是计算机科学的学生,还是对操作系统有兴趣的技术人员,这篇文章都将为您提供深入理解和应用操作系统所需的知识和技能。
|
3天前
|
存储 关系型数据库 数据库
数据的反规范化架构
【6月更文挑战第13天】 本文介绍数据库设计包括规范化和反规范化。优化设计和应用规范化规则确保高效且准确的数据存储。
30 2
数据的反规范化架构
|
6天前
|
SQL DataWorks 安全
DataWorks产品使用合集之在进行测试数据集成时,目标库的数据是源库数据的3倍量,是什么导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
DataWorks产品使用合集之在进行测试数据集成时,目标库的数据是源库数据的3倍量,是什么导致的
|
8天前
|
分布式计算 DataWorks 关系型数据库
MaxCompute产品使用合集之DataWorks是否支持通过SQL方式在MaxCompute中查询数据,并通过数据集成服务将查询结果同步至MySQL数据库
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
10天前
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
|
11天前
|
存储 缓存 NoSQL
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质