博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【程序执行原理】
阅读量:5226 次
发布时间:2019-06-14

本文共 1194 字,大约阅读时间需要 3 分钟。

问一个问题,为什么一台linux机器上能够使用不同的语言,包括C,php,lua,python,go,java,shell等?

很简单,大部分都能回答,因为有解释器。解释器是一个程序,可以将对应的脚本解释为目标代码,并且能在当前的硬件环境执行,获得想要的结果。

具体而言

C语言

我们编写一个c程序代码,然后在linux用gcc编译成二进制文件,该二进制文件可以直接运行。

执行方式是:./main

这里不同于php,python等脚本语言,对脚本语言而言,解释器和执行文件是分离的。

脚本语言执行时,比如:shell a.sh,或者php a.php

c语言的编译文件可以直接执行,那么为什么刚刚编译出来的main文件能够执行呢?

一个OS是否能够执行c语言编译文件?取决什么?

可以参考下这篇文章:https://softwareengineering.stackexchange.com/questions/251250/why-do-executables-depend-on-the-os-but-not-on-the-cpu

1,指令集;2,文件格式;系统API;

指令集:因为在同一个系统下编译的,指令集用的同一套;

文件格式:因为是同一个系统下编译的,会编译成linux风格的bin文件,文件格式是能够被linux os识别的,所以这里没有问题;

系统API:简单的C程序,系统API是公用的,能编译出来肯定也是没问题的;

三个要素都满足,os检查文件能被系统识别,并且是个bin可执行文件,就把该文件加载到内存,然后分配系统资源去执行该文件的内容即可。

具体编译出来的一个二进制文件,是如何被系统所调度的?这个细节我们不用太多关注,在真正深入到这个层面的东西是整个工具链来保障的,os和编译工具gcc等。

这里涉及到一个问题:

OS如何能够使用CPU来完成OS的安装和后续启动的?OS是如何能够使用各种系统资源的(包括CPU,声卡,显卡,IO等)?

简单思考下挺有意思的。

脚本语言

脚本语言,一般是先加载解释器,然后加载解释文件的。

比如php a.php,先加载php解释器,然后把a.php加载到内存中的某一段区域,php解释器执行起来后,顺序解释a.php到php字节码,然后再顺序执行该字节码,调用php的某些扩展,或者直接用系统的API来实现执行任务。

 

所以一个系统,是否能够支持某种语言,以及如何支持该语言,看什么?

系统能否支持C语言?一般都支持

语言解释器是否是C语言写的?一般都是C语言写的

语言解释器启动时间是否很长?一般不会很长,如果很长,需要看业务场景是否允许,不允许需要换其它语言。

结论就是:把语言解释器加入到OS中,系统就能执行脚本程序了。

转载于:https://www.cnblogs.com/helww/p/8676642.html

你可能感兴趣的文章
Entity Framework 学习初级篇3-- LINQ TO Entities
查看>>
postgresql-查看表大小
查看>>
神经网络与机器学习 第一讲(5)——三种机器学习类型
查看>>
Mysql中like查询中存在反斜杠的解决方法
查看>>
[转载]for update的用法
查看>>
线性结构
查看>>
外部排序(基数排序)
查看>>
面试题---删除串中的指定子串
查看>>
Object properties in JavaScript
查看>>
Loadrunner socket协议lrs_receive函数接收到返回数据包 仍然等待服务器返回--解决
查看>>
C++第二周学习小结
查看>>
java读书笔记
查看>>
rabbitMQ_workQueue(二)
查看>>
Linux企业运维人员最常用150个命令汇总
查看>>
Joomla 2.5 内置控件
查看>>
chrome远程调试真机上的app
查看>>
来自Facebook的真正的大数据项目
查看>>
Web App中的Flexbox应用
查看>>
滚动播放文字或者图片信息效果
查看>>
POJ-1050To the Max
查看>>