1.1 信息就是位+上下文
【关键思想】
系统中所有的信息都是由一串比特位表示的,区分不同数据对象的依据就是这些数据对象的上下文。
【该做什么】
记住一些常用ASCII字符的整数值:
回车(CR) : 13 0D /r
换行(LF) : 10 0A /n
NUL : 0 00
空格 : 32 20 <sp>
整数0 : 48 30
整数9 : 57 39
大写A : 65 41
大写Z : 90 5A
小写a : 97 61
小写z : 122 7A
1.2 程序被其他程序翻译成不同的格式
从能够被人读懂的高级程序到能够被机器认识的一系列低级机器语言指令,中间需要一个翻译家,这就是编译系统。
【关键思想】
1,翻译的过程一般分四段:预处理 >> 编译 >> 汇编 >> 链接。对应了编译器的四个阶段的程序 : 预处理器(cpp)、编译器(ccl)、汇编器(as)和连接器(ld)。
1.3 了解编译系统如何工作是大有益处的
为什么要了解编译系统?
(1) 优化程序性能
(2) 理解链接错误
(3) 避免安全漏洞
1.4 处理器读取并解释存储在存储器中的指令
【问】运行可执行程序时发生了什么?
从我们在命令行输入可执行文件名到程序执行完在屏幕上显示执行结果这绝对不是一步就实现的。
首先,当我们在shell上敲命令的时候,我们所输入的字符就通过总线传到寄存器,再由寄存器送到内存上。
直到我们在shell上敲回车,shell才认为命令输入完成。这时候shell会执行一系列指令,将可执行文件从磁盘拷到内存上,实现可执行文件的加载。(术语DMA,直接存储器访问)。
加载完成后,CPU开始执行可执行文件中的主程序中的指令(打印hello world/n)。
hello world/n中的字节被从内存拷贝到寄存器堆,再从寄存器堆拷贝到显示设备,并最终显示在屏幕上。
【重要概念】
1,经典计算机系统硬件组成图。(待补上)
2, 总线: 贯穿系统的一组电子管道,在各个部件之间传递信息字节。
通常被设计成传送定长字节块(字),字中的字节数(字长)是一个基本的系统参数。
intel pentium字长为4字节,那么该系统中指针也应该是4字节的。
3,处理器: 执行存储在主存中指令的引擎。
处理器的核心: PC(程序计数器),字长大小的存储设备。任何时间点上都指向主存中的某条指令。
寄存器堆: 由一些字长大小的寄存器组成。
ALU负责计算新的数据和地址值。
4,CPU的操作:加载,存储,更新,I/O读,I/O写,跳转。
【该做什么】
熟记经典系统硬件组成图并联系具体的项目。
1.5 高速缓存
【概念】
对CPU而言,读磁盘 VS 读主存 = 1000万
读主存 VS 读寄存器 = 100
读L1 VS 读寄存器 = 1
读L2 VS 读L1 = 5
读主存 VS 读L2 = 5~10
【要做什么】
理解L1、L2来提高程序性能
1.6 形成层次结构的存储设备
【重要思想】
每个计算机系统中的存储设备都被组织成一个存储器层次结构。
一个层次上的存储器作为下一层次上的存储器的告诉缓存。
【要做什么】
理解整个存储其层次结构来提高程序性能。
1.7 操作系统管理硬件
【重要概念】
操作系统的用途:
1, 防止硬件被失控的AP滥用;
2, 为AP提供简单一致的控制复杂而又广泛不同的低级硬件设备。
操作系统是通过抽象来达到以上两个目的的。
文件是对I/O设备的抽象;
虚拟存储是对主存和磁盘I/O设备的抽象;
进程是对处理器,主存和I/O设备的抽象。