《深入理解计算机系统》-第1章 计算机系统漫游

最近重启了写博客,都说念念不忘必有回响。自从上一遍博客,到现在已经过去了快两年的时间。在这期间一直在想着什么时候写个博客呀,什么时候再摸着键盘一点点的码字啊,心里一直在想,直到现在,终于有了行动。
看着一个一个的字,随着键盘的敲击,一串串跃然于屏幕之上,心里有说不出来的平静与喜悦。平静的是,好像世间只有自己,任凭思想在激荡;喜悦的是,世间竟然有这么奇妙的东西,可以靠着几下简单的敲击,就能把脑中所想记录下来。

这篇博客主要是总结下,最近在看的《深入理解计算机系统》的第一章。
第一章的主要内容就像标题所说的那样,是计算机系统的漫游。漫游漫游,顾名思义,漫漫的游览。有慢之意,也有游之意。主要是带领大家慢慢的看看计算机是什么,都有什么,大概是怎么运行,熟悉一下这个奇妙的东西。

1. 信息就是位+上下文

首先我们来看一个象征了计算机生命起源的程序,hello.c

#include <stdio.h>
int main(){
	printf("hello, world\n");
	return 0;
}

这就是一个源程序,它其实是程序员写的一个文本,最终在计算机存储的都是一串串0和1的序列。
每种字符都有它的编码,比如‘a’对应的数字是97,转换成2进制就是01100001,计算机就是存储了这么多的0和1。
我们看到的这个int main实际就是计算机把好多的0和1,然释成我们可以理解的文字,显示在屏幕上的。

hello.c的表示方法说明了一个基本思想:系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的和用户数据以及网络上传送的数据,都是一串比特(0和1)表示的。区分不同数据对象的唯一方法是我们读取到这些数据对象的上下文。
比如一个同样的字节序列(一串比特)可能表示一个整数、浮点数、字符串或者机器指令。

总结起来就是,信息就是位+上下文

2. 程序的不同格式

对于刚才的hello.c计算机是不能直接执行的,到现在为止,计算机对这个文件的理解只是一个文本文件,就是用来给人读的。
我们要想这个文本文件执行,需要把它转换成另一种文件格式。

人类/机器/程序员理解范畴
机器理解范畴
程序员理解范畴
hello.c
hello.i
hello.s
hello.o
hello(可执行目标程序(二进制))
各种行为
产生各种结果
汇编器(as)
连接器(ld)
printf.o
开始
预处理器(cpp)
编译器(ccl)

(ps:把程序员和人类分为两个范畴似乎有点不太友好哈)
在这个过程中,位(01串)发生了变化,上下文也发生了变化,信息也就不同了,这也印证了上文所说信息就是位+上线文

3. 处理器读并解释存储在内存中的指令

3.1 系统的硬件组成

刚才我们大致了看了下源文件是怎么储存,和如何由文本文件变成可执行文件的。
不过这些都有点虚,我们还想看看这些东西是如何落到实处的,也就是怎么和现实世界联系起来的。
也就是承载这些运算的载体——硬件,是怎么样的。
《深入理解计算机系统》-第1章 计算机系统漫游

4. 运行hello程序

4.1. 从磁盘读取hello命令

《深入理解计算机系统》-第1章 计算机系统漫游

4.2. 从磁盘加载可执行文件到主存

《深入理解计算机系统》-第1章 计算机系统漫游

4.3. 将输出字符串从存储器写到显示器

《深入理解计算机系统》-第1章 计算机系统漫游