linux编程入门3.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:94 大小:2.5MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

linux编程入门3.pdf

linux编程入门3.pdf

预览

免费试读已结束,剩余 84 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Part1ProgramStructureandExecution信息的表示和处理程序的机器级表示处理器体系结构存储器层次结构2010_Spring_csapp@pe.cqnuCH02信息的表示和处理概述信息存储★整数表示★整数运算☆浮点数表示★2010_Spring_csapp@pe.cqnu信息的表示和处理.概述数据表示数据的机器表示:指能被机器硬件直接识别和引用的数据类型。线性表、队列、栈、向量、链表、树、图等软件系统所要处理的各种数据结构,是面向应用的信息的表示,最终被转换成机器中所具有的各种数据表示来实现。可见,数据表示是构建数据结构的基础。不同的数据表示可以为数据结构的实现提供不同的支持,表现在实现的效率和方便性上不同。因此,数据结构和数据表示是软、硬件的interface。系统结构设计者在确定软硬件的功能分配时,应考虑到机器中设置哪些数据表示,以便对应用中所遇到的数据结构能有高的实现效率。本节主要讨论I386处理器上的数据表示。3信息的表示和处理.概述数据表示、数据结构和CC语言的基本数据类型直接与底层硬件相对应。例如,C不存在内置的复数类型。某种语言要素如果底层硬件没有提供直接的支持,那么编译器设计者就不会在它上面浪费任何精力。C一开始并不支持浮点类型,直到硬件系统能够直接支持浮点数之后才增加了对它的支持。在本书中,C被直接映射到I386的数据表示之上,所以可通过讨论C的数据类型来学习I386的数据表示。对于I386数据表示之上的数据结构,是最终如何被表示为I386数据表示的,也是学习的重点。理解这种从数据结构到数据表示的映射关系有助于学会编写更有效率的程序。4信息的表示和处理.概述信息都被编码表示数据表示、数据结构都是对信息的描述,这些描述是通过编码来实现的。信息编码:建立信息对象和bits的一一对应关系。➢信息都用若干二进制位bits表示(字节倍数编码、解释器)➢不同的信息类型有不同的编码方案:数字编码、字符编码等➢三种最基本的数字编码无符号编码:表示非负整数二进制补码编码:表示整数浮点数编码:表示实数I386支持这三种数字编码的数据表示。其余类型的信息可以通过这三种数字编码和字符编码组成的数据结构来表示。5信息的表示和处理.概述信息都被编码表示计算机只能使用有限的位数来对数字编码,导致:整数的溢出和可结合、可交换浮点运算的溢出和不可结合、不可交换通过学习数字的编码表示,能够了解数字类型的取值范围及其不同算术运算的属性。对于编写在全部数值范围内都能正常工作,而且可以跨越不同机器、操作系统和编译器组合的可移植的程序来说,这种了解是非常重要的6信息的表示和处理.概述基于编码的信息处理在对信息编码的基础上,计算机才能对信息进行处理。字符常采用单字节编码,比较简单;数字采用多字节编码,比较复杂。本书详细讨论了I386数字编码的数据表示。计算机存储的是信息的编码,由ALU对编码进行运算操作。通过直接操作数字的位级表示,可以得到几种执行算术运算的方式,这对于理解编译算术表达式时产生的机器级代码是很重要的。本章从各种编码的基本定义开始,然后得出一些属性,例如可表示数字的范围、它们的位级表示以及算术运算的属性。7CH02信息的表示和处理概述信息存储★✗存储器的抽象✗信息的表示✗位操作和逻辑运算整数表示★整数运算☆浮点数表示★2010_Spring_csapp@pe.cqnu信息存储.存储器的抽象面向字节的存储器组织程序的信息是存储在存储系统中的。在32位系统中,机器级程序所看到的存储器是一个抽象的4G字节数组,即虚拟存储器。所有的地址集合称为虚拟地址空间;整个字节数组称为虚拟存储空间。虚拟存储器的通过不同类型的存储层次实SRAM,DRAM,diskOnlyallocateforregionsactuallyusedbyprogram9信息存储.存储器的抽象程序的运行时存储器映像MemoryinvisibletoKernelvirtualmemoryusercode0xc0000000Userstack(createdatruntime)%ebp(framepointer)%esp(stackpointer)Memory-mappedregionforprintf()sharedlibrarie