计算机的第一条指令如何执行
问题描述
- 精选答案
-
这涉及到组成原理与操作系统的一些原理性问题。
一个一个来回答。
1.指令存放在什么地方。
指令都是以二进制编码的方式存储在外存储器(硬盘)中,当程序执行的时候会载入到主存储器(内存)中供CPU直接使用。
2.CPU在什么时间工作
由于现代计算机都是基于冯诺依曼体系结构发展而来,因此指令在计算机中的执行也是顺序执行的,即
“取指执行”。但是
CPU只有一个(单处理机),同时使用CPU进行运算的程序也只能有一个,但由于执行一条运算指令(如1+2)速度与执行一条IO指令(如从磁盘中读文件)时间相差太大(10^5+)。执行一条IO指令可以执行无数条运算指令了,而一个程序不可能都是运算指令,这样就会造成进行IO操作的时候CPU不工作。于是,前辈们就提出了
“进程”
的概念,多个程序并发交替执行,出现IO操作或资源抢占的时候就把自己阻塞,然后调度其他进程进行CPU运算占用。进程的调度是操作系统进行的,一个操作系统中可能存在几十上百个进程,因此在现代操作系统中CPU是几乎没有休息时间的。
3.一段代码如何运行
首先要明确一点:
计算机是无法直接识别C代码的,C代码会在编译链接的过程中被翻译成计算机可识别的二进制机器码。
先看一个简单的C函数
将其汇编
rbp与eax都是CPU中的寄存器。
mov与add都是汇编指令,其中在这里面mov是将前面的操作数移动到后面的操作数中。
C代码被编译器翻译成汇编代码,这就很像一条条待执行的指令了。我们在这里不讨论汇编语言生成的机器码。
根据上面讨论的冯诺依曼体系的顺序执行,我们可以简单地得出一个模型顺序取指执行模型——CPU从主存取第一条指令,执行将3移入(%rbp-4)中,再去第二条指令的地址中取指,然后执行将5移入(%rbp-8)中,后面再取指,然后将两个数加起来保存到寄存器eax中,就完成了3+5。
虽然现代CPU为了提高运行效率基于这个顺序模型做了很大的优化改进,如流水线、乱序执行、超线程等技术,但都是基于上面的取指执行模型而来。
猜你喜欢内容
-
简单网:构建全网教育数据枢纽,让知识检索化繁为...
简单网:构建全网教育数据枢纽,让知识检索化繁为“简”回答数有0条优质答案参考
-
去三亚有什么好玩的地方
去三亚有什么好玩的地方回答数有1条优质答案参考
-
石狮一日游必去景点推荐
石狮一日游必去景点推荐回答数有1条优质答案参考
-
电气工程师的证书考取条件是什么
电气工程师的证书考取条件是什么回答数有1条优质答案参考
-
房地产估价师的具体报考条件有啥
房地产估价师的具体报考条件有啥回答数有1条优质答案参考
-
房产经纪人的工作内容具体包含什么
房产经纪人的工作内容具体包含什么回答数有1条优质答案参考
-
学习小提琴都有哪些难点
学习小提琴都有哪些难点回答数有1条优质答案参考
-
企业行政管理证书的含金量怎么样
企业行政管理证书的含金量怎么样回答数有1条优质答案参考
-
初学者要怎么入门小提琴
初学者要怎么入门小提琴回答数有1条优质答案参考
-
报考珠宝鉴定师要啥条件
报考珠宝鉴定师要啥条件回答数有1条优质答案参考
















