深入理解计算机系统——知识总结
Posted zhaot1993
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解计算机系统——知识总结相关的知识,希望对你有一定的参考价值。
第一章 全书概述
一 基础
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是“GNU is Not Unix”的递归缩写,GNU将要实现UNIX系统的接口标准)
GAS中的每个操作都有一个字符后缀,表明操作数的大小。如mov(传送数据)指令有三种形式:movb(传送字节)、movw(传送字)和movl(传送双字)
本书是本经典的国外大学计算机专业教材,类似国内的计算机原理这门课,很厚,很详尽,刚开始看的时候自己毫无基础,看不懂,就没看完,如今工作多年再回过头来翻翻,反而觉得读起来津津有味。实践与理论的反复结合,能使自己的技术越来越扎实。
以上是关于深入理解计算机系统——知识总结的主要内容,如果未能解决你的问题,请参考以下文章