高级语言学多了,现在感觉底层的基础知识甚是匮乏,所以想着看看这本经典数据来补充补充以前所不不理解的计算机基础知识,毕竟不是科班出生,要学的东西还是有很多的
1.1信息就是位+上下文
系统中所有的信息:磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传的数据,都是一串比特(位)表示的。区别不同数据对象的唯一方法就是数据对象的上下文。
1.2程序被其他程序编译成不同的格式
为了执行程序,每条语句都必须被其他的程序转为一系列的低级机器语言指令,然后这些指令按照一种可执行目标程序(可执行目标文件)的格式打包好,并以二进制的形式存储下来

编译.png
- 预处理:将头文件内容添加到程序文本中
- 编译:编译成汇编语言
- 汇编:翻译成机器语言指令
- 链接:合并预编译好的目标文件
1.4处理器读并解释在内存中的指令
1.4.1系统的硬件组成
- 总线
总线被设计成传送定长的字节块,也就是字(word),字长是一个基本的系统参数,如32位的机器字长是4个字节,64位的是8个字节 - I/O设备
每个I/O设备都是通过一个控制器或者适配器与I/O总线相连。两者的主要区别是他们的封装方式
控制器 :I/O设备本身或者主板上的芯片组
适配器:插在主板插槽上的卡 - 主存
存放程序和程序处理的数据,是一组动态随机存取存储器(DRAM)芯片组成的。也可以理解成是一个线性的字节数组 -
处理器
核心是一个大小为一个字的存储设备(寄存器),称为程序计数器(PC),PC指向主存中的机器语言指令。算数/逻辑单元(ALU)用来计算新的数据和地址值
image.png
1.5高速缓存存储器
存放处理器近期可能需要的信息,其中L1高速缓存的容量可达数万字节,速度与寄存器类似,L2容量为数十万到数百万字节,比L1慢5倍,比主存快5-10倍。两者所用的技术都是静态随机访问存储器(SRAM)。L3利用高速缓存的局部性原理,即程序具有访问局部区域里的数据和代码的趋势。

image.png
1.7操作系统管理硬件
1.7.1进程
通过处理器在进程之间来回切换以实现交错执行的机制称为上下文切换。从一个进程到另一个进程的转换是由操作系统内核管理的。内核是操作系统代码常驻主存的部分,上下文的切换也是由内核完成的。
1.7.2虚拟内存
对程序存储器的抽象。其为每个进程提供了一种假象,即每个进程都在独占地使用主存,每个进程看到的内存都是一致的。称为虚拟地址空间。该进程的虚拟进程空间包括了以下的内容:程序代码和数据、堆(malloc)、共享库、栈、内核虚拟内存。

image.png
1.8并发和并行
并发:一个同时具有多个活动的系统。如多个进程
并行:用并发来是一个系统运行得更快
- 线程级并发
单核处理器和多核处理器实现并发的原理不同。
超线程(同时多线程):允许一个CPU执行多个控制流的技术。即CPU的某些硬件有多个备份。如intel Core i7处理器可以让每个核执行两个线程,所以又称为4核8线程 - 指令级并行
可以同时执行多条指令的属性称为指令级并行。其实每条指令从开始到结束需要20个甚至更多周期,但最近的处理器可以保持每个时钟周期2~3条指令的效率。这种情况,我们称为超标量处理器。 - 单指令、多数据并行
一条指令可以产生多个可以并行执行的操作,即SIMD并行
