1.第一章 温故而知新
1.1 从Hello World 说起
对于下面这样一个简单的Hello World程序, 提出以下的问题:
#include <iostream>
int main()
{
printf("Hello World!") ;
return 0;
}
- 编译器编译产生的可执行文件中是什么?除了机器码还有什么?他们是怎么存放的?怎么组织的?
- C语言库和运行时库是怎么回事?是怎么实现的?
- Hello World 程序是怎么运行起来的,操作系统是怎么装载他的,他从哪里开始执行?到哪结束?main函数之前发生了什么?main函数结束之后又发生了什么?
- Hello World程序运行时在内存中是什么样子
以上几个问题是我挑选出来概念比较模糊的。希望在后面的部分能够较好的解决这些疑惑
1.2 万变不离其宗
计算机硬件有三个部分最为关键:CPU,内存,IO控制芯片。对于一些高级语言的开发者,基本上只需要关注CPU,对于提供虚拟机的一些语言,甚至连CPU都不需要关心。
IO控制芯片具体是哪些部件,是指声卡,显卡,磁盘控制器吗?
早期,计算机CPU和内存速度相似,而IO设备速度慢很多,为了协调CPU与IO设备之间的速度,并且与之有较为统一的接口进行通信,为每个IO设备设计了IO控制器。当时,所有的IO控制器和CPU,内存是连接在同一条BUS上的。
后来,随着CPU速度超越内存速度,CPU和内存通过一条系统总线进行通信,其中系统总线与内存速度一致,而CPU采用倍频的方式进行工作&#