计算机系统(三)CPU读并解释存储在存储器中的指令
2015-08-13 17:04
295 查看
TTcdeMacBook-Air:SystemCompiler TTc$ gcc -E hello.c -o hello.i
TTcdeMacBook-Air:SystemCompiler TTc$ open .
TTcdeMacBook-Air:SystemCompiler TTc$ gcc -O hello.c -o hello.o
TTcdeMacBook-Air:SystemCompiler TTc$ ls
hello.c hello.i hello.o hello.s
TTcdeMacBook-Air:SystemCompiler TTc$ open .
TTcdeMacBook-Air:SystemCompiler TTc$ ls
hello.c hello.i hello.o hello.s
TTcdeMacBook-Air:SystemCompiler TTc$ gcc -o hello hello.c
TTcdeMacBook-Air:SystemCompiler TTc$ ls
hello hello.c hello.i hello.o hello.s
TTcdeMacBook-Air:SystemCompiler TTc$ ls
hello hello.c hello.i hello.o hello.s
TTcdeMacBook-Air:SystemCompiler TTc$ ./hello
hello world
TTcdeMacBook-Air:SystemCompiler TTc$
此时 helllo.c源程序 已经经过 编译系统翻译成了 可执行目标文件 hello (在 win上为 PE文件 在Unix下为 ELF文件)
shell 是一个命令行解释器, 这时候 shell 加载并运行 hello 程序,然后等待程序终止,hello 程序在 显示器上 输出 它的信息,然后终止。 shell 随后输出一个提示符,等待用户 的下一个输入 命令
系统的硬件组成
1:总线:贯穿整个系统的是一组电子管道,它携带byte 并负责在各个 部件 之间传递。 一般 传送的是 固定长度的 byte块,也就是 word(字)
2:I/O设备 :系统与外部世界的联系通道(输入/输出IO);每个IO设备都是通过一个控制器或适配器与IO总线 相连接。(控制器 是印制在主板上的芯片组上或者 IO设备本身、而适配器是一块插在主板槽上的 卡,功能一样都是在IO总线和IO设备之间传递信息)
3:主存:一个临时的存储设备,在CPU读取指令执行时,用来临时存放程序和数据,
从物理角度说,主存是由一组动态随机存取器(DRAM)芯片组成
从逻辑角度说,存储器是一个线性的字节数组,byte[ ]; 每个byte 都有唯一的地址(就是数组索引),从0开始,一般来说:组成程序的每条 机器指令 都由不同数量的 byte 组成,
4:CPU: 处理器,是解释或者执行存储在主存中 指令的 引擎。 核心组成: 一个字长的存储设备(寄存器->程序计数器 PC),在任何时刻,PC都指向主存中的某条机器语言指令(本质上是 该条指令的地址)
步骤:A: 从系统通电开始,直到系统断电,CPU都在不断地从执行PC读取(指向)的指令并更新PC,使其指向下一条指令。
B:CPU看上去是按照一个非常简单地指令 执行模型来操作的,这个 模型是由 指令集 结构来决定的。 在这个模型中,指令按照严格的顺序执行
C: CPU从PC取指令,解释指令中的bit,执行该指令 代表的简单操作,然后更新PC,使其指向下一条指令,而这条新的指令 不一定与 上一条(刚刚从存储器中取出的指令)相邻。 在C中就是 jump ,这样的操作 非常少,而且操作都是围绕着 主存, 寄存器文件 和ALU(算术/逻辑单元)经行的。
5: 寄存器文件: 是一个小得存储设备,由一些 1字长的 寄存器 组成,每个寄存器都有唯一的名字。 ALU 计算 新的数据 和 地址值
A:load:把一个byte 或者一个word 从 主存 copy 到 寄存器(cover)覆盖掉寄存器原来的内容。
B: save :把一个byte 或者一个word 从 寄存器 copy 到 主存的某个位置。以覆盖这个位置原来的内容
C:operate :把两个寄存器的内容copy到ALU,ALU对这两个word 做算术操作,并将结果存放到 一个寄存器 中,以覆盖该寄存器中原来的内容。
D:jump :从指令本身中抽取一个word,并将这个word copy到 PC中,以覆盖PC中原来的值
CPU 看起来只是它的指令集 结构的简单实现,但是实际上是 现代cpu实用了 非常复杂的 机制来加速。
TTcdeMacBook-Air:SystemCompiler TTc$ open .
TTcdeMacBook-Air:SystemCompiler TTc$ gcc -O hello.c -o hello.o
TTcdeMacBook-Air:SystemCompiler TTc$ ls
hello.c hello.i hello.o hello.s
TTcdeMacBook-Air:SystemCompiler TTc$ open .
TTcdeMacBook-Air:SystemCompiler TTc$ ls
hello.c hello.i hello.o hello.s
TTcdeMacBook-Air:SystemCompiler TTc$ gcc -o hello hello.c
TTcdeMacBook-Air:SystemCompiler TTc$ ls
hello hello.c hello.i hello.o hello.s
TTcdeMacBook-Air:SystemCompiler TTc$ ls
hello hello.c hello.i hello.o hello.s
TTcdeMacBook-Air:SystemCompiler TTc$ ./hello
hello world
TTcdeMacBook-Air:SystemCompiler TTc$
此时 helllo.c源程序 已经经过 编译系统翻译成了 可执行目标文件 hello (在 win上为 PE文件 在Unix下为 ELF文件)
shell 是一个命令行解释器, 这时候 shell 加载并运行 hello 程序,然后等待程序终止,hello 程序在 显示器上 输出 它的信息,然后终止。 shell 随后输出一个提示符,等待用户 的下一个输入 命令
系统的硬件组成
1:总线:贯穿整个系统的是一组电子管道,它携带byte 并负责在各个 部件 之间传递。 一般 传送的是 固定长度的 byte块,也就是 word(字)
2:I/O设备 :系统与外部世界的联系通道(输入/输出IO);每个IO设备都是通过一个控制器或适配器与IO总线 相连接。(控制器 是印制在主板上的芯片组上或者 IO设备本身、而适配器是一块插在主板槽上的 卡,功能一样都是在IO总线和IO设备之间传递信息)
3:主存:一个临时的存储设备,在CPU读取指令执行时,用来临时存放程序和数据,
从物理角度说,主存是由一组动态随机存取器(DRAM)芯片组成
从逻辑角度说,存储器是一个线性的字节数组,byte[ ]; 每个byte 都有唯一的地址(就是数组索引),从0开始,一般来说:组成程序的每条 机器指令 都由不同数量的 byte 组成,
4:CPU: 处理器,是解释或者执行存储在主存中 指令的 引擎。 核心组成: 一个字长的存储设备(寄存器->程序计数器 PC),在任何时刻,PC都指向主存中的某条机器语言指令(本质上是 该条指令的地址)
步骤:A: 从系统通电开始,直到系统断电,CPU都在不断地从执行PC读取(指向)的指令并更新PC,使其指向下一条指令。
B:CPU看上去是按照一个非常简单地指令 执行模型来操作的,这个 模型是由 指令集 结构来决定的。 在这个模型中,指令按照严格的顺序执行
C: CPU从PC取指令,解释指令中的bit,执行该指令 代表的简单操作,然后更新PC,使其指向下一条指令,而这条新的指令 不一定与 上一条(刚刚从存储器中取出的指令)相邻。 在C中就是 jump ,这样的操作 非常少,而且操作都是围绕着 主存, 寄存器文件 和ALU(算术/逻辑单元)经行的。
5: 寄存器文件: 是一个小得存储设备,由一些 1字长的 寄存器 组成,每个寄存器都有唯一的名字。 ALU 计算 新的数据 和 地址值
A:load:把一个byte 或者一个word 从 主存 copy 到 寄存器(cover)覆盖掉寄存器原来的内容。
B: save :把一个byte 或者一个word 从 寄存器 copy 到 主存的某个位置。以覆盖这个位置原来的内容
C:operate :把两个寄存器的内容copy到ALU,ALU对这两个word 做算术操作,并将结果存放到 一个寄存器 中,以覆盖该寄存器中原来的内容。
D:jump :从指令本身中抽取一个word,并将这个word copy到 PC中,以覆盖PC中原来的值
CPU 看起来只是它的指令集 结构的简单实现,但是实际上是 现代cpu实用了 非常复杂的 机制来加速。
相关文章推荐
- 网络篇----NSURLConnection断点下载
- 计算机系统(二)程序被其他程序翻译成不同的格式 Compiler
- 使用HttpClientdopost编写 客户端、服务器与数据库Demo
- 数据结构实验之栈三:后缀式求值
- 计算机系统(一)信息就是(位+上下文)
- TCP与UDP区别
- 数据结构
- 基于TCP/IP协议的网络编程
- 【Ex2013】【跨站点DAG】启用DAC模式,防止数据库级别上出现网络分区
- [数据结构]堆
- 第十八章、Linux网络配置
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- tomcat下配置https环境
- IOS Q&A 我应该如何在网络传输中保持数据的安全性?
- 计算机运算时,都是以补码的形式进行
- 使用开源框架android-async-http-1.4.8.jar与服务器传输数据
- 计算机视觉-机器学习近年部分综述
- Nginx的tcp反向代理初探
- 网络篇----下载大文件
- 黑马程序员--java技术blog---第九篇:网络编程(2)