你好 欢迎来到计算机组成原理
这一讲是这门课程的导论
我们顺着开篇
再来展开聊一下
究竟计算机的内部是
如何组成的并且是如何工作的
我们大家都知道
计算机系统是由硬件和软件组成的
它们的共同工作完成了
复杂的应用程序的运行
为了能初步了解
计算机系统的内部结构
和应用程序的运行
我们先从一个最简单
也是最著名的Hello world程序开始
跟踪它的生命周期
来开始我们第一章的学习
计算机系统概述
Hello程序的生命周期是从一个源程序
或者说是一个源文件开始的
也就是我们平常说的文本文件
我们把它的文件名称为hello.c
源程序实际上就是
一个由值0和1组成的位序列
大部分的现代计算机系统都使用
ASCII标准来表示文本字符
这种方式实际上就是用
我们平常所说的ASCII码
来表示源程序中的每个字符
那么这张图给出的就是hello.c程序的
ASCII码表示
Hello.c程序是以字节序列的方式
首先存储在文件中的
一个字节是8位二进制数
每一个字节对应一个字符
例如第一个字节的整数值为35
对应的是 # 字符
像这样由ASCII字符构成的文件
被称为文本文件
hello.c就是一个文本文件
所有其他的文件都称为二进制文件
接下来
为了在系统上运行hello.c程序
每一条C语句都必须被其他程序转化为
一系列的低级机器语言指令
然后这些指令按照一种被称为
可执行目标程序的格式打包
并以二进制磁盘文件的形式存放起来
目标程序也称为可执行目标文件
从源文件到目标文件的转换
是由编译器驱动程序实现的
这条命令是
GCC编译器驱动程序读取
源程序文件hello.c
并把它翻译成一个
可执行目标文件hello
这个编译过程通常可以分为
四个阶段来完成
我们大家来看这张图
首先 第一个是预处理阶段
预处理器cpp根据以字符#开头的命令
修改原始的C程序
然后得到文件名hello.i文件
第二个阶段是编译阶段
编译器ccl将文本文件hello.i
翻译成文本文件hello.s
它包含一个汇编语言程序
这段代码就是hello.c程序
对应的汇编语言程序
文件名为hello.s
接下来进入第三个阶段汇编阶段
汇编器 as 将hello.s
编译成机器语言指令
把这些指令打包成一种叫做
可定位目标程序的格式
并将结果保存在目标文件hello.o中
这里hello.o是个二进制文件
最后一个阶段就是链接阶段
链接器 ld 将库文件
目标文件链接在一起
最后得到一个可执行文件hello.exe
这个程序被加载到内存中
然后由系统执行
以上是hello.c程序
由文本文件高级语言程序
到可执行文件的过程
此刻 hello.c源程序
已经被编译系统翻译成了
可执行目标文件
并被存放在磁盘上
接下来 我们只要输入
这样一行代码
就能得到这样一个运行结果
Hello,world
那么到这为止 hello.c程序就运行完毕
为了理解hello程序
在运行过程发生了什么
下面我们以intel产品
作为典型的硬件组织来讲解一下
我们现在看这张图
这张图是一个典型系统的硬件组织
在这里面 主要包括这样几个部分
首先我们看总线
总线贯穿整个系统的
它是一组电子管道
它携带信息字节并负责在各个部件间传递
然后接下来
我们看这几个部分
是I/O设备
是系统与外部世界联系的通道
常用的外部设备有鼠标 键盘 显示器
以及用于长期存储数据
和程序的磁盘驱动器
那么每个I/O设备都通过
一个控制器与I/O总线相联
我们再来看这个部件
这个部件是主存 一个临时存储设备
在处理器执行程序时
用来存放程序和程序处理的数据
从物理上来说
主存是由一组动态随机存储器 DRAM
从逻辑上来说
存储器是一个线性的字节数组
每个字节都有其唯一的地址 数组索引
中央处理单元 CPU
是解释 或执行 存储在主存中指令的引擎
处理器的核心部件包括
算术运算单元ALU和程序计数器PC
看了计算机的硬件结构图后
结合实际的计算机
让我们再来对应认识一下真实计算机的内部结构部件
好 我们现在来看一下这个三维动画图
从外部来看
我们计算机基本包括主机 显示器 键盘和鼠标
从计算机的背面
我们可以看到通常带有这些插口
键盘口 鼠标口 老的机器是PS/2规格
现在一般都是USB接口
USB口 可以连接任何规格的USB设备
网口是来插接网线的
音频输入输出口
以及并行口是用来连接计算机的
当然现在有些计算机也都是通过USB来接的
插显卡的显卡接口
串口 主要是连接读写器的
那么我们把计算机打开
我们在来看一下它的内部都有什么
主要包括有
风扇 电源 主板 硬盘 各种连接线
好 现在再我们再来看一下主板
主板上有CPU CPU插槽 内存插槽
南桥芯片 北桥芯片 BIOS IDE 以及PCI插槽
以及USB 显示器接口和打印机的接口等等
好 那么我们这样就把计算机的内部结构
和我们的真实的计算机做了一个对应
想帮助同学们来提高一个感性认识
了解了计算机系统的硬件组成后
下面我们来看一下运行hello程序时
计算机内部到底发生了些什么
一开始 shell程序等待我们输入运行命令
输入 ./hello 后 输入以后大家可以看到
经过I/O总线 I/O桥和总线接口
shell程序将字符逐一读入寄存器
然后再经过总线 存放到内存中
结束了命令的输入后
shell执行一系列指令
来加载可执行的hello文件
这些指令将hello目标文件中的代码和数据
从磁盘复制到主存
这里利用的是DMA技术
数据可以不通过处理器
而直接从磁盘到达内存
那么关于DMA技术 在计算机组成原理的后面章节中会给大家讲到
它是一种直接内存访问的技术 好 看第三副
一旦目标文件hello中的
代码和数据被加载到内存中以后
处理器就开始执行hello程序中的机器指令
这些指令将 hello world
字符串中的字节从主存复制到寄存器文件
再从寄存器文件中复制到显示设备
最终显示在屏幕上
至此 hello程序运行完毕
从整个执行过程中 我们可以看到
系统花费了大量的时间
把信息从一个地方挪到另一个地方
hello程序的机器指令最初是存放在磁盘上
当程序加载时 它们被复制到主存
当处理器运行程序时
指令又从主存复制到处理器
其实 这种 复制 在计算机组成原理中
我们称为数据的传输
通过这个例子
你对一个程序在计算机中的运行
以及计算机的硬件组织有了基本的了解
为今后的学习建立了初步的感性认识
下一讲
我们将进一步地
讲解计算机系统的层次结构
这一讲就讲到这里