随笔分类 -  深入理解计算机系统

摘要:访问信息 一个x86-64的中央处理单元(CPU)包含一组16个存储64位值的通用目的寄存器。这些寄存器用来存储整数数据和指针。图3-2显示了这16个寄存器。它们的名字都以%r开头,不过后面还跟着一些不同的命名规则的名字,这是由于指令集历史演化造成的。最初的8086中有8个16位的寄存器,即图3-2 阅读全文
posted @ 2019-10-02 15:06 北洛 阅读(923) 评论(0) 推荐(0) 编辑
摘要:程序编码 假设一个C程序,有两个文件p1.c和p2.c。我们用Unix命令行编译这些代码: 命令gcc就是GCC编译器,这是Linux默认的编译器。编译选项-Og告诉编译器使用会生成符合原始C代码整体结构的机器代码的优化等级,使用较高级别的优化产生的代码会严重变形,以至于产生的机器代码和初始源代码之 阅读全文
posted @ 2019-08-07 17:36 北洛 阅读(2029) 评论(1) 推荐(0) 编辑
摘要:浮点数 浮点表示对形如的有理数进行编码。它对执行涉及非常大的数字、非常接近于的数字,以及更普遍地作为实数运算的近似值的计算,是很有用的。 二进制小数 理解浮点数的第一步是考虑含有小数值的二进制数字。首先,让我们来看看更熟悉的十进制表示法。十进制表示法使用如下形式的表示: 其中每个十进制数di的取值范 阅读全文
posted @ 2019-07-27 09:59 北洛 阅读(1042) 评论(0) 推荐(0) 编辑
摘要:整数运算 有时候我们会发现,两个正数相加会得到一个负数,而表达式x<y和x-y<0的结果不同,这些属性是由于计算机运算的有限性造成的。 无符号加法 考虑两个非负整数x和y,满足0<=x,y<2w。每个数字都能表示为w位的无符号数字。然而,计算它们的和,我们可能得到一个范围在0到2w+1-2的数字。表 阅读全文
posted @ 2019-07-24 21:09 北洛 阅读(730) 评论(0) 推荐(0) 编辑
摘要:整数表示 图2-3列出了我们引入的数学术语,用于精确定义和描述计算机如何编码和操作整数: 图2-3 整数的数据与算数操作术语。下表w表示数据的位数 整型数据类型 C语言支持多种整型数据类型——表示有限范围整数,如图2-4和2-5所示: 图2-4 32位程序上C语言整型数据类型的典型取值范围 图2-5 阅读全文
posted @ 2019-07-12 15:06 北洛 阅读(2014) 评论(0) 推荐(0) 编辑
摘要:信息存储 大多数计算机使用八位的块,或者字节,作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能地址的集合就称为虚拟地址空间。顾名思义,这个虚拟地址空间只是一个展现给机器级程序的 阅读全文
posted @ 2019-07-06 11:40 北洛 阅读(780) 评论(0) 推荐(0) 编辑
摘要:计算机系统漫游 存储设备形成层次结构 在处理器和一个较大较的设备(例如主存)之间插入一个更小更快的存储设备(例如高速缓存)的想法已经成为一个普遍的观念。实际上,每个计算机系统中的存储设备都被组织成一个存储器层次结构,如图1-8所示: 图1-8 一个存储器层次结构的示例 在这个层次结构中,从上至下,设 阅读全文
posted @ 2019-06-29 17:06 北洛 阅读(303) 评论(0) 推荐(0) 编辑
摘要:计算机系统漫游 信息就是位+上下文 我们先来看下面的代码: hello.c hello程序的生命周期是从一个源程序(或者说源文件)开始的,即hello.c。源程序实际上是由值0和1组成的位(又称为比特)序列,8个位被组织称一组,称为字节。每个字节表示程序中的某些文本字符。大部分的现代计算机系统都是使 阅读全文
posted @ 2019-06-27 08:36 北洛 阅读(303) 评论(0) 推荐(0) 编辑