《深入理解计算机系统(第三版)》第二章

20179202杨晓桐 20179202杨晓桐     2022-10-05     361

关键词:

一、信息存储

1.机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器,每个字节都有一个唯一的数字来标识,称为地址,所有可能地址的集合称为虚拟地址空间。

2.每台计算机都有一个字长,指明指针数据的标称大小。32位程序和64位程序区别在于该程序如何编译,而不是其运行的机器类型。C语言各种数据类型分配的字节数如下:

int32_t和int64_t分别为4个字节和8个字节,数据大小固定,不随编译器和机器设置而变化。

3.寻址与字节顺序

  • 最高有效字节在最前面即低地址的为大端法,主要用于IBM与Sun机器
  • 最低有效字节在最前面的为小端法,主要用于Intel及其兼容机

在Linux和Windows运行不同程序对象的字节表示程序结果如下,可以看出它们都是小端法机器:

4.布尔运算&对|,|对&有分配律。位向量的应用对集合编码。有很多不同的信号会中断程序执行,通过指定一个位向量掩码,有选择地使能或屏蔽一些信号,1表示信号i是有效的,0表示该信号被屏蔽。

5.逻辑运算认为非0就是true,而0表示false;逻辑运算如果第一个表达式能确定结果就不会对第二个求值。

6.移位运算

二、整数表示

1.补码的最高有效位为符号位,无符号数、补码编码具有唯一性。最小的负数TMin为[1000]结果为-8,最大的正数TMax[0111]结果为7,得出|TMin| = |TMax| + 1,补码范围的不对称性来源于一半的位模式表示负数,一半的位模式表示非负数(0是非负数,故多出一个数)。-1和UMax有同样的位表示,0在两种表示中都是全0。

2.有符号数和无符号数之间的转换


C语言中,如果执行一个运算,它的一个运算符是有符号另外一个无符号,那么就会隐式的把有符号的参数强制类型转换为无符号数,并假设这两个都是非负数来进行计算。如比较:-1  < 0U的值时,先将-1转无符号数:4294967295  < 0U 就会出现问题。

3.扩展位表示:将一个数据大小改变,和无符号有符号之间这两组转换的相对顺序,会影响一个程序的行为。如果将short转为unsigned时,就会先改变大小,然后再完成有符号到无符号的转变。如short x = -12345 ,则(unsigned)x=(unsigned)(int)x,先将0X CF C7扩展成0X FF FF CF C7,然后再进行到无符号数的转化,最后得到4294954951。

4.截断数字:

  • 对于无符号数:15(1111) 截断3位,就是将15 mod 8(2的3次方) = 7 (111)
  • 对于有符号数:-1(1111) 截断3位,就是先将-1转为无符号数15,然后mod 8 = 7(111),然后再把7转为有符号数-1

三、整数运算

1.无符号数和补码的加法

如正溢出[0101] +[0101] = 5 + 5 = 10 = [01010]截断最高位0结果为[1010]=-6; 负溢出 [1000]+ [1000]= -8 + -8 = -16 = [10000]截断高位1结果为[0000]=0

2.无符号数和补码的乘法:如果w位的两个数相乘,结果最大可能是2w位,C语言中使用固定精度的运算,这就导致了结果只能截断到w位,只保留真实值的低w位。

3.乘法运算太慢,于是编译器就使用移位和加法指令来替代乘以常数。除法指令更慢,经常用右移来代替。乘以常数(左移),除以2的幂(右移)。整数除法舍入到0。除以2的幂的补码除法向下舍入,如-7/2不是-3而是-4,通过移位前“偏置”这个值,来向上舍入。X/Y(向上舍入) = (X+Y-1)/Y(向下舍入),例如-30/4(向上舍入)=-7=-27/4(向下舍入)。

四、浮点数

