原创 第一章 计算机系统漫游

2011-2-20 21:21 1146 4 4 分类: 软件与OS

       前面的话:今天终于把《深入理解计算机系统》看完了,从拿到书到今天掩卷,用了大约整整一个学期的时间。由于很多地方并没有理解的很透彻就匆匆而过,必然会漏掉很多东西。计划再从整本书的角度,并结合实例及个人体会将此神作再读一遍,想必到时候会有现在缺席的掩卷而泣的感觉吧。重读的过程不会像第一遍一样从头到尾通读,有顺序有重点的选读是要采用的策略。

 

1.什么叫信息?

计算机系统中包含了很多信息,如磁盘文件、存储器中的程序、存储器中存放的用户数据以及网上传送的数据。这些数据不论在用户眼里看来是什么格式的,在计算机系统最底层,就是一串的比特位。我们经常说,在计算机眼里,代码和数据并没有什么区别说的就是这个意思。计算机区分这些信息的唯一方法是根据这些数据所在的上下文。那么,信息是什么?信息就是位+上下文。

2.一个hello world程序的生命周期。

记得最开始学写程序时,曾经简单的以为我们写的hello world 程序被编译成可执行文件后放在硬盘里,当我们双击那个.exe文件后,计算机就开始把他的输出传送到屏幕。没有对计算机系统硬件组织的概念,没有对存储器组织层次的概念,更不谈链接装载等高级话题了,连内存和硬盘都分不清。汗~~

  为了了解运行hello world程序时计算机发生了什么,我们需要理解一个典型的硬件组织。当初学《计算机基础知识概论》时像背书一样背住了计算机系统由软件和硬件组成,硬件又由cpu、存储器、输出设备、输入设备组成。再次汗一个,那时根本不知道这里说的存储器是内存,还总以为是硬盘,事实上硬盘应该属于io设备。

      当我们在一个linux系统上运行gcc –o hello hello.c时,一个hello可执行文件就生成了。在生成hello可执行文件的过程中,发生了这么些事情:gcc 编译器读取源程序hello.c,并把它翻译成一个可执行目标文件hello,这个翻译的过程是分为四个阶段的。

1)         预处理阶段。

2)         编译阶段。

3)         汇编阶段。

4)         链接阶段。

涉及到四个程序:预处理器,编译器,汇编器和链接器。

当我们在shell 里执行./hello时,终端会输出hello world!字符。这个过程发生了以下事情:

首先,shell 程序执行它的指令,等待我们输入命令。当我们在键盘上输入字符串./hello时,shell 程序就逐一读取字符到寄存器,再把它存放到存储器中。当我们按下回车时,shell捕捉到我们结束了命令的输入。然后shell 执行一系列指令,将hello目标文件的代码和数据(再次回忆:信息是位+上下文,从位的角度而言,计算机是不区分代码和数据的)从磁盘拷贝到主存,从而加载hello文件。从磁盘加载到主存的过程涉及到dma技术。一旦hello目标文件中的代码和数据被加载到了存储器,处理器就开始执行hello程序的主程序中的机器语言指令(此时处理器看到的可不是hello.c里面的内容,而是目标文件hello包含的二进制码,这些二进制码包含了hello程序的代码和数据,再次,到底是代码还是数据是由上下文决定的),这些指令将hello,world对应的字节从主存中拷贝到寄存器堆,再从寄存器中拷贝到显示设备,最终显示到屏幕上。屏幕也属io设备,io设备包括鼠标、键盘及其他Usb设备、显示设备、硬盘、以及网络适配器等。

 

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条