应用程序是如何被执行起来的

一、为什么需要操作系统

        数字系统是一个能够对数字信号进行加工、传递和存储的实体,它由各种数字逻辑电路相互连接而成。计算机便是一种广泛的应用的数字系统,所以计算机就是用来对输入的01数字流进行加工处理后输出的机器。

应用程序是如何被执行起来的_第1张图片

        现代计算机系统是由一个或多个处理器、存储器、输入输出设备以及适配器等主要部分通过总线连成的一个整体。一个计算机是一个复杂的系统,如果每个应用程序员在编写程序时面向裸机编程,便不得不掌握系统的所有细节,此外还要做到管理各个部件并加以优化使用,这是及其麻烦的。所有计算机安装了一层软件,称为操作系统,它的任务是为用户程序提供一个更好、更简单、更清晰的计算机模型。 

应用程序是如何被执行起来的_第2张图片

二、应用程序如何被执行

1)机器指令

        CPU所能识别的机器指令是一列预定义的二进制数字,对于不同的CPU这套指令并不同。当指令和数据被输入到计算机中,计算机将之转换为一列高低电平,以使得计算机的电子器件受到驱动,进行运算。
        计算机上运行的一切程序,都是机器语言程序。包括操作系统和所有的应用软件。这些机器语言的程序,一般都不是直接用机器语言编写的,而是用各种或高级或低级的程序设计语言(包括汇编语言、C语言等)编写后通过翻译程序翻译成机器语言程序,然后再在硬件上运行的。

应用程序是如何被执行起来的_第3张图片

2)操作系统如何被启动

        我们知道CPU所能直接访问的是主存,我们所编写或下载的程序是放在硬盘中的,因此所有程序想要被执行必须被加载进主存中才能被CPU访问,操作系统程序也不例外。

        当按下计算机启动键,通电后CPU首先会运行一个称为 基本输入输出系统(Basic Input Output System,BIOS)的程序,是位于一块闪速RAM中的一组代码、01流,。BIOS能够带领CPU识别并加载主板上的重要硬件和集成元件,最重要的一步是找到启动设备,所谓启动设备就是指从哪里加载操作系统。

        通常BIOS会把磁盘当做启动设备,便开始将磁盘的第 0 号块(也被称之为 Master Boot Record,MBR)加载到内存中,其实是 第一阶段 boot loader 程序,CPU控制权便转交到boot loader程序,这样 CPU 终于开始直接与内存交互了,CPU 开始从内存中取出指令然后执行。

        CPU 在执行 MBR 中的代码时会去检查操作系统存在哪个分区中,定位后开始从相应分区的起始位置读取磁盘数据到内存中,这时的磁盘数据中保存的就是第二阶段 boot loader,此时一阶 boot loader 把控制权转交给二阶 2_boot loader,

        2_boot loader 的主要工作将操作系统加载到内存中,此后控制权转交给操作系统,操作系统开始接管计算机,经过一系列自身的初始化后操作系统创建出若干必要进程。

3)应用程序执行

        进程本质上就是程序的一次执行过程,是操作系统进行资源分配和调度的独立单位。当程序源代码经过 预处理、编译、汇编、链接后形成能被CPU识别的机器指令,即一个可执行文件,当要运行此程序时,操作系统为其创建相应的进程,该程序便可运行起来。

三、jvm与操作系统的关系

        以上我们可知,一个应用程序的运行需要操作系统的支持。另外目前我们所编写的程序,都是调用操作系统库函数所编写的,程序想要被运行必定离不开操作系统,而java语言号称一次编译到处执行是如何实现的呢?

        JVM是Java Virtual Machine的缩写。它是一种基于计算设备的规范,是一台虚拟机,即虚构的计算机,它屏蔽了具体操作系统平台的信息。

        由于操作系统的不同,一个程序可能要编写几套,十分麻烦 。于是便有了JVM,JVM来向下关联所有操作系统,其能操作所有操作系统,向上程序员提供统一接口,也就是JavaAPI,开发者只需要面向JVM(JavaAPI)编程,编写java源文件,编译之后生成一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。

参考资料:

操作系统是如何启动起来的? - 折腾族 创客'の博客 (ztuck.vip)

Java、JVM和操作系统之间的关系,写给新人, - 神一样的存在 - 博客园 (cnblogs.com)

王道考研

你可能感兴趣的:(java,程序人生)