程序运行

程序:指令的集合
指令:操作码OP和操作数地址AD
指令指针IP:指出下一条指令的地址,默认执行一条加1,否则设定指令指针的值。
为保证程序执行的连续性,在执行当前指令时,还需指出下一条指令的地址。由于指令在存储器中一般是顺序存放的,所以只要设置一个指令指针(IP),每执行一条指令,IP自动加1,便自动指出下一条指令的地址,而不必在指令中专门指出下一条指令的地址 。只有在转移指令中才指出下一条指令的地址。此时,IP的内容将随转移指令所指示的内容改变。

控制器的功能:
  1. 定序功能, 让程序按顺序执行
  2. 定时功能,让程序按规定时间执行。
  3. 操作控制功能,按程序控制相应部件操作。

指令部件:指令部件的主要功能是取指令和分析指令。它由指令指针IP(也叫指令计数器IC或程序计数器PC)、指令寄存器IR、指令译码器、地址计算部件组成。

编译语言的运行

编译型语言(c,java)的执行
编译:一种语言转化为另一种语言。通常是由高级语言向低级(底层)语言的转化。

一段c代码输出hello world代码运行过程。

#include<stdio.h>
int main()
{
printf("hello world\n"); 
}
程序编译:

计算机只能识别0,1 。将程序代码转化为相应的文本字符(ASCII),由相应的编译系统(预处理器、编译器、汇编器、连接器)完成。
程序运行原理

预处理器:将包含的头文件加载进入源文件。
编译器:讲程序转化成汇编语言。汇编语言以标准的文本格式确切的描绘机器语言指令。
汇编器:将汇编语言翻译成机器语言(二进制文件)。
链接器:将库文件并入到程序中。

程序执行

在shell中输入我们得到的可执行二进制文件名,shell将其从磁盘中加载到主存当中,通过CPU进行解释运行,最终通过终端设备(屏幕)将他显示出来,程序运行结束。
CPU是由四大部分所构成的:寄存器、控制器、运算器、时钟。

解释型语言的运行

解释型语言(php)程序的运行
解释型语言:代码在执行时才被解释器一行一行动态翻译和执行。
php解释器:安装在系统上的php软件(c程序)。

php体系:

程序运行原理

  1. Zend引擎:Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。

  2. Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的PHP中间层、富文本解析就是extension的典型应用)。

  3. Sapi:Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。

  4. 上层应用:这就是我们平时编写的PHP程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。

如果PHP是一辆车,那么车的框架就是PHP本身,Zend是车的引擎(发动机),Ext下面的各种组件就是车的轮子,Sapi可以看做是公路,车可以跑在不同类型的公路上,而一次PHP程序的执行就是汽车跑在公路上。因此,我们需要:性能优异的引擎+合适的车轮+正确的跑道。

php代码的执行过程:
  1. scanning(Lexing,), 将php代码转换为语言片段(tokens)
  2. Parsing,将Tokens 转换成简单而有意义的表达式
  3. Compilation, 将表达式编译成Opocdes
  4. Execution, 顺序执行Opcodes。 每次一条。
    实现php脚本功能。

更深一步了解程序的运行,欢迎访问:程序运行原理-apeit

相关文章: