為啥感覺沒有純Linux的手機系統呢?不用虛擬機,硬件利用率百分百?

春菇涼


你問出這樣的問題,說明你完全不理解啥是操作系統。

操作系統分系統內核和應用程序,其中有一類特殊的應用程序,就是人機交互界面,也叫shell.

人機界面是我們人類控制電腦的接口,一個操作系統必須得有一個人界面,否則看起來和沒有一樣.

linux系統內核,可以運行各種個樣的界面,比如最常用的命令行界面,這個通常是由bash這個程序提供的.

除此之外,還有圖形化界面,比如KDE,GNOME,這些都是不同的界面.Linux可以自己選擇安裝你喜歡的界面.

但是上面說的都是面向電腦的界面,這些界面很顯然是不能用於手機了。

所以,當你用Linux作為手機操作系統的時候,你就的製作一個符合手機操作習慣的界面,對於安卓系統,這個界面就是安卓桌面,也就是尼進系統能看到的一切.

你所謂的虛擬機,是指jvm,並不是你電腦上win系統下面裝一個Linux虛擬機的那個虛擬機,jvm根本是兩碼事。

並不是說安卓是用虛擬機跑在Linux系統上的另外一個系統,這純屬不懂技術的人胡說八道.

jvm作用是為程序員編寫的程序提供運行環境的,並不是一個系統.

為什麼要用jvm?這是因為計算機程序要想運行,必須通過編譯器編譯成機器碼。

但是,對於手機程序來說,程序直接編譯的話太麻煩了,因為編譯過程直接喝計算機硬件相關,但是手機硬件千差萬別,這種各樣,程序員就必須給每一個型號的手機開發一個人獨立版本,這個工作量是不可想象的.

如果頭條以編譯方式直接編譯成app,程序員恐怕一次得編譯幾十甚至上百個版本,簡直不是人乾的事情.

這時候就需要jvm,只要把jvm在不同的機器上編譯好,做好適配,然後應用程序都通過jvm來運行,這樣就避免程序員反覆編譯聽一個程序,升級,解決bug也方便多了.

所以,不管任何系統,採用這種方式來管理應用程序才合理,才具有實用性,不用這種方式,就不可能有安卓上成千上萬得app的,程序員絕對不會閒的沒事幹整天編譯各種app玩.一套源碼,多處運行是最基本要求.

當然,除了jvm,還有一種runtime的解決方案,其實本質上runtime也是一個類似jvm的虛擬機,只不過實現的方法不同,效率要比jvm高。

5.0以上的安卓已經支持了android runtime 也就是art.


shawn25


純Linux的手機操作系統,沒有中間虛擬機不是沒有,還挺多的,比如Ubuntu Touch,火狐操作系統,三星Tizen操作系統,還有號稱首款真正的Linux智能手機Librem 5。

這些系統發展的並不好,導致很少進入大眾的視線,讓你覺得好像所有的操作系統都是Android的虛擬機架構。

有些人說為這些沒發展起來的手機是因為界面醜,其實不然,Android早期的版本1.0. 2.0也醜的要命,就是它的引入的Java虛擬機,引來了無數Java開發者加入,快速的構建起了Android的開發生態。逐漸發展成今天你們看到的樣子。

你們都還看過那些純Linux的手機操作系統呢?曬出來。





拉那烈


純Linux而不需要虛擬機的手機系統當然有,火狐的FirefoxOS、Ubuntu Touch、三星Tizen操作系統、以及曾經大名鼎鼎的Megoo都是沒有虛擬機的。

Android使用虛擬機是因為採用了Java作為核心開發語言,Java足夠成熟、生態健全、開發者眾多,這是Android早期發展迅速的主要原因,當然Android的高速發展也給了Java第二春。Oracle公司現在又在作死,各種用Java的問題刁難Google,Google推出Flutter框架、扶持Kotlin,以及打造Fuchsia操作系統,就是為了能夠找到取代Java甚至直接取代Android的解決方案。

