深入理解计算机系统
MUTANT_HXY
这个作者很懒,什么都没留下…
展开
-
Task06:存储器层次结构
存储器的层次结构 局部性 重复引用相同变量的程序有良好的时间局部性 对于步长为k的引用模式的程序,步长k越小,空间局部性越好 对于取指令,循环有好的时间和空间局部性 循环体越小:时间局部性越好 循环迭代次数越多:空间局部性越好 存储的层次结构 为了将不同存储器存储技术之 的差异性与 算机软件对局 性的 求 两 结合互补 人们构造了一种存储器层次结构。如图是一个经典的存储器层次结构 ...原创 2022-01-04 01:09:58 · 275 阅读 · 0 评论 -
Task05:优化程序性能
编写高效程序需要做到三点:1.必须选择一组适当的算法和数据结构;2.必须编写出编译器能够有效优化以转换成高效可执行代码的源代码(对于这一点,理解优化编译器的能力和局限性很重要);3.将一个任务分成多个部分,这些部分可以在多核和多处理器的某种组合上并行计算。对于优化程序的一个挑战就是尽管做了大量的变化,但还是要尽量维护代码的简洁和可读性。 程序优化的第一步就是消除不必要的工作,让代码尽可能有效地执行所期望的任务。包括不必要的函数调用、条件测试和内存引用。 为了使程序性能最大化,程序员和编译器都需要知道一个模型原创 2021-12-30 00:29:21 · 365 阅读 · 0 评论 -
Task04:处理器体系架构
Y86-64架构 首先,我们来看一下什么是程序员的可见状态,这里的程序员既可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器,可见状态是指每条指令都会去读取或者修改处理器的某些部分,例如内存、寄存器、条件码、程序计数器以及程序状态等。 在Y86-64指令系统中,寄存器%rsp也是被定义为栈指针,至于其他14个寄存器没有固定的含义。 Y86-64指令 ...原创 2021-12-28 01:36:29 · 932 阅读 · 0 评论 -
Task03:程序的机器级表示
生成汇编文件mstore.s 并用vim 打开 : gcc -Og -S mstore.c 以. 开头的行是指导汇编器和接器工作的伪指令,完全可以忽略. 16个通用目的寄存器 两种保存器 寄存器的意义 mov指令原创 2021-12-26 01:08:13 · 173 阅读 · 0 评论 -
Task02:信息的表示和处理
信息的存储 整数运算 计算机存储整数 截断 将 int 类型强制类型转换成 short 类型时,int 类型高 16 位数据被丢弃,留下低 16 位的数据,因此截断一个数字,可能会改变它原来的数值。 位移运算 左移:填充0; 逻辑右移:填充0; 算数右移:填充最高位的值。 对于无符号数,右移为逻辑右移;对于有符号数,右移为算数右移。 移动K位,K很大时:设数据类型为w位,移动位数为为w%k位。 浮点数 含有小数值的二进制数表示: IEEE 的关于浮点数的表示: 64 位双精度浮点数,其二进制位与浮点原创 2021-12-18 00:19:13 · 186 阅读 · 0 评论 -
Task01:计算机系统漫游
第1章 计算机系统漫游 1 编译系统 计算机系统:由硬件和系统软件组成,共同工作来运行应用程序 编译系统:GCC编译器驱动程序读取源文件hello.c,翻译成一个可执行目标文件,执行4个阶段的程序(预处理器、编译器、汇编器和链接器) 预处理阶段:根据以字符#开头的命令,修改原始的C程序 编译阶段:编译器将文本文件hello.i翻译成文本文件hello.s 汇编阶段:汇编器将hello.s翻译成机器语言指令,并把这些指令打包成可重定向目标程序hello.o 链接阶段:链接器将标准库中的文件合并到hello.o原创 2021-12-15 00:31:55 · 1712 阅读 · 0 评论