1.IEEE浮点表示

  • 规格化的值: E≠0或者E≠255(exp的位模式不全为0或1),阶码段被解释成有偏置值形式的有符号整数E=e-Bias,e为无符号数,Bias = 2的k-1次方-1。M尾数定义为1+f(隐含了以1开头的表示)
  • 非规格化值:非规格化数提供了一种表示数值0的方法,也表示非常接近于0和0的数。exp的位模式全为0,E=1-Bias,M = f
  • 特殊值:exp的位模式全为1。当M=0时得到无穷大s=0是正无穷大,s=1时是负无穷大;当M≠0时结果值为Not a Number(NAN)

非规格化偏置被设置成1-Bias,而不是-Bias,其实是补偿非规格化的尾数没有隐含的1开头这一事实。
将整数12345二进制表示[11000000111001]转化为单精度浮点表示,将二进制左移13位表示为1.1000000111001 X 2的13次方。为了用IEEE单精度形式来编码,丢弃开头的1,并在末尾增加10个0,M = [10000001110010000000000]。为了构造阶码字段,用13加上偏置量127得140,二进制表示为[10001100],再加上符号位0最后结果就是[01000110010000001110010000000000]。

12345(0X3039)和12345.0(0X4640E400)的位级表示如下,可以看到浮点数尾数M和0x3039恰好相差最高位1。这个位就是隐含的开头的位1。

2.由于舍入而产生的丢失精度,浮点数的运算中不具有结合性,具有交换性、单调性。

3.如果机器使用IEEE浮点,那么就是向偶数舍入。

五、问题及解决

p68页!为什么-3乘以3得到[110111],用补码乘法如何列式计算?

经过查资料知道了和普通乘法不同,补码乘法需要拓展前面的位(符号拓展)不能默认为0,最高有效位Y2是符号位,权重是-2^(w-1),所以要减去:

因此101乘以011,199乘以111列式如下:

《深入理解计算机系统》(第三版)读书疑问

问题:第一章helloworld是怎样工作的?预处理器、编译器、汇编器、链接器是怎样把.c的源程序分别修改为.i、.s.、.o的程序的?第二章反码和补码在作用上有什么区别?第三章直到型循环和当行循环有什么异同?第四章Y86指令集... 查看详情

读书笔记《深入理解计算机系统》(第三版)概述

  《深入理解计算机系统》第三版刚出来不到一周,便买下了这本书;之所以阅读本书,一方面源于网友推荐以及豆瓣不错的评分、评价;另一方面是针对本人非科班出身,计算机系统相关的知识相对比较薄弱,很多情况下此... 查看详情

20179215《深入理解计算机系统(第三版)》第三章

《深入理解计算机系统》第三章程序的机器级表示学习读书笔记一、这章主要任务:?二、程序编码?计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节。对于机器级编程来说,其中两种抽象尤为重... 查看详情

《深入理解计算机系统(第三版)》第三章

3.1程序编码1.计算机系统使用了多种不同形式的抽象,对于机器级编程来说,两种抽象尤为重要:指令集体系结构(ISA):定义了处理器状态、指令的格式,以及每条指令对状态的影响机器级程序使用的存储器地址是虚拟地址:提... 查看详情

《深入理解计算机系统(第三版)》第一章

1.知识总结(主要对新知识)(1)计算机提供不同层次的抽象表示,来隐藏实际实现的复杂性文件是对I/O设备的抽象表示虚拟存储器是对主存和磁盘I/O设备的抽象表示进程是对处理器、主存和I/O设备的抽象表示(2)程序员必须... 查看详情

《深入理解计算机系统》(第三版)第一章疑问思考

...过学习,弄清楚了操作系统的中断机制:是操作系统获得计算机控制权的根本保证。其基本原理是:设备在完成自己的任务后向CPU发出终端,CPU判断优先级,然后确定是否响应。如果响应,则执行中断服务程序,并在中断服务程... 查看详情

《深入理解计算机系统(原书第三版)》pdf

下载地址:网盘下载 内容简介  · · · · · ·和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下:基于x86-64,大量地重写代码,首次介绍对处理浮... 查看详情

《深入理解计算机系统(第三版)》第四章