值得提一下的是儘管Megoo系統隨著諾基亞的失敗而消失了,不過Megoo系統的很多理念到現在還被iOS和Android系統借鑑,現在智能機的主要手勢操作基本上全是借鑑Megoo操作系統的設計理念。

Android為什麼要用虛擬機

Android誕生之初並不是師出名門,後來被Google收購也算是傍上了大款,Android使用虛擬機的主要原因還是因為Java,因為Java有足夠好的凱源生態,更重要的是Java有成熟的開發者生態,最最重要的當然還是Java是第一大編程語言、背後有最多的開發者。

Android誕生之初,跟Java普遍使用JVM家在字節碼文件(

.class

),Android的虛擬機是Dalvik虛擬機,每次運行程序,Dalvik負責加載dex/odex文件然後解析成機器碼讓Android系統調用。

2010年5月20日,Google正式向外界發佈了版本代號為Froyo凍酸奶的Android2.2版本,這是Android第一個成熟版本,Google在這個版本的虛擬中加入了即時編譯、也就是我們通常所說的Just-In-Time Compiler(JIT)編譯器,Dalvik使用JIT進行編譯,JIT可以對經常使用的dex/odex進行編譯和優化,將其翻譯成精簡的Native Code執行,引入JIT之後Dalvik性能提升了3到6倍。

2013年10月31日,Google正式對外發布代號為Kitkat的Android4.4,Google為了改善Android糟糕的用戶體驗,開發了全新的虛擬機運行環境,也就是Android Runtime(ART),在這個版本中Google還有了新的編譯策略Ahead of time(AOT),不過這時候ART和Dalvik共存,直到2014年10月16日代號為Lollipop棒棒糖的Android5.0版本,ART徹底取代Dalvik,AOT成為了唯一的編譯模式,AOT相對於JIT的優點是,JIT是運行時動態編譯,每次運行程序的時候都要編譯,AOT則是靜態編譯,應用在安裝的時候就已經完成了編譯,程序運行的時候不用重新編譯,這才是真正的本地應用概念。

ART還對垃圾回收機制進行了改革,ART只有一次垃圾回收暫停、而Dalvik有兩次,ART在垃圾回收保持暫停的時候並行處理,ART還優化了垃圾回收的效率,讓系統能夠及時垃圾回收、及時減少後臺內存使用和碎片化問題。

不過在Android7.0之後JIT又重新迴歸了,AOT/JIT混合編譯模式又重新迴歸了,混合編譯當然有優點,不過還是很難解決Android存在的各種問題,畢竟Android的問題一大部分是Java自身的問題,除此之外Android生態本身也比較混亂,這也是Android體驗差的重要原因之一。


EmacserVimer


我理解的樓主意思是,android中間有個java虛擬機,而linux沒有,那麼有沒有手機可以採用linux,讓操作系統或者app直接與硬件之間進行操作,以求效率更高?

樓主理解錯了,linux也有虛擬機的。看圖:

當然從圖中可以看出,兩者都有虛擬機。

當然,從linux架構圖可以看到有個“程序 n”以及“程序2”是直接通過機器碼操作內核的,那麼問題來了,既然可以通過程序直接操作內核,為什麼android要把這一塊裁掉,不直接讓程序操作內核呢?主要有以下幾個方面:

1.程序兼容性,眾所周知java是個跨平臺語言,不依賴cpu指令集,這樣就能保證兼容性。android在歷史的演變過程中,運行在多種平臺上,例如:arm,mips,x86,x64,arm-64等等,這個傳統來自於linux,曾經linux運行的平臺更多,例如:x86,x64,mips,arm,ibm-power,hp,motorala等等。

2.方便移植,作為後來者,android出現的時代,已經有了智能手機或者設備和對應的操作系統,例如:palm os,windows mobile,motorala linux,還有索尼愛立信和nokia主導的symbian os等等,android如果要生存下來必須要讓開發者很方便的將他們為其他系統開發的軟件移植到android上,而java虛擬機是最好的選擇。

