深入理解计算机系统——知识总结

第一章  全书概述 一  基础 1、程序的生命周期分为四个阶段:   Hello.c (源程序)   预处理器(cpp)Hello.i   编译器(ccl)hello.s   汇编器(as)hello.o(这时是个二进制文件)   链接器(id)(将函数并入到程序)   Hello (最后变成可执行的目标程序)

 

2、了解编译过程什么用:

 

  优化程序性能、理解链接时出现的错误、避免安全漏洞   二  系统的硬件组成   总线:贯穿整个系统的一组电子管道   I/O设备:系统与外界联系的通道(如鼠标键盘;显示器;磁盘)。I/O设备通过控制器和适配器与I/O总线连接。控制器和适配器的区别在于其组成方式,控制器是主印制电路板(主板)上的芯片组,适配器是一块插在主板插槽上的卡。它俩的功能都是在I/O设备和I/O总线之间传递信息   主存:一个临时存储设备,处理器执行程序时,它被用来存放程序和程序处理的数据。     物理上,它由一组DRAM(动态随机存取存储器)芯片组成。     逻辑上,它由一个线性的字节数组组成,每个字节都有自己唯一的地址(数组索引)   处理器:(CPU)是解释(或执行)主存中指令的引擎。核心是个叫做程序计数器(PC)的存储设备(或寄存器)。一通电就从程序计数器指向的存储器处读取指令、解释指令中的位,执行指令指示的简单操作,然后更新程序计数器指向下一条指令。   三  高速缓存 寄存器是L1的高速缓存;L1是L2的高速缓存;L2是主存的高速缓存;主存是磁盘的高速缓存。   四  操作系统 它有两个基本功能:防止硬件被失控的应用程序滥用;为应用程序提供简单一致的方法控制低级硬件   五  进程 操作系统实现进程交错执行的机制称为上下文切换(context switing);上下文切换就是——保存当前进程的上下文(context),恢复新进程的上下文。 进程所看到的虚拟地址空间由多个区(area)组成:由低到高是:程序代码和数据;堆;共享库;栈;内核虚拟存储器。   第二章 信息的表示和处理 一  信息存储 存储器的每一个字节都由一个唯一的数字来标识,成为地址(address);所有可能地址的集合就称为虚拟地址空间(virtual address space)。 C语言的指针有两个方面:它的值和它的类型,它的值表示的是某个对象的位置,而它的类型表示那个位置上所存储对象的类型(比如,整数或浮点数)   二  进制转换 对于2n,其十六进制转换公式为i+4j 例如211,十进制位2048,十六进制转换时,因为1(i=0),2(i=1),4(i=2),8(i=3)且11=3+4*2,所以它就是8的后面跟两个0,即0x800  (详见书上48页)   三  寻址和字节顺序 在几乎所有的机器上,字节对象都被存储为连续的字节序列,对象的地址为所使用字节序列中最小的地址。 表示一个对象的字节序列排序,有俩通用规则,   最低有效数字在最前面——小端法(little endian);   最高有效数字在最前面——大端法(big endian) 这是芯片加电启动时所用到的字节顺序规则。   程序编译过程: 假如,写一个C程序,有两个文件p1.c和p2.c,然后用Unix命令编译这行代码。这个命令实际上调用了一系列程序,将源代码转化成可执行代码。 首先,C预处理器会扩展源代码,插入所有用#include命令指定的文件,并扩展所有的宏。其次,编译器产生两个源文件的汇编代码,名字分别为p1.s和p2.s。接下来,汇编器会将汇编代码转化成二进制目标代码文件p1.o和p2.o。最后,链接器将两个目标文件与实现标准Unix库函数(例如printf)的代码合并,并产生最终可执行文件。 汇编程序员能看到的处理器状态: 程序计数器(称为%eip):表示将要执行的下一条指令在存储器中的地址。 整数寄存器:存储地址(对应C的指针)、整数数据,纪录程序状态,保存临时数据。 条形码寄存器:保存最近执行的算术指令状态信息。 浮点寄存器:存放浮点数据。   附相关概念扩展: GNU计划所使用的汇编器,一般称为gas,或依其可执行文件名称简称为as。它是GCC的默认后端。它用于汇编GNU操作系统Linux内核以及其他各种软件。 (GNU是“GNU is Not Unix”的递归缩写,GNU将要实现UNIX系统的接口标准) GCC(GNU Compiler Collection,GNU编译器集合),是一套由 GNU 开发的编程语言编译器。以及大部分UNIX系统的程序库和工具。 GAS中的每个操作都有一个字符后缀,表明操作数的大小。如mov(传送数据)指令有三种形式:movb(传送字节)、movw(传送字)和movl(传送双字)   本书是本经典的国外大学计算机专业教材,类似国内的计算机原理这门课,很厚,很详尽,刚开始看的时候自己毫无基础,看不懂,就没看完,如今工作多年再回过头来翻翻,反而觉得读起来津津有味。实践与理论的反复结合,能使自己的技术越来越扎实。
上一篇:U盘自动化安装CentOS7.4


下一篇:Orangepi 3 全志H6 uboot的编译与烧写