Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7997
  • 博文数量: 1
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2017-07-19 08:58
个人简介

就是要搞事情

文章存档

2017年(1)

我的朋友
最近访客

分类: LINUX

2017-07-25 22:57:39

浑浑噩噩工作了一年了,作为一名程序员我是非常不合格的,至少现在还是不合格的。不能够静下心来好好的学习。立志要做一名好的程序员,并非科班出生的只能从基础知识开始补起。接下来的这一系列都是我从头学习《深入理解计算机系统》一书的笔记。一是为了牢牢记住一些有用的东西,二是为了激励自己每天看书学习。
废话不多说了,今天开始学习第一章计算机系统漫游:
       这章主要了解两个问题:当系统上执行一个简单的hello程序时,系统发生了什么以及为什么会这样?
       计算机系统是由硬件和软件系统组成的,他们共同工作来运行应用程序。那么程序的生命周期又是如何喃?一个程序的生命周期是从一个源文件开始的,即当我们程序员利用编辑器创建并保存一个hello.c的文件的时候,这个程序便有了他自己的生命,到系统上运行、输出信息、然后终止,这便是一个程序的整个生命周期。
      
在linux系统上,源程序到目标可执行程序的转化是由编译器驱动程序完成的:
  1. #include
  2. int main()
  3. {
  4.     printf("hello, world\n");
  5. }

第一阶段:预处理阶段

与处理器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都指向主存中的某条机器指令。





阅读(1078) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~