3.無奈之選,開發一個新的系統,絕不是吹幾句牛,埋頭苦幹就能行的,那麼只能站在巨人的肩膀之上,但是當時沒有人願意公開自己的系統,windows mobile作為微軟的產品,雖然可以兼容多種不同品牌手機,但是不開源,palm和黑莓以及蘋果是軟硬件全是自家,更不可能開源,motorala雖然採用linux但是軟件封裝卻是自成一派,在這樣情況下,android只能採用開源的linux,所以形成了這樣的架構。




天行健31293242


不能說沒有純手機linux系統,ubuntu touch firefoxOS Tizen等等,ubuntu touch可以自行下載刷機,但支持的機型少。不知道 題主是否知道刷機,曾經安卓刷機成風。什麼 MIUI CyanogenMod(團隊被三星收了)LineageOS 魔趣 樂蛙等等 ,這些第三方安卓系統做到現在留下來的快沒了,這些原生硬改的系統都不能支持所有的安卓手機為何?手機型號廠商太多了,硬件都不一樣,需要重新開發驅動,界面等。比如一個相機,每臺都不一樣,你找sony要驅動不給怎麼辦,就算給了,那cpu端的DSP高通又不給怎麼辦?以前我的三星 glacier刷三方系統,系統流暢,相機渣渣,驅動無法解決,就算解決了,還要開發者寫相機算法。工程很大。再回來說Linux,也一樣這麼多手機硬件要從底層重新構建,不像蘋果一年就出一部手機。軟件寫好了關鍵還賣不到錢,Linux本身就是免費的碼農們自願維護的系統,主要用在服務器上,消費端生態比較差,操作容易程度更差,裝個軟件還要去下各種支持庫,一般人哪裡懂。所以呵呵,沒有個大財團加上幾家大手機廠商去推動是非常難的。想想當年Google首發安卓時的廠商陣容,全球大的手機廠商,軟件商都來了,Google面子大啊,有錢,而且技術積累深厚。自己程序加支持的開源項目程序員都好幾十萬人了。所以沒有顛覆的系統,現在想插一腳很難的。


煮酒論乾坤


Linux只是內核,一個系統基礎而已。所有安卓也是純Linux ,只不過去掉了一些無關緊要的東西。

可以使用busybox還原使用性,chroot也可以讓安卓機運行Linux桌面級系統。重在Linux發展歷程上出現arm這個分支,而且大規模的運用使得ARM版的GNU/Linux擁有交為豐富的程序可以使用。辦公娛樂上網乃至作圖修圖視頻剪輯 文檔處理與編輯等等。




陳盒子精


操作系統是一層一層搭起來的,Linux打樁,Java虛擬機做地基,Android是樓層框架,各種UI是裝修,這才有了你看到的漂亮的樓房。

不知樓主要的純Linux是不是命令行界面的Linux內核。

按照這個要求,裝了第三方應用,沒有編譯進內核的系統都不能算是純的Linux。樓主連打電話撥號都要自己寫代碼才能實現了。


飄162829324


簡單理解下,有java虛擬機存在。app開發適配更容易。不然會像windows和Linux一樣,安裝一個軟件先裝幾十個依賴。


吃小米的魚


啥叫純Linux手機?和安卓啥區別?是說和Linux桌面(Ubuntu, Fedora,...)類似嗎?


TOMLEI


android用的是linux內核,ios用的是類unix內核,理解提問者的疑問應該是是否有用戶可以直接操作內核的手機,答案是不可能,現在商品化的手機必須考慮應用開發和使用環境,所以為了不同手機硬件兼容性考慮,需要封裝底層的接口調用並標準化,而且基於安全考慮必須將每個應用權限控制在很小的範圍,目前的做法都是用類腳本的語言做中間件,手機應用基本上都是基於腳本的開發,效率上比直接操作硬件的c語言會差一些


分享到:


相關文章: