文章目录

    • 图示
    • 简介
    • 操作系统
    • 总结
    • 知识拓展
      • 发展历程
      • 虚拟机
      • 程序运行的硬件环境
      • 程序运行的操作系统环境
      • 手机系统,应用详解
      • 应用程序运行过程
      • 主流公司软件开发所用语言

图示

前提:

  • CPU只能识别处理二进制,处理机器指令,因此无论什么信息最终若想用电脑处理则需要转化为二进制形式。
    硬盘中存储的信息也都为二进制文件(电脑中所有信息都是二进制存储的)。
    所以信息需要编码后才可存储到计算机。
  • 高级语言编译运行:高级语言指令转换为功能等效的汇编程序,再由汇编程序经过编译连接转化为机器语言。
  • 软件是编译后的二进制机器码(java开发的软件编译是class字节码的二进制机器码),它与运行平台有关。
  • 应用软件(编译后的机器码或class字节码的机器码)-》操作系统(翻译为机器指令)-》CPU(机器指令)


由上图可得,操作系统就类似于应用软件和CPU的翻译官,因此应用软件其实就是基于不同的操作系统安装不同的型号,例如IOS和Android安装的应用软件就不同。
结论:不同的CPU(不同机器指令集)对应不同的操作系统(翻译官)搭载不同型号的应用软件(高级语言)
不同操作系统的应用软件互不兼容除非应用程序调用的那些操作系统的底层接口一样
知识拓展
Linux与UNIX
Linux与UNIX

异:
Linux是开放源代码的自由软件,UNIX是对源代码实行知识产权保护的传统商业软件。 UNIX系统大多是与硬件配套的,而Linux则可运行在多种硬件平台上。
同:
UNIX是一个功能强大、性能全面的多用户、多任务操作系统,可以应用从巨型计算机到普通PC机等多种不同的平台上,是应用面最广、影响力最大的操作系统。
Linux是一种外观和性能与UNIX相同或更好的操作系统,但,Linux不源于任何版本的UNIX的源代码,并不是UNIX,而是一个类似于UNIX的产品(类UNIX操作系统),Linux产品成功的模仿了UNIX系统和功能(根据UNIX接口准则编码的操作系统,可以兼容所有UNIX系统软件)。

UNIX知识产权
IOS:I指iphone,O指operation,S指system
Mac OS:苹果电脑的操作系统与IOS都是类UNIX操作系统
PC:personal computer
计算机发展史

简介

1、CPU指令集:(主流)ARM 和 X86两类 (机器指令集)。CPU指令集取决于CPU的体系架构

2、操作系统:LINUX和 WINDOWS等。(翻译官)

  • LINUX优点:各种CPU架构都可以跑(会多种机器指令集的翻译官)
    Linux分为不同指令集版本(X86版本和ARM版本)
  • WINDOWS: WINDOWS目前只支持X86指令集, WINDOWS RT只支持ARM指令集(只会一种机器指令集的翻译官)

3、应用程序的编译流程:

应用程序—>操作系统—>CPU指令,eg:一个.c应用程序,经操作系统编译为CPU指令,在CPU架构上执行。
注意:一个应用程序,由操作系统编译为ARM指令,就只能在ARM体系架构上运行;编译为x86指令,就只能在x86体系架构上运行。

操作系统

现在电脑上运行的操作系统是基于CPU指令集编译完成的机器语言级程序。
装机的操作系统无需再编译,CPU可以直接运行操作系统。
这也是开源LINUX具备多个指令集版本的原因,因为可以根据LINUX源码编译出不同CPU指令集版本的机器语言级程序。

操作系统和CPU之间的关系

 LINUX操作系统支持多种指令集,WINDOWS操作系统只支持x86指令集。
 Linux分为不同指令集版本(X86版本和ARM版本)

总结

CPU的不同决定适配的操作系统的不同,不同操作系统对应不同操作系统版本的软件(例如安卓版CSDN和苹果版CSDN)。
为什么同样的软件不能在不同的操作系统上运行
因为软件需要调用的操作系统的底层接口实现功能而接口类型和接口名都是软件固定调用的所以除非不同系统的底层接口相同才可以实现软件兼容(Linux和Unix)
ARM-Linux 系统调用流程

