首页 > 编程语言 >《程序是怎样跑起来的》·第七章 程序是在何种环境下运行

《程序是怎样跑起来的》·第七章 程序是在何种环境下运行

时间:2023-02-12 16:33:51浏览次数:36  
标签:硬件 Java 操作系统 代码 程序 何种 第七章 CPU 运行

开篇

(1)应用的运行环境,指的是什么?      操作系统和计算机本身(硬件)的种类 (2)Macintosh用的操作系统(MacOS),在AT兼容机上能运行吗?      无法运行 (3)Windows上的应用,在MacOS上能运行吗?      无法运行 (4)FreeBSD提供的Ports,指的是什么?      通过使用源代码来提供应用,并根据运行环境进行整合编译,从而得以在该环境下运行的机制 (5)在MacOS上可以利用的Windows环境模拟器称为什么?      Virtual PC for Mac (6)Java虚拟机的功能是什么?      运行Java应用的字节代码  

1、运行环境=操作系统+硬件

如表7-1所示。从中可以看出,在表示程序的运行环境时,列出了Operating System(操作系统)和计算机的主机(硬件)两项,由此,大家可以清楚地知道运行环境是这两者的综合。也就是说,操作系统和硬件决定了程序的运行环境。

 

同一类型的硬件可以选择安装多种操作系统。例如,同样的AT兼容机A中,既可以安装Windows,也可以安装LinuxB等操作系统。从程序的运行环境这一角度来考量硬件时,CPU的种类是特别重要的参数。为了保证Office 2007的正常运行,需要具备Pentium等被称为x86C的CPU(微处理器)。

CPU只能解释其自身固有的机器语言。不同的CPU能解释的机器语言的种类也是不同的。例如,CPU有x86、MIPS、SPARC、PowerPCA等几种类型,它们各自的机器语言是完全不同的。

机器语言的程序称为本地代码(native code)。程序员用C语言等编写的程序,在编写阶段仅仅是文本文件。文本文件(排除文字编码的问题)在任何环境下都能显示和编辑。我们称之为源代码。通过对源代码进行编译,就可以得到本地代码。在市面上出售的用于Windows的应用软件包CD-ROM中,收录的就不是源代码,而是本地代码。

 

2、Windows克服了CPU意外的硬件差异

 计算机的硬件并不仅仅是由CPU构成的,还包括用于存储程序指令和数据的内存,以及通过I/O连接的键盘、显示器、硬盘、打印机等外围设备。      Windows操作系统对克服这些硬件构成的差异做出了很大贡献。      在Windows的应用软件中,键盘输入、显示器输出等并不是直接向硬件发送指令,而是通过向Windows发送指令来间接实现的。因此,程序员就不用注意内存和I/O地址的不同构成了。因为Windows操作的是硬件而非应用软件,而且针对不同的机型,这些硬件的构成也是有差异的。不过Windows本身则需要为不同的机型分别提供专用的版本。      目前来说,即便是Windows,也依然无法吸收CPU类型的差异。

3、不同操作系统的API不同

     同样机型的计算机,可安装的操作系统类型也会有多重选择。例如,AT兼容机的情况下,出Windows之外,还可以采用Unix系列的Linux及FreeBSD等多个操作系统。当然,应用软件则必须根据不同的操作系统类型来专门开发。CPU的类型不同,所对应的机器语言也不同,同样的道理,操作系统的类型不同、应用程序向操作系统传递指令的途径也是不同的。      应用程序向操作系统传递指令的途径称为API。因为不同操作系统的API是由差异的,因此,将同样的应用程序移植到其他才做系统时,就必须要重写应用中利用到的API部分,像键盘输入、鼠标输入、显示器输出、文件输入输出等同外围设备进行输入输出操作的功能,都是通过API提供的。      在同类型操作系统下,不管硬件如何,API基本上灭有差别,因而,针对某特定操作系统的API所编写的程序,在任何硬件上都可以运行。当然,由于CPU种类不同,机器语言也不相同,因此本地代码也是不同的。这种情况下,就需要利用能够生成各CPU专用的本地代码的编译器,来对源代码进行重新编译了。      程序(本地代码)的运行环境是由操作系统和硬件来决定的。

4、FreeBSD Port帮你轻松使用源代码

     既然CPU类型不同会导致同样的本地代码无法重复利用,那为何不直接把源代码分发给程序呢?      Unix系列操作系统FreeBSD中,存在一种名为Ports的机制。该机制能够结合当前运行的硬件环境来编译应用的源代码,进而得到可以运行的本地代码系统。如果目标应用的源代码没有在硬件上的话,Ports就会自动使用FTP连接到相关站点来下载代码。

5、利用虚拟机获得其他操作系统环境

     即使不通过移植,我们也可以使用虚拟机软件进行运行。虚拟机我想大家都是用过的,这里不多加介绍。

