全站数据
8 4 2 0 5 8 1

计算机的第一条指令如何执行

盒饭财经 | 简单学习,快乐成才!         
问题更新日期:2024-10-21 08:26:10

问题描述

计算机的第一条指令如何执行,麻烦给回复
精选答案
最佳答案

这涉及到组成原理与操作系统的一些原理性问题。

一个一个来回答。

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为了提高运行效率基于这个顺序模型做了很大的优化改进,如流水线、乱序执行、超线程等技术,但都是基于上面的取指执行模型而来。