深入理解计算机系统(一)

一.计算机系统漫游

  • 每条C语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行文件
  • 预处理器、编译器、汇编器、链接器一起构成了编译系统
  • 硬件组成:总线(携带字节并负责在各个部件间传递)、I/O设备(通过控制器或者适配器与I/O总线相连)、主存(由一组DRAM芯片组成)、处理器(解释存储在主存中指令的引擎)
  • 高速缓存:L1高速缓存位于处理器芯片上,L2高速缓存通过特殊的总线连接到处理器,都是使用SRAM实现
  • 进程是操作系统对一个正在运行的程序的一种抽象,操作系统保持跟踪进程运行所需的所有状态信息;每个线程都运行在进程的上下文中,并共享同样的代码和全局数据
  • 虚拟存储器:为每个进程提供假象,即每个进程都在独占的使用主存;由不同区构成->程序代码和数据(运行时确定大小)、堆(动态扩展和收缩)、共享库、栈(用户栈,编译器用它来实现函数调用)和内核虚拟存储器
  • 并发:指一个具有多个活动的系统;并行:用并发使一个系统运行的更快

二. 信息的表示和处理

信息存储
大多数计算机使用8位的块,作为最小的可寻址的存储器单位。机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器。存储器的每个字节都由唯一的数字来标识,称为它的地址,所有可能地址的集合称为虚拟地址空间
小端法:最低有效字节在最前面
大端法:最高有效字节在最前面
C语言中字符串被编码为一个以null(值为0)字符结尾的字符数组
逻辑右移:在左端补0;算术右移:在左端补最高有效位
整数表示
无符号数的编码:每个介于0~(2^w-1)之间的数都有唯一一个w位的值编码
补码编码:将字的最高有效位解释为负权,也称为符号位,每个介于(-2^(w-1)~2^(w-1)-1)之间的数都有唯一一个w位的值编码
反码编码:最高有效位为代表-(2^(w-1)-1)
原码编码:最高位是符号位,用来确定剩下的位是取正权还是负权
当执行一个运算时,如果一个是有符号数另一个是无符号数,那么将隐式将有符号数强制类型转换为无符号数
扩充
将一个无符号数转换为一个更大的数据类型,只需要在开头添加0,称为零扩展
将一个补码数字转换为一个更大的数据类型,可以执行符号扩展,规则是在表示中添加最高位的值的副本(即最高位是1就添加1,是0就添加0)
当进行数据转换时,先要改变大小,再完成有符号到无符号之间的转换
截断
无符号数的截断结果为取模运算
有符号数的截断结果为先转换为无符号数取模结果再转换为有符号数
整数运算
无符号运算可以被视为一种模运算形式
补码加法:负溢出时加上2^w,正溢出时减去2^w;当x,y都是负数但是和为正数说明发生了负溢出;x,y都是正数但是和为负数说明发生了正溢出
补码的非:对每一位求补然后加1;右边第一个1的左边所有为取反
无符号乘法:同样对于乘积进行取模运算
补码乘法:同样截断w位
对于无符号和补码乘法来说,乘法运算的位级表示是一样的,都是进行截断即可
乘以常数:改为移位配合加减法进行操作
除以2的幂:无符号和补码数分别使用逻辑移位和算术移位来达到目的;对于负数来讲,可能会出现向下取整的情况,所以需要添加一个偏移量(2^k-1),k为移位数
浮点数
二进制小数:小数点左边是2的非负幂,右边是2的负幂
IEEE浮点表示:符号s、尾数M、阶码E,一个数等于(-1)^s*M*2^E;分为规格化的值、非规格化的值(阶码都是0)以及特殊值(阶码都是1时,小数位都是0代表无穷大,小数位非零代表NaN)。float对应1,23,8;double对应1,52,11
规格化的值:阶码的值E=e-Bias;e是无符号数(由k位阶码字段组成),Bias是2^(k-1)-1;尾数定义为1+尾数的小数表示
非规格化的值:阶码值E=1-Bias;尾数的值M就等于尾数的小数表示
向偶数舍入:将数字向上或者向下舍入,使得结果的最低有效数字是偶数
向零舍入:正数向下舍入,负数向上舍入
浮点运算:加法不具有结合性,加法满足单调性属性;乘法不具有结合性,在加法上不具备分配性,满足单调性属性
注意类型转换

猜你喜欢

转载自blog.csdn.net/u011955067/article/details/80431119