针对信息交互角度,操作系统是翻译官作用,而针对整个计算机而言,操作系统是管家作用

进程管理(Processing management)

内存管理(Memory management)

文件系统(File system)

网络通讯(Networking)

安全机制(Security)

用户界面(User interface)

驱动程序(Device drivers)

知识拓展

通俗理解:64位应用程序产生64位的需求指令(64位范围内存处理,64位数据处理等等),64位操作系统响应64位需求指令并传递给64位CPU进行处理,触发,运行64位操作系统中对应功能,64位操作系统进行以64位为基准的计算机资源分配(64位内存分配寻址等等)。
因此:
64位CPU可以安装32位操作系统,反之不可以,可过剩不可缺漏。
64位操作系统可以安装32位应用程序,反之不可以,可过剩不可缺漏。
64位CPU,64位操作系统,和64位应用程序三者之间的关系
64位CPU是指一次性能处理64bit数据

32位操作系统指机内 数据长度,指令长度,地址长度是二进制32位,
64位操作系统指机内 数据长度,指令长度,地址长度是二进制64位
64位操作系统对计算机资源进行64位范围的划分与分配

发展历程

  • 首先是C和UNIX的伴生出现,同一个团队开发,基于C开发的UNIX,C也是为了开发UNIX才会出现。
  • 然后类UNIX(底层接口API方法名相同,方法体不同)的LInux出现,以及种种类UNIX操作系统的应运而生。

因此基于操作系统的底层设施基本是由C写的,因为操作系统最根本都是基于C的,由C写的底层设施调用操作系统接口API时会更加快捷,方便。
并且Java,Python等等也是基于C进行封装开发的,将C调用系统接口实现的功能进行了封装,越来越完善最后出现了新的高级语言。
实际上Java,Python主要封装了C语言关于商业软件开发的固定系统调用流程,对于底层设施的开发还是需要C语言的创新性调用系统底层接口实现创造开发。

虚拟机

若是安装操作系统,双系统等等则需要考虑操作系统是否与CPU芯片适配或者安装适配该CPU芯片指令集的操作系统,而虚拟机解决了这个弊端,可以模拟不同CPU跑不同操作系统,实质是实现了不同CPU指令集中相同功能的机器指令之间的交换翻译(存在一定的误差等等),使用的仍然是本地CPU(黑苹果系统原理)。
电脑的手游模拟器也是这个原理。
java虚拟机和上述虚拟机实际上都是将(class字节码,机器指令集)等翻译为对应平台可运行的机器指令,目的相同,功能相似。

上图实质上便是选择虚拟机中适配该操作系统的CPU机器指令集类型(本地电脑CPU指令集类型在安装虚拟机软件时就已经确定了),功能表现上就像是模拟了一个新型CPU来跑对应的操作系统,其实仍然使用的是本地CPU,只是进行了本地与虚拟机中操作系统适配的指令集之间的交换翻译(相同功能)

虚拟机其实就是一款模拟电脑硬件(CPU等等) 的软件。比如说你的电脑,在没有装windows系统或者其他操作系统之前,它本身是一个由硬件组装的电脑,一般称为裸机。而虚拟机就是模拟电脑硬件的一款软件。记住,虚拟机是一款软件。你装了虚拟机之后可以相当于你多了一台裸机。然后再在虚拟机里装操作系统,就相当于多了一台电脑。注:简洁点,虚拟机的原理就是模拟硬件的。

实现本地电脑CPU指令集与模拟对应系统的CPU指令集之间的机器指令交换翻译

