深入理解计算机系统:1.计算机系统漫游(上)

深入理解计算机系统:1.计算机系统漫游(上)

1. 信息就是位+上下文

系统中的所有信息,包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。目标文件区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、 浮点数、字符串或者机器指令。

2. 程序被其他程序翻译成不同的格式

以hello.c程序举例, hello程序的生命周期是从一个高级C语言程序开始的,为了在系统上运行hello.c程序,每条C语句都必须被其他程序转化列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来,目标程序也称为可执行目标文件。
在Unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:linux> gcc -0 hel1o hello.c
在这里,GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个目标文件hello。这个翻译过程可分为四个阶段完成,执行这四个程序(预处理器、编译器、汇编器和链接器)一起构成了编译系统。

hello.c
源程序*文本*
预处理器cpp
预处理阶段
预处理器cpp根据以字符#开头的命令修改原始的C程序
即告诉预处理器读取系统头文件的内容并把它直接插人程序文本中
就得到了另一个以.i作为文件扩展名的C程序
hello.i
修改了的源程序*文本*
编译阶段
编译器cc1将文本文件hello.i翻译成文本文件hello.s
它包含一个汇编语言程序 该程序包含函数的定义
编译器ccl
汇编阶段
汇编器as将hello.s翻译成机器语言指令
并把这些指令打包成一种叫做可重定位目标程序的格式
将结果保存在二进制文件文件hello.o中
它包含的字节是函数的指令编码
如果我们在文本编辑器中打开hello.o文件将看到一堆乱码
hello.s
汇编程序*文本*
汇编器as
链接阶段
C库中的函数存在于一个名为函数名.o的单独的预编译好了的目标文件中
hello程序调用了printf函数则
printf.o文件必须以某种方式合并到我们的hello.o程序中
链接器ld处理这种合并得到hello文件
这是一个可以被加载到内存中由系统执行的可执行目标文件
hello.o
可重定位目标程序*二进制*
链接器ld
hello
可执行目标程序*二进制*
3. 处理器读并解释储存在内存中的指令

shell是一个命令行解释器,它输出一个提示符,等待输人一个命令行,然后执行这如果该命令行的第一个单词不是一个内置的shell命令,那么shell就会假设这是一个可执行文件的名字,它将加载并运行这个文件。

系统的硬件组成

  • 总线:贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字(word)。字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。现在的大多数机器字长要么是4个字节(32位),要么是8个字节(64位)。
  • I/O设备:I/O(输人/输出)设备是系统与外部世界的联系通道包括作为用户输人的键盘和鼠标、作为用户输出的显示器、用于长期存储数据和程序的硬盘驱动器(简单地说就是磁盘)等。每个I/O设备都通过一一个控制器或适配器与1/O总线相连。
  • 主存:主存是一个临时存储设备、 在处理器执行程序时,用来存放程序和程序处理的数据,从物理上来说、主存是由一组动态随机存取存储器(DRAM)芯片组成的。 从逻辑上来说, 存储器是个线性的字节数组, 每个字节都有其唯一的地址(数组素引),这些地址是从零开始的。一般来说,组成程序的每条机器指令都由不同数量的字节构成。与C程序变量相对应的数据项的大小是根报类型变化的。
  • 处理器:中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。处理器看上去是按照一个非常简单的指令执行模型来操作的,这个模型由指令集架构决定。在这个模型中,指令按照严格的顺序执行:处理器从程序计数器指向的内存处读取指令,解释指令的位,执行指令指示的简单操作,更新PC,使其指向下一条指令(这条指令不一定和在内存中刚刚执行的指令相邻)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值