我是从豆瓣上看到好多人都在推荐这本书,于是就去借来读一读,昨天晚上用了好长时间来读这本书的第一章节,感觉这本书比较符合我(有些基础还不太明白,这本书详细的进行了讲解,很好)。
下面写一下我的理解(顺便回顾一下知识)
第一节主要讲的是: A Tour of Computer Systems
以hello.c为例进行讲解,介绍这个程序如何从一个源程序变成可执行程序,再到执行,显示屏上出现“hello,world”
··················································································································································
文章比较有条理,符合人的一般思维。(我觉得既然计算机是人制造的,用来对人的思维计算进行拓展的,那么他的一些操作就应该能用人的一般思路来进行理解)以我的思路来进行回顾一下。
其实这本书的原名叫做:Computer Systems: A Programmer's Perspective(以一个程序猿的角度来进行理解计算机系统)
下面假设自己是一个电脑小白(其实也差不多,嘻嘻,不,比小白强一点的,但是有些概念什么的还是不明白,计算机的工作原理也搞不清楚,但是这一章以一个c源程序的执行过程对对计算机进行了讲解,非常棒,有很大的收获,废话不多说了)Let's begin.
1计算机来说就不用讲了
2计算机中有很多信息吧。那么信息又是什么呢?信息=位+上下文明白电脑是0,1二进制进行存储,计算的。基本存储就是位。但是相同的位又在不同的文件中又不同的含义这又是为什么呢?因为他们有不同的上下文,就是说他们的上下的信息不同,举一个例子来说就像是:文言文中的“其”“之乎者也”等虽然他们是同一个字但是他的上下文不同,所以就有了分别。所以信息就有了区分.
3.理解了信息以后,那么我们就以hello.c文件为例。对他的执行过程进行分析理解。
我们明白hello.c的程序
#include <stdio.h>
main()
{
printf("Hello world!\n");
}
这就是hello.c一般这是学习c语言的第一个程序。 这是由c语言写的但是不能 有计算机直接进行执行。c语言这是高级语言,这种语言是给程序猿看的,但是电脑看不懂。所以我们就要来请一个翻译官,让两个文件能进行理解,交流。 “翻译官”就是一个编译系统。那么我们来看一下这个编译系统由哪些部分来组成。 预编译 编译 汇编 链接 预编译这个阶段来说:就是讲#开头的directives来进行处理,(这是系统中原有的)经过这个阶段以后hello.c变成hello.iwenjian 编译:包含一个汇编语言程序,将高级语言写的程序变成由汇编语言写的。hello.i变成hello.s 汇编阶段呢:就是将这个helo.s变成hello.o的程序,这个程序已经是由机器语言,二进制的,用文本编辑器打开会出现乱码 最后一个阶段就是链接:这个阶段呢,就是由于源程序中出现了一些调用库中的函数什么的,但是这个程序中没有所以需要链接形成一个真正的可执行程序。保存到存储器中 4对硬件进行讲解(我们知道了如何生成可执行程序的,而且已经保存到了存储器中那么,计算机是如何进行执行的呢?硬件上对他的执行过程进行讲解喽,,,,) 硬件的话,首先,整体的了解一下这个硬件系统
计算机硬件系统构成
总体上明白了计算机硬件系统的构成以后那么,我们来详细的了解一下具体组成,各个名词的含义。
(1)总线:一个贯穿于整个系统的一条电子通道。主要进行在各个硬件之间传递信息的。我觉得就像是一条条公路,使得各个点之间相连起来,能形成交流,信息的交换。
(2)I/O设备: 输入输出设备。嗯,这个。。。。这个是系统与外界之间的交流的通道。
I/O设备有什么构成呢?由一个控制器或者是一个适配器与I/O总线之间相连起来。那么是控制器,什么是适配器呢?
控制器:I/O设备本身或者是在主板上的一个芯片组
适配器:插在主板上的卡槽上的卡
(3)主存:一个临时存储设备。(DRAM),在执行程序时负责存储程序以及其程序处理的数据。
(4)处理器(CPU):解释/执行存储在主存的指令的引擎的核心。就相当于大脑,对来自各个系统的信息进行分析,发出执行命令,kernel
处理器又能执行些什么操作呢?
加载:对主存中的信息进行加载。从主存中拷贝一个字/字节放到寄存器中,覆盖原来的信息
存储:从寄存器中拷贝一个字/字节放到主存的某个位置,覆盖原来的信息。
更新:拷贝两个寄存器中的内容到ALU,ALU对其进行相加放到一个寄存器中,覆盖原来的信息。
I/O读:从I/O设备中拷贝一个字/字节到寄存器中,覆盖
I/O写:从寄存器中拷贝一个字/字节到I/O设备中,覆盖
转移:从指令中拷贝一个字,拷贝到PC中,覆盖 5.了解了硬件后,那么如何对其进行加速呢? 信息太多,转移速度慢,程序运行时间啊长,等待时间长,所以,我们需要对这个过程进行加速。但是,这个过程中,主要耗费时间的地方在哪里呢?只有明白了这个点才能对其进行加速,效果更明显。 主要的耗费时间点在与:读取信息,就是信息的转移,从一个位置转贷另一位置,比如说从主存到寄存器中。(我们明白:较大的存储设备运行比较小的存储设备运行要慢的多) 如何解决呢?引出来一个概念叫做高速缓存。 磁盘->主存->寄存器 高速缓存
金字塔上越高运行时间越短,越快,但是相应的造价越高。 上面的可以做下面的高级缓存。 7明白了硬件系统后,就应该进行执行了。 执行,又要明白操作系统。要知道程序不能之间控制硬件,中间有操作系统 。操作系统直接控制硬件。
明白一些概念
进程:假象,好像独占处理器,主存和I/O设备,只有这个程序在运行。
实际上数多个程序在执行。并发运行(一个程勋的指令与另一个程序的指令在相互的执行),上下文切换:保存程序运行所需要的全部信息
虚拟存储器:假象,每个进程独占主存。有唯一的地址
文件:字节序列。
8.网络也是一种I/O设备
上面是一台电脑的执行过程,但是没有和其他的电脑进行交流。
·····················································································································
最后了,终于完成对第一章的回顾了,下面感慨一下:
这一章是从整体上进行讲解。没有详细的讲解。
这种分配非常好。
我们在学习时,首先,我们从整体上,明白一下这个过程,然后我们再来详细的了解各个过程。
嗯哪,花了一上午的时间终于写完了,有成就感!!!!
下午看第二章,待续。。。。。。