程序是怎么运行的-总结于《程序是怎么跑起来的》

首先我们需要知道这些基础的计算机软硬件知识。
1.程序运行必要的硬件
1.必须有一个存储器,记忆程序和数据的存储器。
2.必须有一个控制器,控制程序执行的控制器。
3.必须有一个运算器,完成数据加工处理的运算器。
4.必须有输入设备和输出设备,用于进行人机通信。
2.程序是什么,由什么组成?
程序是指示计算机每一步动作的计算机指令,由指令(机器语言)和数据组成。
程序的运行环境=操作系统+硬件。
3.cpu
1.寄存器:用来暂时存储指令、和数据。不同的cpu内部有20-几百个寄存器,了解即可。
A.寄存器的主要种类和功能
种类 功能
累加寄存器 存储执行运算的数据和运算后的数据
标志寄存器 存储运算处理后的CPU的状态
程序计数器 存储下一条指令所在内存的地址
基址寄存器 存储数据内存的起始地址
变址寄存器 存储基址寄存器的相对地址
通用寄存器 存储任意数据
指令寄存器 存储指令。CPU内部使用,程序员无法通过程序对该寄存器进行读写操作
栈寄存器 存储栈区域的起始地址

B.如图实例(x86系列cpu主要寄存器)
寄存器名 名称 主要功能
eax 累加寄存器 同上图
ebx 基址寄存器 存储内存地址
ecx 计数寄存器 计算循环次数
edx 数据计算器 存储数据
esi 源地址寄存器 存储数据发送源的内存地址
edi 目标地址寄存器 存储数据发送目标的内存地址
ebp 扩展基址指针寄存器 存储数据存储领域基点的内存地址
esp 扩展栈指针寄存器 存储栈中最高位数据的内存地址
2.控制器:负责把内存上的指令、数据等数据读入寄存器,并根据指令执行的结果来控制计算机。
3.运算器:负责运算从内存读入到寄存器的数据。
4.时钟:负责发出cpu开始计时的时钟信号
4.指令在cpu内部运行示意图
程序是怎么运行的-总结于《程序是怎么跑起来的》_第1张图片
C.指令在cpu内部运行示意图
扩展,如图D、机器指令的主要类型及功能
类型 功能
数据转送指令 寄存器和内存、内存和内存、寄存器与外围设备之间的读取操作
运算指令 用累加寄存器执行算术运算、逻辑运算、比较运算以及移位运算
跳转指令 实现条件分支、循环、强制跳转等
call/return 指令 函数的调用、返回调用前的地址
D.机器指令的主要类型及功能
高级语言编写出来的程序,最后都转变为这些简单的指令了。
5.内存
内存的作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机内存主要以下几种:
a. 高速缓冲存储器(Cache):它位于CPU与内存之间,读写速度比内存更快的存储器。当CPU向内存中写入或读出数据时,这个数据也被存储进高速缓冲存储器中。当CPU再次需要这些数据时,CPU就从高速缓冲存储器读取数据,而不是访问较慢的内存,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。
b. 只读存储器(ROM):ROM表示只读存储器(Read Only Memory),ROM中的一旦被写入就不能再更改,信息只能读出,即使机器停电,这些数据也不会丢失。ROM一般用于存放计算机的基本程序和数据,如BIOS ROM。
c. 随机存储器(RAM):随机存储器(Random Access Memory)表示既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。也就是我们常说的内存条。
d. 可以把内存想象成这样。
内存
程序是怎么运行的-总结于《程序是怎么跑起来的》_第2张图片

6.磁盘
磁盘的原理与使用都比较简单,笔者不再详细讲。
看完基础的计算机软硬件知识,我们来了解编程语言,所以这里以java和C语言为例。有的读者可能要问为什么要以俩个为例。因为俩种语言在执行过程存在差别(虽然现在用编译型、解释型来分类编程语言已经有点力不从心了)。
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
1. C语言
C语言是属编译类语言。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但是可移植性差。

E.C语言编译过程
程序是怎么运行的-总结于《程序是怎么跑起来的》_第3张图片
2. Java语言
同C语言一样,java也是将java语法记述的源代码编译后运行。不过,编译后生成的并不是针对特定硬件环境使用的本地代码,而是字节码(也是我们说的.class文件)。运行时由java虚拟机转换成本地代码运行。所以代码的可移植性好,执行效率低。

F.java语言编译过程
程序是怎么运行的-总结于《程序是怎么跑起来的》_第4张图片
总结
一种是程序编译成机器语言,操作系统把机器语言(指令)复制到内存。内存中最有可能被cpu用到的数据放入cache。然后cpu与内存交互处理数据(程序执行)。
二是java虚拟机解释成机器语言放到内存中,内存中最有可能被cpu用到的数据放入cache。然后cpu与内存交互处理数据(程序执行)。
程序是怎么运行的-总结于《程序是怎么跑起来的》_第5张图片

你可能感兴趣的:(程序是怎么运行的-总结于《程序是怎么跑起来的》)