帶內核的安卓x86是什麼意思
㈠ 關於android和x86的幾點疑問。 android基因linux內核,系統除了內核還有其他什麼
android 除了基於 Linux 內核,他的上層運行環境和相關函數庫,命令程序都是自己的。
其實 android 就是一個基於 Linux 內核的 JAVA 虛擬機環境。
實際 Android 程序都是基於 JAVA 虛擬機跑的解釋型語言程序。
但解釋型語言程序性能肯定不如本地二進製程序。所以 Android 還有一種 NDK 程序。
也就是 Android 裡面有部分本地二進製程序的內容。這樣本地程序方式運行,效率可以最高而且可以根據 CPU 功能做優化(比如 neon )。
指令集不同,但他的 JAVA 虛擬機是解釋型語言,基於 JAVA 語言的程序是可以無差別運行的。只要能保證 Android 上面的 JAVA 虛擬機可以在 x86 上面成功運行就行了。
但 Android 有個另外的問題,就是 JAVA 虛擬機是針對 ARM 做性能優化的,在 X86 上面,這種性能優化都沒了,需要另外在 x86 上面重新優化。但聽說 Android 的 JAVA 虛擬機的語言裡面,也有針對 ARM 硬體進行的修改設計,所以這種針對 ARM 性能優化的 JAVA 程序,在 X86 的系統上面性能也有損失。
所以 Android 出來很久後,在 x86 上面的運行效率都一直不怎麼樣。
而且現在還有 NDK 程序的出現, ARM 的二進製程序在 x86 上面是不能運行的。這些程序都不能運行。
不過 x86 有個優勢就是自己的性能很強,而且模擬器技術現在也很強了。在 x86 上面,可以藉助虛擬機(qemu 的 user mode 就值得看看)來運行 ARM 的二進製程序。
不過虛擬機其實還是有性能損失的。
所以未來,Android 的跨 CPU 架構依然還是問題。純 JAVA 程序好說,用了 NDK 的程序就是問題了。
不過 llvm 這個編譯器又給了另外一條路,既可以虛擬機方式運行,又可以編譯成本地程序而成為二進製程序來優化性能運行。或許 Android 會考慮使用這種方法或者類似的讓 NDK 程序可以跨 CPU 實現。代價是 Android 要自帶一個編譯器,體積也不小的。
MAC OS X 還有一種方法。在 MAC 放棄 IBM 的 Power CPU 而改用 Intel 的 CPU 後,他的程序都是裡面附帶兩套二進製程序,老的 G4 CPU 的機器,就用程序裡面的 power 指令集的程序代碼。新的 Intel CPU 的機器,就自動用裡面的 x86 指令來運行程序。從而實現完美的雙指令集運行。不過代價是這樣的程序都是兩套指令集的內容,體積翻倍。
目前來說,似乎用了 NDK 的程序還都不能用的。不排除現在某些 x86 的手機,使用了虛擬機技術來實現運行 NDK 程序。現在 Linux 下面的 qemu 的 usermode 配合內核的 binfmt_misc 功能,可以讓系統自動識別某個架構的程序,去調用 qemu 來執行。