浑浑噩噩工作了一年了,作为一名程序员我是非常不合格的,至少现在还是不合格的。不能够静下心来好好的学习。立志要做一名好的程序员,并非科班出生的只能从基础知识开始补起。接下来的这一系列都是我从头学习《深入理解计算机系统》一书的笔记。一是为了牢牢记住一些有用的东西,二是为了激励自己每天看书学习。
废话不多说了,今天开始学习第一章计算机系统漫游:
这章主要了解两个问题:当系统上执行一个简单的hello程序时,系统发生了什么以及为什么会这样?
计算机系统是由硬件和软件系统组成的,他们共同工作来运行应用程序。那么程序的生命周期又是如何喃?一个程序的生命周期是从一个源文件开始的,即当我们程序员利用编辑器创建并保存一个hello.c的文件的时候,这个程序便有了他自己的生命,到系统上运行、输出信息、然后终止,
这便是一个程序的整个生命周期。
在linux系统上,源程序到目标可执行程序的转化是由编译器驱动程序完成的:
-
#include
-
int main()
-
{
-
printf("hello, world\n");
-
}
第一阶段:预处理阶段
与处理器cpp根据以字符#开头的命令,修改原始的c程序。如:第一行为#include,与处理器读取系统文件stdio.h的内容直接插入到程序文本中。得到另一个c程序,通常以.i作为文件扩展名。
第二阶段:编译阶段
编译器ccl将文本文件hello.i翻译成文本文件hello.s,包含一个汇编语言程序
第三阶段:汇编阶段
汇编器as将hello.s翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式。并将结果保存在目标文件hello.o中
第四阶段:链接阶段
hello程序调用了printf函数,它是每个c编译器都会提供的标准c库中的一个函数,存在于一个单独与编译好的文件中,链接器ld负责出来两个文件的合并,结果得到了可执行的hello程序。
处理器读并解释存储在存储器中的指令
将可执行程序hello输入到外壳(shell)的应用程序,就可以执行。
外壳是一个命令解释器,它输出一个提示符等待输入一个命令行。
系统的硬件组成
一个电信系统的硬件组成如上图,图中忽略左下脚“用户输入hello”这几个字。下面对图中的一些常用词进行简单解释:
1.总线:
贯穿整个系统,携带信息并负责在各个部件中传递。通常传送定长的字节块,也就是字(word)。
2.I/O设备
输入输出(I/O)设备是系统与外部世界的联系通道。
3.主存
临时存储设备,在处理器执行程序时,用来存放程序和程序出来的数据。物理上由一组动态随机存取存储器芯片组成。逻辑上存储器是一个线性的字节数组,每个字节都有其唯一的地址。
4.处理器
中央处单元(CPU)简称处理器,是解释或执行存储在主存中指令的引擎。其核心是一个字节长的存储设备或寄存器,称为程序计数器(PC)。在任何时刻,PC都指向主存中的某条机器指令。
阅读(1121) | 评论(0) | 转发(0) |