前提:
由上图可得,操作系统就类似于应用软件和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写的,因为操作系统最根本都是基于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内核、较多的内核、较高的运行速度等硬件要求。
- 虚拟机所用的操作系统光盘、安装软件,与安装到裸机上的那个光盘一模一样,不需特制。
- 虚拟机安装好后,在宿主机的文件系统中以文件形式存储,由虚拟机平台加载运行。这个在宿主机的文件系统中存储的文件,也有时被称为“虚拟机”,这是不需要安装的,但原来是经过在宿主机上运行的虚拟机平台上“安装”才生成的文件,由虚拟机平台加载就可以运行。
拓展: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)调用系统功能实现应用程序运行(内存分配等等)
应用程序调用操作系统提供的底层接口传递应用程序的硬件需求,然后操作系统进行对应硬件资源的协调配置
针对不同的手机系统,各个手机系统开发公司都开发有针对自己系统的应用软件开发工具,我们利用他们的开发工具,可以轻松的搭建出开发环境,通过学习相应SDK的开发文档,进行各种APP的开发。
注意:上述语言是软件开发所用语言并非开发系统本身所用语言。
二叉搜索树中第K小的元素--二叉树中序遍历
介绍 HDFS是Hadoop应用程序使用的主要分布式存储,主要被设计在商用硬件上运行,也就是说,他必须满足低成本、高容错、高吞吐的特性才能在众多的分布式存储系统中脱颖而出。特点低成本 HDFS实现的分布式存储实际是由数百个甚至数千个服务器提供的(目前Hadoop已经实现了两千多个节点的部署),这比单独使用一台大型服务器在遇到故障时的成本付出要少的多,现在如果某个服务器发生
2019独角兽企业重金招聘Python工程师标准>>> ...
1.引言FPGA器件结合了 ASIC的高性能和微处理器的灵活,不仅拥有丰富的逻辑资源,而且可以进行方便灵活的配置。主动配置方式尽管配置速度快、实现简单,但并未发挥 FPGA配置灵活的特点,适合于 FPGA用作单一应用的场合,并且大容量的配置芯片及其占用的电路板面积也带来了较高的成本;被动配置方式需要使用外部控制单元产生配置时序,实现一般较为复杂,而且在目前常见的方案中,常由于接口速率限制 [1]或...
上一篇讲了一下mfc 通过消息映射通知别的窗口去更改控件状态,这篇讲一下如何发送自定义消息。背景:我在A窗口的一个edit control 内输入内容后B窗口显示我输入的内容。方案:可以用控件失去焦点这一事件代替按钮事件进行触发,同样的消息映射 主要是通过sengmessage完成LRESULT SendMessage( HWND hWnd, // handle of destination window UINT Msg, // message to send
/** * 在 MainActivity 类中定义 * 调用的显示 android 吐司的函数 */ public void MakeToToast(String str) {// Toast.makeText(this,str,Toast.LENGTH_SHORT).show(); Toast.makeText(this, str, Toast.LENGTH_LONG).show(); }...
TexLive2015的安装及注意点参考文章【1】、【2】、【3】在Fedora下安装TexLive2015并进行中文配置。不过由于环境及版本的不同,安装结果还稍有差异,差异总结如下:中文字体设置差异 按照上述安装教程,将windows中的字体拷贝过来并安装后,本需设置/usr/local/texlive/2015/texmf-dist/tex/latex/ctex/fontset 下的ctex
http://www.bogotobogo.com/cplusplus/multithreading_win32C.phpTo create a new process, we need to call CreateProcess(). Syntax:BOOL WINAPI CreateProcess( __in_opt LPCTSTR lpApplicationName, ...
首先, 什么是Python? 用python作者Guido van Rossum自己的话来说,Python是这样的一门语言: "它是一门高级编程语言, 它的核心设计理念是让所有代码变得更易阅读,并给开发者们提供一种“仅仅几行代码就能编写编程逻辑”的语法。 那么,对我来说,让我学习Python的第一个理由,就是它漂亮而优雅,能够顺畅自然地实现我的想法。另一个理由,就是Pyth...
“如何使用二维码进行表白-一键制作二维码”二维码在我们现在生活中随处可见,因为一次突发奇想,那我们可不可以制作一个自己的二维码呢!然后让女朋友去扫描一下…………嘿嘿嘿……不行,画面太美,让我先笑一下。她肯定会非常开心的。01— 材料准备甲:小编,你快点说怎么弄?咳咳,不急,不急,一步一步来,那我们先来说一下所需要的材料吧!我们使用到的 语言当然是只需要...
赵明莲摘要:近年来,计算机作为中学一门基础教育学科,越来越得到学校的重视。但由于计算机教学在中学发展起步较晚,导致目前中学计算机教学中普遍存在一些问题,为使这些问题得到有效地解决,本文提出了一些具体对策,以有利于中学计算机教学效果的提高和有利于中学计算机教学的改革与发展。关键词:中学;计算机教学;问题;对策一、引言随着计算机技术的发展,计算机课程成为中学课程体系的重要组成部分。但同时,由于计算机课...
bios设置对于经常需要处理电脑故障的朋友来说非常实用,但对于对数电脑入门朋友来说很多朋友对bios都不够了解,比如目前比较流行的U盘装系统就需要在bios里面设置开机启动项设置为从U盘启动,今天脚本之家编辑在上网到一篇介绍非常全的bios设置图解教程,这里转载过来与大家一起分享下。一、进入BIOS设置程序通常有以下三种方法1.开机启动时按热键(最通用也最常用) 大白菜超级u盘启动制作工具制作在开...