6、提供相同运行环境的Java虚拟机

     除虚拟机的方法之外,还有一种方法能够提供不依赖于特定硬件及操作系统的程序运行环境,那就是Java。      使用Java编写的程序,编译后生成的并不是特定CPU使用的本地代码,而是名为字节代码的程序。字节代码的运行环境就称为Java虚拟机。Java虚拟机是一边把Java字节代码逐一转换成本地代码一边运行的。      例如:在使用用于AT兼容机的Java编译器和Java虚拟机的情况下,编译器会将程序员编写的源代码(sample.java)转换成字节代码(sample。class)。而Java虚拟机(java.exe)则会把字节代码变换成x86系列系列CPU适用的本地代码,然后由x86系列CPU负责实际的处理。      在程序运行时,将编译后的字节代码转换成本地代码,这样的操作方法看上去有些迂回,但由此可以实现同样的字节代码在不同的环境下运行。如果能够结合各种类型的操作系统和硬件做成Java虚拟机,那么,同样字节代码的应用就可以在任何环境下运行。

另一点就是运行速度的问题。Java虚拟机每次运行时都要把字节代码变换成本机代码,这一机制是造成运行速度慢的原因。

7、BIOS和引导

     程序的运行环境中,存在着名为BIOS(Baisc Input/Output System)的系统。BIOS存储在ROM中,是预先内置在计算机主机内部的程序。BIOS除了键盘、磁盘、显卡等基本控制程序外,还有启动“引导程序”的功能。引导程序是存储在启动驱动器起始区域的小程序。操作系统的启动驱动器一般是硬盘,不过有时也可以是CD-ROM或软盘。      开机后,BIOS会确认硬件是否正常运行,没有问题的话就会启动引导程序。引导程序的功能是把在硬盘灯记录的OS加载到内存中运行。虽然启动应用是OS的功能,但OS并不能自动启动自己,而是通过引导程序来启动。      

标签:硬件,Java,操作系统,代码,程序,何种,第七章,CPU,运行
From: https://www.cnblogs.com/Chenyaxuan/p/17114031.html

相关文章

  • C语言学习笔记(四): 循环结构程序设计
    while语句定义While语句是C语言中的循环语句,它按条件循环执行语句,直到条件不满足为止语法格式如下:while(condition){//循环体内容;}使用实例求1+2+3+…+100......
  • 程序中sql排除某一列思路
    最近项目上有个需求,导出不同表的数据为sql,再导入另一个库中;两个库中表名可能会重复,所以自增的id列不可以导出,不能用select*。就想着sql有没有排除某一列的关键字......
  • C语言学习笔记(三): 选择结构程序设计
    if语句if(){}if(a=1){printf("hehe");}//单独一个ifif(){}else{}inta=1,b=2; if(a==b){ printf("haha");//ifelse } else { printf("hehe......
  • 程序员的植物种植学
    这篇文章的主要目的是想告诉大家,我决心放弃种植黄芪了。主要的话,种植太多种植物我会照顾我不过来。最关键我是个懒人,于此,我只想专专心心的把金银花种植好,管理好。当然,可能有......
  • 软件开发 101:从程序员到软件工程师
    在我多年的软件开发经验中,我有机会与来自其他领域的几位杰出的研究人员和工程师一起工作。他们通常最终会利用自己的专业知识编写一些非常聪明的代码,随着需求的变化和项目的......
  • 成为程序员还不够
    在我们现在生活的全球经济中,有一些不言而喻但众所周知的规则。其中之一是我们作为程序员在大多数情况下不能要求我们所从事的业务的一些利润份额。当然,在我们地球上的某些地......
  • Java程序员常用的技术有哪些?
    Java程序员常用的技术有哪些?作为Java程序员至少需要了解那些技术呢?有几年工作经验的老程序员拥有广阔的技术面,同时在工作过程中也总结出了经常使用的是其中20%的技术。 ......
  • C语言学习笔记(二): 简单的C程序设计
    数据的表现形式常量在C语言中常量有以下几种:整型常量:0,-1,100实型常量:小数形式(12.12);指数形式(12.1e3=$$12.1\times10^3$$)字符常量:普通字符(’a’,’Z’,’#’);转......
  • RabbitMQ在docker 安装及程序使用
    docker安装RabbitMQ[root@hgwtencent~]#dockerrun-d--namerabbitmq-p5671:5671-p5672:5672-p4369:4369-p25672:25672-p15671:15671-p15672:15672rabb......
  • OpenSSL发布修复程序以解决多个安全漏洞!
    OpenSSL项目已发布修复程序以解决多个安全漏洞,包括开源加密工具包中的一个高严重性错误,该错误可能会使用户遭受恶意攻击。国际知名白帽黑客、东方联盟创始人郭盛华表示,该......