2018-2019-1 20189224 《深入理解计算机系统》第二周学习总结
二进制信号能够容易的被表示、存储和传输。
主要研究三种数字表示:无符号编码——大于或等于0的数字;补码编码——有符号整数;浮点数——实数的科学计数法以2为基数的形式
计算机最小的可寻址内存单位:8位的块/字节
虚拟内存:机器级程序将内存视为一个大的字节数组
虚拟地址空间:所有可能地址的集合
虚拟地址以字为地址进行编码
计算机的字长:指明指针数据的标称大小
整数表示
补码转无符号编码
补码转二进制编码
补码转反码
补码转原码
有符号转无符号
无符号转有符号
整数运算
无符号加法
无符号求反
补码加法
补码的非
无符号乘法
补码乘法
上周测试
1.(B)就是位+上下文
A .数据
B .信息
C .知识
D .数据结构
解析:信息就是位+上下文:计算机系统中的所有信息都是由二进制串表示的,区分这些数据对象的唯一方法是读到这些数据的上下文。
2.Linux中,内核虚拟内存在虚拟地址空间的低端。(B)
A .正确
B .错误
解析:p13 内核虚拟内存在虚拟地址空间的最顶端而不是最低端
3.实现进程这个抽象概念需要低级硬件和操作系统软件之间的紧密合作。(A)
A .正确
B .错误
解析:p12 进程是操作系统对正在运行的程序的一种抽象。一个系统上可以同时运行多个进程,每个进程好像独占的使用硬件。所谓并发,是说一个进程的指令和另一个进程的指令交错执行。操作系统实现这种交错执行的机制称为上下文切换。操作系统跟踪进程运行所需的所有状态信息(也就是上下文),任何一个时刻,处理器只能运行一个进程。当操作系统决定要把控制权从当前进程转移到一个新进程时,就要进行上下文切换,即保存当前进程的上下文,恢复新进程的上下文,然后将控制权转交给新进程,新进程就从上次停止的地方开始执行。实现进程这个抽象概念需要低级硬件和操作系统软件之间的紧密合作
4.操作系统有两个基本功能:防止硬件被滥用;向应用供一致的机制来控制低级硬件设备。实现这两个功能相关的抽象有(ACD)
A .文件
B .虚拟机
C .虚拟内存
D .进程
解析:课本p10 操作系统有两个基本功能:防止硬件被失控的应用程序滥用;向应用程序提供简单一致的机制来控制复杂的低级硬件设备。操作系统通过几个抽象的基本概念(进程、虚拟存储器和文件)来实现以上两个基本功能。
5.存储器层次结构的主要思想是(A)
A .上一层的存储器作为低一层存储器的高速缓存
B .存储设备形成存储层次结构
C .存储器分为主存和辅存
D .较大的存储器运行慢,快速设备造价高
解析:p10 在这个结构中,从上到下,设备容量越来越大,运行速度越来越慢,同时造价也越来越便宜。存储器层次结构的主要思想是上一层的存储器作为下一层存储器的高速缓存。上图中顶层的寄存器是L1的高速缓存,L1是L2的高速缓存,以此类推。从这个角度讲,程序员可以利用对整个存储器层次结构的理解来提高程序的性能。
6.处理器的()操作可以从寄存器中复制一个字节的数据到主存中。
A .加载
B .存储
C .操作
D .跳转
解析:
加载:把一个字节或者字从主存复制到寄存器,并覆盖寄存器原来的值。
存储:把一个字节或者字从寄存器复制到主存的某个位置,并覆盖掉主存该位置原来的值。
操作:把两个寄存器的内容复制到ALU,ALU对这两个内容做算术运算,将结果存放到一个寄存器中,并覆盖掉原来的值。
跳转:从指令本身中抽取一个字,复制到PC中,并覆盖掉PC中原来的值。
7.主存在逻辑上可以看作(A)
A .字节数组
B .字数组
C .双字数组
D .四字数组
解析:p6 存储器:主存储器是一个易失性存储区,也就是常说的RAM,它是一个程序和数据的暂存场所。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的索引(也就是地址的概念)。一般不同的机器指令都有不同的字节长度。
8.I/O设备可以通过(AD)与I/O总线相连。
A .控制器
B .主存
C .处理器
D .适配器
解析:p5 I/O设备是计算机系统与外界通信的渠道。上图所示的USB、显示器、磁盘和键盘鼠标等都是I/O设备。I/O设备通常由机械部件和电子部件两部分组成,其中,电子部件又称为设备控制器或适配器。每一个I/O设备都是通过一个控制器与I/O总线连接。I/O设备又分为块设备和字符设备两种。上述中磁盘、USB等就是常见的块设备,而键盘鼠标和网络接口为字符设备。
9.计算机中总线传送定长的数据,这个定长是(B),是一个基本的系统参数。
A .字节
B .字
C .双字
D .四字
解析:总线实际上就是一组电子管道,它负责计算机系统各部件之间字节信息的传递。通常总线传输一些定长的字节块,这个定长的字节块也就是字(word)的概念。一个字包含的字节数即为这个系统的字长。我们说32位的计算机的字长为4个字节,64位的计算机字长为8.
10.计算机系统的硬件组成包含(ABCD)
A .总线
B .I/O设备
C .主存
D .处理器
解析:
CPU:CPU是中央处理单元的简称。它负责解释执行存储在主存储器中的指令。CPU的核心部分为算术逻辑单元ALU、程序计数器PC和一些寄存器。其中,PC本身是一个字长的存储设备,它时时刻刻的只想主存中的某条机器语言指令。从系统上电以后,处理器从程序计数器PC指向的存储器读取指令,解释指令中的位,然后更新PC,使其指向下一条指令,具体的顺序由指令集结构所决定。
总线:总线实际上就是一组电子管道,它负责计算机系统各部件之间字节信息的传递。通常总线传输一些定长的字节块,这个定长的字节块也就是字(word)的概念。一个字包含的字节数即为这个系统的字长。我们说32位的计算机的字长为4个字节,64位的计算机字长为8.
主存储器:主存储器是一个易失性存储区,也就是常说的RAM,它是一个程序和数据的暂存场所。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的索引(也就是地址的概念)。一般不同的机器指令都有不同的字节长度。
I/O设备:I/O设备是计算机系统与外界通信的渠道。上图所示的USB、显示器、磁盘和键盘鼠标等都是I/O设备。I/O设备通常由机械部件和电子部件两部分组成,其中,电子部件又称为设备控制器或适配器。每一个I/O设备都是通过一个控制器与I/O总线连接。I/O设备又分为块设备和字符设备两种。上述中磁盘、USB等就是常见的块设备,而键盘鼠标和网络接口为字符设备。`
11.熟悉编译系统的好处有:(ABD)
A .优化程序性能
B .理解链接时出现的错误
C .有助于设计处理器
D .避免安全漏洞
解析:p4B:在我们的经验里,一些最令人困惑的错误都与链接器操作相关,尤其是当你尝试构建大型软件系统时。例如,当连接器报告它不能解析一个引用时意味着什么?静态变量和全局变量的的区别是什么?如果你在不同的C文件中定义两个相同名字的全局变量会发生什么?静态库和动态库的区别是什么?为什么我们在命令行列举库的顺序是重要的?最吓人的是,为什么链接器相关的错误在运行时才出现?你将在第七章得到这些问题的答案。
D:许多年来,缓存溢出缺陷已经引起了网络和互联网服务器中的大部分安全漏洞。这些缺陷之所以存在,是因为几乎没有程序员理解去仔细限制从不可信源接收到的数据的数量和形式的必要性。学习安全编程的第一步是数据和控制信息被存储在程序栈的方式所导致的结果。在第三章,我们讲解栈的问题和缓存溢出缺陷作为我们汇编语言学习的一部分。我们也会学到一些方法,这些方法能被程序员,编译器,操作系统用来减少被攻击的威胁。
12.gcc 把源程序翻译成可执行文件的四个阶段是:预处理阶段,编译阶段,汇编阶段,链接阶段,其中汇编阶段用到的工具和相应的gcc命令是(C)
A .cpp: gcc -E hello.c -o hello.i
B .ccl: gcc -S hello.i -o hello.s
C .as: gcc -c hello.s -o hello.o
D .ld: gcc hello.o -o hello
解析:gcc命令:ESc, 生成文件后缀iso
预处理阶段:使用预处理器cpp,相应命令是: gcc -E hello.c -o hello.i
编译阶段:使用编译器ccl,相应命令是: gcc -S hello.i -o hello.s
汇编阶段:使用汇编器as,相应命令是:gcc -c hello.s -o hello.o
链接阶段:使用链接器ld,相应命令是: gcc hello.o -o hello
13.Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比。(B)
A .正确
B .错误
解析:p16 Amdahl定律:当我们对系统的某个部分加速时,其对整个性能的影响取决于该部分的重要性和加速程度。