计算机程序的执行过程理解

<第一部分>

学过任何一门程序语言的人都会知道,一个可执行程序的形成要经过的步骤是:

编辑 ---> 编译 形成 .obj 文件 ---> 链接形成 .exe 文件。

那么计算机程序到底是怎样运行的呢?上面的简单过程我相信都可以想到。但是其实质,需要这些步骤的理由是什么?我们有没有想过呢?

首先当然是编程,需要的是程序设计语言。现在大多数我们都是使用 java,c,c++ 等高级程序语言。但是计算机所能识别的知识计算机语言即二进制代码。这需要编译器和汇编器的帮助。其次,机器语言需要加载到内存,形成运动中的程序,即进程,这就需要操作系统的帮助,进行程序的调度等。进程需要在计算机芯片 CPU 上执行才算是真正的执行,要不然就是处于等待队列中的,没有真正的运行,而程序要在 CPU 上执行必须由操作系统完成。再次,在 CPU 上执行的机器语言指令需要变成能够在一个个时钟脉冲里执行的基本操作,这需要指令集结构和计算机硬件的支持,而整个程序的执行过程还需要操作系统提供的服务和程序语言提供的执行环境。这样,一个程序到微指令执行的过程就完成了。

程序执行至少需要四个因素:

1.       程序设计语言

2.       编译系统

3.       操作系统

4.       指令集结构(计算机硬件系统)

(转自:http://blog.sina.com.cn/s/blog_724d24bf0100yfe9.html)

 

<第二部分>

java程序执行原理

<o:p> </o:p> 首先了解一下什么是计算机程序。计算机的作用在于它可以帮助人类完成计算功能,它由硬件和软件两部分组成,硬件包括中央处理器( CPU )、存储器、输入输出设备等,软件包括计算机程序、相关文档及数据。而计算机程序可以看作整个计算机系统的灵魂,它向计算机发出指令,指挥数据的输入、运算和输出,由于计算机程序的作用太重要了,因此好多人把软件和程序看成是一回事。

计算机程序是由一条条的指令组成的,但计算机所能接受的指令是由 01 构成的二进制数据,这叫做机器指令。让计算机算一下 1+2 等于几怎么办呢?只能向计算机输入类似于下面的代码了:

0011111 0000000 0000001 000000 00000010

当然了,具我的老师说,他的老师编写过这样机器指令程序,当时还没有键盘这种东西,首先根据程序中 01 的位置在纸带上打孔,然后把纸带送到机器上进行读入,然后……,试想一下,如果使用机器指令编写一个企业管理信息系统的话,得浪费多少木材资源啊,估计要毁坏一个大兴安岭。

好在对于我们来说噩梦已经结束了,如今编程语言已经从机器语言、汇编语言发展成接近人类语言的高级语言, Java 也正是一种优秀的高级程序设计语言。

我们利用 Java 语言编写程序,实际上是编写程序的源代码( source code ),程序设计者能看懂这些源代码,但计算机是不懂的, 50 多年来它们一直顽固不化,仍然只认得机器指令。

怎么才能让 Java 编写的程序能够在计算机上执行呢?

首先要利用 Java 编译器( JDK 自带的工具)把它转换成一种叫做 Java 字节码( Byte Code )的东西,这个过程叫做编译,它可以检查程序中的错误。

Java 字节码可以在计算机上运行了吗?还是不行,这种字节码只有 Java 虚拟机( JVM )才能读懂,也就是说一台计算机如果想运行 Java 程序的话,安装 Java 虚拟机是必不可少的。 Java 虚拟机连同一些必要的 Java 核心类库一起称作 Java 运行时环境,这是执行 Java 程序必不可少的工具,可以免费获得并安装。

运行 Java 程序时, Java 虚拟机首先读入字节码、对节码进行正确性,针对客户计算机平台生成对应的机器指令,由客户机器执行机器指令。

<o:p> </o:p>
    好了,我们回顾一下 Java 程序开发及运行的过程。

现在假如你是一个优秀的 Java 程序设计师,老板交给你一个非常重要的任务:为客户编写一个 Java 应用系统,这个系统具有一项高级功能——计算两个数相加的和!

你该怎么办呢?

<!--[if !supportLists]-->1.              <!--[endif]-->编写满足需求的 Java 源程序,将源程序保存为以 .java 为扩展名的文件。例如 Add.java

<!--[if !supportLists]-->2.              <!--[endif]-->利用 JDK 提供的 javac 命令将源文件编译为字节码文件,例如输入:

javac Add.java

java 编译器可以生成名称为 Add.class 的字节码文件。

<!--[if !supportLists]-->3.              <!--[endif]-->在装有 Java 运行环境的机器上执行 Add.class ,例如输入:

java Add

其他的工作交给 Java 虚拟机完成。

<!--[if !supportLists]-->4.              <!--[endif]-->你的心里暗暗想: Java 虚拟机者是个好东东。

上面介绍的是手工编译、执行 Java 程序的过程,目前有很多优秀的开发工具用于开发 Java 应用程序(如 EclipseNetBeansJbuilder 等),编写完代码后可以通过菜单项或快捷按钮进行编译、运行程序。但我们应该了解:在图形化界面的背后还是调用了 javacjava 命令

转自:http://shenhai.iteye.com/blog/64954

 

 

 

<第三部分>

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值