回覆列表
  • 1 # 依然菜刀

    你所說的遮蔽,就是上層做封裝,但是封裝以後帶來的就是效能問題,比如安卓,如果你的程式碼全部用java寫,那麼所有支援安卓的的裝置都可以統一的執行,但是效能就無法保證了,所以才有了jni層,需要做不同系統架構的適配

  • 2 # 冥想虛空

    因為手機CPU,微控制器CPU效能弱,硬體抽象層(HAL)非常消耗效能(和電量)。 windows和linux 都有HAL,其實安卓也有,所以安卓機要靠硬體優勢才能維持和iphone類似的效能

  • 3 # RaymondIT

    為什麼有這樣的問題?像Linux就是可以執行在不同CPU架構上的作業系統,Windows也支援過ARM,但是因為軟體相容性問題,支援不夠。核心問題不是作業系統本身,而是程式本身是否是跨平臺的。

    如果是編譯的軟體生成二進位制機器碼,那麼就不能在不同CPU上執行。所以C/C++編譯的程式不能跨平臺、跨CPU。

    而執行虛擬機器的Java程式,它生成的不是機器碼,而是虛擬機器指令,可以在各種平臺的虛擬機器裡執行。由虛擬機器來遮蔽底層OS和CPU等的差異。所以,Java在伺服器平臺得到廣泛應用。安卓系統也是基於Java虛擬機器技術的一套手機作業系統,遮蔽了底層的手機硬體差別,使得安卓程式可以運行於各種手機CPU上,以前Intel也推出x86的安卓手機。

    為什麼手機需要用安卓系統而不是直接用Java或者Linux?因為Java和Linux不是專門針對手機操作的,導致手機應用的開發、維護、支援方面的不足,例如介面、動畫、圖形、操作、通知、wifi、藍芽、陀螺儀、GPS等等。實際上之前機車羅拉等開發過一些Linux的手機作業系統,但是應用太少。不少手機上也支援Java虛擬機器,我們在上面開始執行一些小遊戲。但是它們與提供統一解決方案的安卓系統相比相差太大,動畫、介面、操作看起來就像紅白機時代一樣。

    所以,安卓系統可以看成是遮蔽了底層實現的作業系統,當然是基於虛擬機器技術和跨平臺編譯的Linux。

    但是虛擬機器存在一個執行效率的問題,應用軟體先轉化成與平臺無關的中間指令,然後虛擬機器再將中間指令轉化成實際指令。谷歌引入了二次編譯技術,在安裝軟體時,進一步編譯轉化成機器程式碼,可以提高執行效率。但是,這樣也破壞了移植性,因為轉換之後的二進位制就不能再在其他手機上運行了。華為針對自己的手機和CPU也做了方舟編譯器的最佳化處理,可以提高執行效率。

    跨平臺技術與執行效率是兩個不可調和的矛盾。從Java和.Net技術開始,就一直在研究和發展。安卓系統是一個在手機上得到廣泛使用的系統。谷歌正在開發的Fuchsia作業系統,就是要進一步取代“安卓+Linux”的架構,成為真正的單一系統,進一步提高在手機等裝置上的執行效率。

  • 4 # 一隻呆毛獸

    你猜這些arm和x86為什麼不合作呢,為什麼要各搞各的授權呢?要收錢啊買了我x86授權的你就得一直用下去。公司的不可替代性就是要形成自己的行業壁壘,讓別人除了你之外沒有別的選擇

  • 5 # 因特理臻

    Linux支援arm,x86,mips,他們執行介面是一樣的,有命令列終端,也有桌面,桌面有幾種,都可以安裝一種,實際上就有統一的執行環境,你用的軟體比如openoffice你不知道用什麼cpu,結果都一樣。當然了,你可能說linux和windows不一樣,APP也不能編譯一次到處使用,需要重新編譯,那是因為linux和windows不相容。其實就算是linux在不同的cpu也要重新編譯,因為要生成機器碼才能執行。當然還有一種辦法是編譯執行,用虛擬機器,java就是這樣,或者用virtualbox虛擬機器,這樣就可以統一起來,但是虛擬機器會慢一些。

  • 6 # 拐八鉤洞

    說Java的都不對,Java做的是跨作業系統,Windows上能跑,Linux上也能跑,這是更進一步了。題主問的是同一作業系統,不同晶片架構。

    遮蔽底層,其實作業系統本來就一直在幹這活,並非所有的程式在x86的Windows上能跑,在ARM的Windows上就不能跑。沒有調底層API的程式不用修改,就是直接可以在x86和ARM的Windows都可以執行。

  • 7 # cresky

    誰說不可以?

    虛擬機器,就行。

    但是,就效率差。

    所以,應用與系統一一對應。

  • 8 # 幽默的無雙青山EC

    純商業問題,和技術沒有關係,那些說效能差的,就沒有搞清楚如果真的在上層形成了統一,自然而然下層的硬體啥的會調整自身來適應上層,提高效能的,要不然就會被淘汰

  • 9 # 我能舔乾淨酸奶瓶蓋

    我不明白你說的遮蔽底層架構是什麼意思,不過從“為應用軟體提供統一執行環境”這方面來說,每個作業系統其實都是這麼想的。譬如ios系統,支援所有的蘋果系統應用軟體執行,windows支援基於windows開發的所有執行程式一樣。至於為什麼會有各種各樣諸如arm等底層執行框架,這個得從具體的計算機原理說起。

    我們知道,計算機能接受的語言唯有機器語言,如果我們需要計算機執行一個命令,如:print 可是計算機並不認識這個命令。他需要經過規則的轉化,轉變為機器語言,然後計算機才會去執行。因為對於機器來說,只有兩個訊號可以識別,那就是通或不通,即二進位制裡的1和0。

    細心的朋友會發現,不管是Linux,ios,亦或是arm或windows,其實除了介面,執行環境及實現方法不同以外,其實執行原理和功用其實是沒有區別的。只不過如arm和Linux基於執行環境,對基礎感測器的控制性能上來說要好很多,其優勢在於容量需求不高。注意,這裡說的是arm和Linux的“小”的優勢,並不是說windows或幹不了這個活。這也是為什麼我們說,存在即合理的一個原因。不同的作業系統,基於其側重點不同的原因,會有很大的差別。但其實目的都只有一個,就是透過執行環境,向機器發指令。

    當代多元化程式語言,有的是基於機器語言開發的,有的是基於組合語言,有的是基於C,越接近底層,語言難度是呈正比的。

    我原來給人舉例,老闆發現公司門口有一坨大便,於是他有幾種方式處理?太多了對吧,

    方式一:找保潔阿姨處理掉;(等同於機器語言)但有可能阿姨沒什麼文化,老闆需要掌握跟保潔阿姨溝通的方法。

    方式二:找保潔管理員安排處理掉;(等同於組合語言)但保潔管理員對於老闆來說也不是很容易溝通。

    方式三:找物業公司處理;(等同於C)

    方式四:找經理處理;(等同於js)

    方式五:叫秘書去處理;(等同於python等)

    諸如此類,還有很多種程式語言,或高階如go,或專業如R。用途和用法不同,決定了他們所需的執行環境也不同。我舉這個例子的目的在於告訴大家,程式語言的發展,是在實際應用的引導下向前推進的。無論是軟體或硬體,都是為了為人們提供方便,乃至於越方便越好。

    最後點下標題:

    題主說的“遮蔽底層架構”我確實沒懂是啥意思,不過從“為軟體提供統一執行環境”來說,是可以實現但除了添麻煩還沒什麼用的。難道說我為了要給廁所燈發個on/off指令,還得專門裝個windows系統才行嗎?又或者,我想玩個英雄聯盟,問題是arm微弱的元件也不支援我酷炫的R閃吧?

  • 10 # 徐三刀gg

    確實比較麻煩

    我們是做系統監測軟體的,產品是wgcloud運維監控系統,可能有朋友瞭解過或使用過,因為有使用者在使用arm這些系統,我們也一直做這方面的相容。

  • 11 # 笑八仙

    Linux就是幹這個事情的底層作業系統,他可以透過選擇不同核心重新編譯,從而得以執行在ARM/X86或者MIPS硬體架構的計算平臺上

  • 12 # 新墨者

    所有最底層都是0和1,如有一個公司想做出這樣的中間層大一統,它必須給如x86等廠商支付大量的專利費,同時還要考慮自己怎麼盈利,你覺得?

  • 13 # 跑步游泳看星星

    你的想法很好,不是不可能,只是沒人去做吧。

    最合理的結構是,作業系統對硬體的差異遮蔽,應用生態環境對作業系統的差異遮蔽。

    作業系統這塊理念相對成熟,應用生態這塊差距較大。JAVA為此而生,不夠完美。正是這種差距,反而可以是我們突破的機會。

  • 中秋節和大豐收的關聯?
  • 目前央企工作9年,感覺升職的希望不大了,是不是應該跳槽了?