虚拟机分了两种,一种是通过虚拟机厂商提供的内核直接与硬件打交道,另一种是虚拟机厂商提供的内核通过宿主操作系统间接与硬件打交道。通常个人使用的如vmware的workstation版的,就属于后者,而vware的esxi是在无其他操作系统的裸机环境下,使客户操作系统通过esxi与硬件打交道,这属于前者。
虚拟机在运行表现上,与虚拟的操作系统安装在裸机上的行为基本一致。 通常在个人使用的情况下,虚拟机是这样产生的:
首先安装宿主操作系统,比如windows 7. 然后在windows 7上安装虚拟机控制系统,如vmware
workstation。vmware workstation的安装跟在windows里安装其他应用软件一样没有什么特别的。但安装完成后,计算机就有了一个虚拟的计算机了,这个虚拟的计算机不过此时还是个裸机,需要在它上面安装操作系统和应用软件。
然后,启动vmware workstation,在vmware
workstation中调用光驱或iso镜像,这里含有虚拟的客户机操作系统,如linux的。这时,你需要像在裸机上安装linux一样,完成linux的安装,此后,虚拟机的表现就如同一在般裸机上安装的系统一样了。宿主机和客户机共享了键盘鼠标,通过焦点移除移进虚拟机的窗口来完成切换。
这样,虚拟机的安装就完成了,至此,一个在宿主硬件宿主操作系统上运行的虚拟机就算基础安装完成,此后需要为它安装应用软件。
这样,你就在单台实体宿主硬件上,实现了两个操作系统环境同时存在同时运行。一些从事IT工作的人往往需要在电脑里安装多个虚拟机,以完成各种环境的调试工作。
虚拟机环境需要较多的CPU内核、较多的内核、较高的运行速度等硬件要求。

  • 虚拟机所用的操作系统光盘、安装软件,与安装到裸机上的那个光盘一模一样,不需特制。
  • 虚拟机安装好后,在宿主机的文件系统中以文件形式存储,由虚拟机平台加载运行。这个在宿主机的文件系统中存储的文件,也有时被称为“虚拟机”,这是不需要安装的,但原来是经过在宿主机上运行的虚拟机平台上“安装”才生成的文件,由虚拟机平台加载就可以运行。

程序运行的硬件环境

  • 程序运行平台:是指程序运行时需要的各种硬件环境和操作系统环境。
  • 不同程序运行时,需要的硬件环境不同。例如,C#和VB等语言编写的程序,只能支持Intel和AMD系列的CPU硬件环境,因为C#是基于CISC指令集的程序语言。
    90%的智能手机(安卓系统),采用ARM(安媒)CPU,而ARM采用RISC指令集,因此,C#语言编制的程序不能在智能手机中运行。
  • 一些通用程序语言(如C/C++,Java,PHP等)编写的程序,如果需要运行在不同的硬件环境下,也需要采用不同的编译器对于源程序进行重新编译。

程序运行的操作系统环境

  • 程序的运行还需要操作系统的支持。例如,Windows下的应用程序在Linux系统中不能运行;
  • 程序开发都是在某个操作系统中进行的,程序开发时,需要调用操作系统底层接口方法(子程序方法名不同)来实现某些功能。例如,用VC程序语言在Windows中编程时,需要调用Windows操作系统提供的各种子程序接口(如窗口,对话框,菜单,快捷方式等)。在这个环境中开发出来的程序移植到其他操作系统平台(如Mac OS,Linux等)时,其他操作系统并没有提供这些子程序接口,或者子程序接口的调用参数和格式不同,这都会导致程序不能运行。同理Java语言进行Android开发时,也是基于安卓系统各种底层接口(子程序功能),调用对话框等等
  • 系统运行库(功能函数:底层接口(子程序))是操作系统与应用程序沟通的桥梁。
  • 软件可不可以跨系统主要看系统之间底层接口是否相同。
    应用程序功能的实现需要调用操作系统的功能函数。

拓展:Linux是完全按照Unix接口准则编写的类Unix操作系统,所以能在Unix安装运行的软件也能在Linux系统上安装运行。
因为两者程序调用的底层接口名和参数以及功能都一样,但是实现功能的方式不一样,可以实现软件移植。

综上所述:若上述问题可以解决(类似虚拟机解决硬件问题)则便可以实现应用程序兼容(鸿蒙系统配置底层接口兼容安卓APP)

