深入理解计算机系统读书笔记1
前段时间把以前的随笔一不小心全都删了,很是痛心,有将近两个月没有动笔。现在到了寒假,深感不能浪费,于是又重拾笔头。内容主要包括读书笔记和补一些原来丢失的文章。
1.编译系统
以GCC为例,分为四个部分,预处理器,编译器,汇编器,链接器。对于其他的编译过程,基本上也就是这样的流程,只不过有的会划分为三个部分而已。
- 预处理器:主要处理‘#’标志的头文件,读取例如stdio.h的内容,插入到源文件中,生成扩展名为.i的文件。
#include指令:用于包含文件,包含后代码就可以正确的调用该文件中声明的变量和函数。有两种使用方式:#include <iostream.h>和#include “stdafx.h”。尖括号的将包含系统默认目录的头文件或尖括号内的路径查找。通常是系统中自带的公共头文件。我安装了Mingw,所以用gcc/g++编译时 ,用的是./Mingw/include中的头文件。而双引号包含头文件则在源代码所在目录查找,没有则到默认目录找,通常用于包含程序作者编写的私有头文件。stdafx.h就是微软家自己弄的私有头文件,是非常有用的,不少初学者搞不懂是干嘛的,因此造成了非常多的错误。我会写篇文章再说说它。
#define和#undef:定义宏和取消定义宏。
#if:如果条件为真,则编译下面的代码;
1 | ifndef:如果宏没有定义则编译; |
具体用法请参看链接:
[参考链接]:(http://blog.csdn.net/wangxueji45/article/details/41753531)
编译器:将.i的文件编译为汇编代码,扩展名为.s。
汇编器:将.s文件编译为机器语言指令,是二进制的,扩展名为.o。
链接器:负责处理将函数调用等内容链接到文件中。例如:调用了printf函数,而这个函数是标准C库的函数。printf函数存在于printf.o这个单独的预编译好了的文件中。
我这里只是写了比较可能用到的预处理器方面,其他都略过了,详细点的可以看下面的链接。我打算学习汇编,有可能的话将来会回来补这些东西。
[参考链接]: http://www.ruanyifeng.com/blog/2014/11/compiler.html
2.系统的硬件组成
- 总线(bus):总线的东西较多,我单开一篇写。
- I/O设备 :键盘,鼠标,显示器,磁盘。
- 主存:动态随机存取存储器(DRAM),即常说的内存。
- 处理器 :CPU是解释或执行存储在主存中的指令的引擎,其核心是一个字长的存储设备(寄存器),称为程序计数器,在任何时候它指向主存中的某条机器语言指令(即含有该指令的地址)。另一个关键是算数逻辑单元(ALU)。注意,这个部分有许多说法,我认为《深入》这本书这里讲的有清楚,我参考王爽的《汇编语言》。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xianzheTM's site!