4.1Y86-64指令集体系结构1.指令体系结构:处理器支持的指令和指令的字节级编码。2.与X86-64相比,Y86-64指令集的数据类型、指令和寻址方式要少一些,字节级编码也比较简单,机器代码没有Y86-64紧凑,虽简单但足够完整。3.定义一... 查看详情

速读《深入理解计算机系统(第三版)》问题及解决

第一章计算机漫游P13:用户栈和运行时堆有什么区别?数据结构中经常说堆栈,这里的堆和栈一样吗?和操作系统的堆、栈有什么区别?参考:堆和栈的区别(内存和数据结构)操作系统:栈:由操作系统自动分配释放,存放函数的... 查看详情

《深入理解计算机系统(原书第三版)》pdf+python经典书籍两本

神书一样的存在,其中很多知识面试常考百度网盘链接:https://pan.baidu.com/s/1jTVO_KF-U4zJ_2RByuFmmw提取码:jpky  内容简介  · · · · · ·和第2版相比,本版内容上*大 查看详情

求《深入理解计算机系统(第三版)》的pdf中文版

第三版更新了最新到X86-64位,各个章节更加容易阅读和理解,中文第三版可以参考:https://zhidao.baidu.com/question/139032425214224925.html?fr=iks&word=%CE%D2%C2%F2%C1%CB%D2%BB%B1%BE%D6%BD%D6%CA%B5%C4%A1%B6%C9%EE%C8%EB%C0%ED%BD%E2%BC%C6%CB%E3%BB%FA%CF%B5%CD%B3%A1%B7%B5%D... 查看详情

深入理解计算机系统(第二版)----之一

第一部分:程序结构和执行  第1章:计算机系统漫游  第2章:信息的表示和处理  第3章:程序的机器级表示  第4章:处理器体系结构  第5章:优化程序性能  第6章:存储器层次结构第二部分:在系统上运行程序... 查看详情

深入理解计算机系统(代码片段)

深入理解计算机系统卡内基·梅隆一门棵。原书第3版资料.第三版源码.原书第2版资料.计算机系统漫游源文件到目标文件的翻译过程可分为四个阶段,这四个阶段的程序被称为预处理器,编译器,汇编器和链接器,它们一起构成... 查看详情

深入理解计算机系统第三章大略和第五章大略

这2章总结的很少,主要是觉得没那么重要。1.2个操作数的指令,第二个操作数通常是目的操作数:movbab,moveatob,而addab,b+=a,指令分为指令类,如mov类:movb,movw,movl,b指一个字节,w表示2个字节,l表示4个字节         ... 查看详情

《深入理解java虚拟机-jvm高级特性与最佳实践(第三版)》阅读笔记

《深入理解Java虚拟机》阅读笔记本repository为《深入理解Java虚拟机-Jvm高级特性与最佳实践(第三版)》阅读笔记,因为第一章主要讲的是Java的发展历史,这里就不做笔记,直接从第2章的"Java内存区域与内... 查看详情

深入理解计算机系统第二章

...tps://www.bilibili.com/video/BV1iW411d7hd?p=2学习书本:《深入理解计算机系统》第3版。信息存储:8位=1字节;内存所有可能地址集合称为“虚拟地址空间”;每个程序对象可以视为一个“字节快”,程序本身是一个字节序列... 查看详情

2017-2018-120179215《深入理解计算机系统》第二章

《深入理解计算机系统》第二章学习笔记?这章主要通过四个部分进行介绍:信息存储、整数表示、整数运算以及浮点数。重点描述了无符号数和数的补码的表示特性。我们要知道对计算机的算术运算有深刻的理解是写出可靠程... 查看详情

深入理解计算机系统-第二章

疑惑:***."十进制数字x的ASCII码正好是0x3x"(p31)```.照上面这么说,十进制1的ASCII码该是0131,很明显错误的,找到一个ASCII码来看下"1"的ASCII码是"49",再仔细参考下书中上下文,发现上面说了十进制1的ASCII码是31,那原句这么说"十进... 查看详情