应用软件,操作系统,CPU的关系
文章目錄
- 圖示
- 簡介
- 操作系統
- 總結
- 知識拓展
- 發展歷程
- 虛擬機
- 程序運行的硬件環境
- 程序運行的操作系統環境
- 手機系統,應用詳解
- 應用程序運行過程
- 主流公司軟件開發所用語言
圖示
前提:
- 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)調用系統功能實現應用程序運行(內存分配等等)
應用程序調用操作系統提供的底層接口傳遞應用程序的硬件需求,然后操作系統進行對應硬件資源的協調配置
主流公司軟件開發所用語言
針對不同的手機系統,各個手機系統開發公司都開發有針對自己系統的應用軟件開發工具,我們利用他們的開發工具,可以輕松的搭建出開發環境,通過學習相應SDK的開發文檔,進行各種APP的開發。
注意:上述語言是軟件開發所用語言并非開發系統本身所用語言。
- 綜上所述:
IOS軟件是二進制機器指令(軟件開發語言為Objective-C),而Android軟件是中間代碼.dex文件的二進制機器碼(class字節碼文件的優化版,軟件開發語言為java),運行時IOS便可以直接運行軟件對應功能的機器指令,反觀Android則需要java虛擬機再編譯,適配對應平臺(定制安卓,CPU等)翻譯為對應的機器指令再運行。
所以安卓與蘋果系統運行速度的差異,從一開始就決定了。
總結
以上是生活随笔為你收集整理的应用软件,操作系统,CPU的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言历史简介
- 下一篇: ls: 显示目下的内容及相关属性信息