从今天开始,就要每天给自己加点餐了~
从今天开始,会慢吞吞的开始啃《深入理解计算机系统》这本书了~
从今天开始,每天的输入内容都会在C站上进行分享、输出了~
每天的内容不多,日积月累下来,希望我的读者和我都会有一个大的突破~
计算机系统是由硬件和系统软件组成的,硬件和软件二者相互配合、共同工作来运行应用程序。当今技术迭代非常快,计算机系统的具体实现方式也随着时间不断发生改变。但是系统内在的概念却并没有改变。所有的计算机系统都有相似的硬件和软件组件,它们执行着相似的功能。
1.1 信息就是 位+上下文
举一个最简单的程序例子:hello程序:
#include<stdio.h>
int main()
{
printf("hello,world\n");
return 0;
}
hello程序的生命周期是从一个源程序(或者说源文件)开始的,即我们利用编辑器创建并保存的文本文件,该文本文件的文件名就是hello.c。源程序实际上就是一个由值0和1组成的位(bit)序列,8个位被组织成一组,也就是一个字节。每个字节都表示程序中某个文本字符。
大部分的现在系统都使用ASCII标准来表示文本字符,这种方式实际上就是用一个唯一的单字节大小的整数值来表示每个字符。
如图给出了hello.c程序的部分ASCII码表示:
hello.c以字节序列的方式存储在文件中。每个字节都有一个整数值,而该整数值对应与某个字符。例如,第一个字节的整数值是35,它对应的就是字符“#”;第二个字节整数值为105,它对应的字符是“i”,以此类推。每个文本行都是以一个不可见的换行符“\n”来结束的;它所对应的整数值为10。像hello.c这样只由ASCII字符构成的文件称为文本文件,其他所有文件都称为二进制文件。
hello.c的表示方法说明了一个基本的思想:系统中所有的信息——磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。 比如:在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。