手机系统,应用详解

  • Android应用程序是用Java语言编写的。编译过后的(class)字节码,以及应用程序要求的其他数据和资源文件,通过编程工具被绑定在一起,称为Android包,这是一个带.apk后缀的档案文件。这个文件也是用户下载到他们设备上的文件。所有的代码在一个单一的.apk文件中,组成一个“应用程序”。

  • 基于安卓智能操作系统的第三方智能操作系统(基于Linux开发):因为谷歌已经开放安卓的源代码,所以中国和亚洲部分手机生产商研发推出了在原安卓的系统上,进行二次研发,以自己的品牌推出的操作系统,其中来源于中国手机生产商操作系统最为广泛,例如Flyme、IUNI OS、MIUI、乐蛙、点心OS、腾讯tita、百度云OS、乐OS、CyanogenMod、JOYOS、Emotion UI、Sense、LG Optimus、魔趣、OMS、百度云·易、Blur、EMUI、阿里云OS等。

  • 不同安卓(java语言)机(小米,华为)之间可以软件(java语言编译后的class文件)共享,各厂家对原生安卓改动情况,底层接口方法体的完善和修改可再编译字节码文件适配自身平台便可以运行了,

  • 苹果(Object-c)机用安卓软件的原理是安装上对应的jdk虚拟机从而进行命令转译跨平台运行。

  • 鸿蒙系统兼容安卓APP

  • 系统运行库(功能函数:底层接口(子程序))是操作系统与应用程序沟通的桥梁。

  • 软件可不可以跨系统主要看系统之间底层接口是否相同。
    应用程序功能的实现需要调用操作系统的功能函数。

android是基于linux的开源操作系统。 linux是使用标准C语言开发的操作系统。 android底层驱动以及操作系统内核使用C语言以及汇编开发。
android操作系统本身是使用Java开发,并使用JNI调用本地的C语言库,实现操作系统底层调度。
android应用是使用Java开发;同时也可以使用C/C++
native开发,但是多数时候不用用到C。所以基本上就是Java为标准开发语言。
android使用了修改过的JVM(Java虚拟机–知识拓展有相关介绍)叫做dalvik虚拟机,其本质还是Java虚拟机。
所以对应每一个APP都会创建个dalvik虚拟机,也就是一个linux进程。
说复杂了,其实就是基于linux下的修改版Java虚拟机。
Android运行时机制由Java核心类库和Java虚拟机(Dalvik)共同构成。

软件是编译后的二进制机器码(java开发的软件编译是class字节码),它与运行平台有关。

应用程序运行过程

应用程序通过调用操作系统提供的底层接口(API)调用系统功能实现应用程序运行(内存分配等等)
应用程序调用操作系统提供的底层接口传递应用程序的硬件需求,然后操作系统进行对应硬件资源的协调配置

主流公司软件开发所用语言

  1. IOS系统和Mac系统软件开发语言为Objective-C,开发者一般使用苹果公司开发的ios sdk 搭建开发环境, iOS SDK是开发iPhone和iPad应用程序过程中必不可少的软件开发包,提供了从创建程序,到编译,调试,运行,测试等一系列开发过程中所需要的工具;
  2. 安卓 Android软件开发语言为java,开发者一般是用谷歌公司开发的android sdk搭建开发环境,使用Java进行安卓应用的开发;
  3. 微软Windows系统软件开发语言是C#;
  4. 塞班symbian系统软件开发语言是C++。

针对不同的手机系统,各个手机系统开发公司都开发有针对自己系统的应用软件开发工具,我们利用他们的开发工具,可以轻松的搭建出开发环境,通过学习相应SDK的开发文档,进行各种APP的开发。
注意:上述语言是软件开发所用语言并非开发系统本身所用语言。

  • 综上所述:
    IOS软件是二进制机器指令(软件开发语言为Objective-C),而Android软件是中间代码.dex文件的二进制机器码(class字节码文件的优化版,软件开发语言为java),运行时IOS便可以直接运行软件对应功能的机器指令,反观Android则需要java虚拟机再编译,适配对应平台(定制安卓,CPU等)翻译为对应的机器指令再运行。
    所以安卓与苹果系统运行速度的差异,从一开始就决定了。

更多推荐

应用软件,操作系统,CPU的关系