深入理解计算机系统#
1.1##
- 010101(比特序列)八位一字节,一字节表示某些文本字符。ASCII即用单字节大小的整数值表示字符
- 只有ASCII码字符构成的文件为文本文件,其他为二进制文件
1.2##
- 预处理
- 根据#读取头文件中内容并插入原文本文件.c得到.i文本文件
- 编译
- 编译器(ccl)将.i文本文件翻译成.s文本文件,包含汇编语言程序
- 汇编
- 将.s翻译成机械语言指令,打包成可重定位目标程序格式,保存在.o二进制文件中
- 链接
- 调用printf.o中的printf函数,合并入.o程序,变为可执行目标文件
1.3##
- 了解编译系统——好!
1.4##
- shell是一个命令行解释器
1.4.1##
- 总线
- 贯穿整个系统,携带并传递信息字节,通常传输定长的字节块:32位——4字节,64位——8字节
- I/O设备
- 输入/输出设备(In/Out)联系系统与外部:键鼠、显示器、磁盘……
- I/O设备通过控制器或适配器与I/O总线相连。相同的是,控制器和适配器用于在I/O设备和总线之间传递信息。不同的是,控制器是设备本身或系统的主板上的芯片组,适配器是插在主板插槽上的
- 主存
- 主存在处理执行程序时用来存放程序和程序处理的数据。物理上是由一组动态随机存取存储器(DRAM)芯片组成。逻辑上是一个线性字节数组
- 处理器
- CPU解释主存中指令,核心是程序计数器(PC)(此处核心指关键设备),为一字大小储存设备,PC始终指向主存中某条机械语言指令
- 处理器从PC指向的内存处读取、结束、执行指令,然后更新PC
1.5##
- 存储空间越大,运行越慢。于是在空间小的高速处理器与空间大的低速主存之间插入高速缓存(cache),利用高速缓存的局部性原理,在高速内存中存放可能经常访问的数据,使大部分操作可在高速缓存中完成。
1.6##
- 通过一个从小到大,从快到慢(寄存器->高速缓存->主存->二级存储)的存储器层次结构,可以提高程序的性能。
1.7##
- 操作系统连接程序和硬件。
- 操作系统的基本功能:
- 防止硬件被失控的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂的低级硬件设备
1.7.1##
- 进程是计算机科学中最重要和最成功的概念之一
- 处理器看似并发运行程序,实则交错切换执行。例如需要运行的进程数多于可运行CPU。被称为上下文切换:保存当前进程的上下文、恢复新进程的上下文,将控制权传递到新进程。
- 进程转换由系统内核(kernel)管理,内核是操作系统代码常驻主存的部分,它是系统管理全部进程所用代码和数据结构的集合。
- 第八章
1.7.2##
- 多线程并发balabalaba在第十二章
1.7.3##
低地址
- 程序代码与数据——在开始就被规定大小
- 堆——在运行是可动态扩展或收缩
- 共享库——存放C标准库和数学库这样的公用代码(第七章)
- 栈——编译器用它来实现函数调用,调用增长,返回收缩(第三章)
- 内存虚拟内存——为内核保留,不允许程序读写或调用
高地址
1.7.4##
- 文件就是字节序列,每个I/O设备都可看成文件
1.8##
- 网络可视为一个I/O设备,多个系统通过网络读取/发送其他/自己的数据
1.9##
- 系统是硬件与软件互相交织的集合体
1.9.1##
- Amdahl定律:想要显著加速整个系统,必须提升全系统中相当大的部分的速度(考虑到分权)
1.9.2##
- 并发:一个同时具有多个活动的系统
- 并行:用并发来使一个系统运行地更快
- 线程级并发
- 我们能够设计出同时有多个程序执行的系统,这导致了并发
- 超线程/同时多线程允许一个cpu执行多个控制流
- 指令级并行
- 流水线通过将执行一条指令所需要的活动划分为不同的步骤,将处理器的硬件组织成一系列的阶段,每个阶段执行一个步骤。这些阶段可以并行地操作,用来处理不同指令的不同部分
- 单指令、多数据并行
- 在最低层次上,一些特殊的硬件允许一条指令产生多个可并行执行的操作,这种方式被称为单指令、多数据。
- 线程级并发
1.9.3##
- 抽象的使用是计算机科学中最为重要的概念之一。
- 文件是多I/O设备的抽象,虚拟内存是对程序存储器的抽象,进程是对一个正在运行的程序的抽象,虚拟机是对整个计算机的抽象。