玉兔號的 SPACEos 操作系統,系統架構是怎麼設計的?

SPACEos和Linux和Windows的架構關係是什麼樣的?兼容Windows和Linux軟體軟體是否有可能么?怎麼實現的?

相關問題:

同時兼容Windows和Linux應用軟體是否可能?


問題被修改了,請跳過第一部分直接看後面的補充。

這造謠造的有點不要臉了吧,要不就是記者不懂在那亂說?

航天五院的人敢不敢站出來說SpaceOS沒抄一行VxWorks的代碼?不管是GPP/MSP還是653或者Cert或者551,敢說一點沒抄?三個字:不要臉。

傳說SpaceOS第一版只有8000行代碼,這點貨就想兼容Windows和Linux?POSIX兼容都不止這麼多代碼。

完整兼容Windows需要支持所有Windows API,ReactOS多少行?都不敢說完全兼容Windows。Linux內核又有多少行?

一個完整的OS至少要有個調度器,有硬體管理,有內存管理,還得有一個基本的BSP,可以不要文件系統,可以不要libC,甚至可以不要時鐘,但誰敢說這樣的系統兼容Windows和Linux?難道兼容的意思是只支持malloc和free嗎?就這倆函數實現出來也得幾百行呢!

聽說SpaceOS是在天宮一號上運行過,天宮一號上用的SPARC,主頻也就10-20MHz的水平,這硬體能跑Windows?恩,也許能,Windows3.2也許可以,但可惜不支持SPARC這個指令集。

吹牛的、不懂技術就亂說的記者退散吧,搞出這玩意一點都不值得驕傲,不要讓人看笑話就好了。

最後,請自行百度/google ReactOS和Linux內核,知道這些玩意做的多大了再來說兼容的問題。

-------------------問題被修改了,那麼我繼續補充-------------------

SpaceOS跟Windows或者Linux沒有太大關係。航天器用的系統是最重要的指標是實時性,而Windows和Linux都不是實時操作系統(RTOS)。

實時操作系統重要的指標包括:對中斷響應速度(一般要求是ns級),Windows和Linux關中斷的時間都太長了(都達到ms級的水平),不適合航天器使用。

實時操作系統調度策略都是搶佔式的,Windows和Linux都不是搶佔式的系統(補充:Windows是不完全搶佔式系統,有防飢餓機制,Linux在2.4之前不是,2.6以後據說已經是搶佔式的)。

跟SpaceOS同類的系統大多數人平時很難接觸到,比如ucos,nucleus,threadX,以及VxWorks,這些系統一般用在工控的領域比較多。

另外,航天器的CPU一般都很弱,也不是intel或者amd的,甚至也不是arm的,見過最多的是SPARC,然後還有PPC/MIPS的,這是因為太空中有輻射,要抗干擾。主頻一般是10MHz到幾百MHz之間,超過100MHz的都和NB,天宮一號好像是20MHz的水平。

內存和外存基本上都是KB-MB之間的,NASA能弄到上GB,已經很厲害了。天宮一號外存是256K-ROM,這個配置想跑Windows是不可能的,Linux應該也不行吧,我沒試過Linux能不能裁到這麼小。但前面我說的那幾個不知名的系統都可以做到。

我說SpaceOS有極大的可能是抄VxWorks的,這是很可能的,畢竟VxWorks是最成熟的,航天器上用的最多的系統(另外,從殲十,到東風系列導彈,基本上也是VxWorks的天下),不要以為中國人寫操作系統的能力很強,其實很弱,這是事實。

要不然,有誰是航天五院的人站出來,咱們可以拿源碼對比一下差異度。

所以SpaceOS跟Windows和Linux沒什麼關係,應用場景不同,沒辦法對比。

-----------------再說兼容Windows和Linux的問題-----------------

首先,看什麼級別的兼容:

1、代碼-應用級,就是說代碼拿到兩邊都可以正常編譯,生成可執行文件並正常執行;

2、二進位-應用級,就是說一個二進位包(Java的那種不算),不管Windows或者Linux都可以執行,不需要任何改動。

3、腳本-應用級,就像Java這種,還有perl腳本什麼的,這種很簡單,不討論。

4、代碼-驅動/內核級,就是驅動可以跨平台編譯並正常執行。

5、二進位-驅動/內核級,就是驅動的二進位包可以直接正常使用。

6、虛擬化技術的兼容。

一條一條的說:

第一類:比較容易,用宏隔離或者使用POSIX兼容的代碼就可以,不少開源軟體都是這麼做的,困難程度一般。

第二類:非常困難,我見過有人討論過,主要問題是Windows的可執行文件結構是PE結構,而Linux是ELF結構,兩者差異太大,但是似乎有大牛實現過(記憶不是很清楚),困難程度非常高。多數人也不會這麼做。

第三類:非常容易,沒有討論價值,大多數跨平台軟體都是這麼實現的。

第四類:有一定困難,因為Windows內核驅動和Linux內核驅動的API差異非常大,運行模式、內存模型、中斷處理……都不一樣,很少見到有人做這些都兼容的代碼,一般開發都是分別開發兩個驅動。

第五類:非常困難,這不僅僅是要克服PE結構和ELF結構的差異,還要克服兩個系統的內核API差異,幾乎可以說是做不到的。

第六類:常見的有hyperviser這種技術,但實際上是兩個不同的系統,從道理上談不上兼容,只是兩個系統運行在一個平台上,類似虛擬機技術,同時這種技術會有硬體資源的損耗。

以上是六種方式的分析,跨平台兼容比較容易,但代價一般都是規模比較大,在航天器的低硬體配置下,基本沒人會搞跨平台,因為緊張的硬體資源根本不夠跑那麼複雜的東西,再說架構都不同啊。

以上說的跨平台都指在同一個硬體架構下,一般都是x86架構,想要跨硬體架構的還是不要想了,代碼級、腳本級有可能,二進位沒有可能。

最後再次強調一下,航天器用SPARC/MIPS/PPC的CPU比較多,基本沒見過用x86平台的(也就是intel和AMD)

------------------繼續說OS兼容性------------------

有人說了用Linux+wine,其實Windows+cygwin也勉強算,ReactOS也算兼容WINNT內核,但應該歸屬於獨立的OS,另外,眾多的虛擬機算不算?還有硬體虛擬化?我覺得可以算,也可以不算。

Windows里也有子系統的概念,理論上說,在應用層設計一個完全兼容Linux的子系統是有可能的,無非是工作量的問題,但是不管是Linux on Windows 還是Windows on Linux,效率是一個問題,畢竟API都是虛擬化的,不是系統原生介面,效率比原生介面差。

更多的軟體是使用JVM這種非硬體編碼來實現跨平台。

最後,強調一點,RTOS里跑Windows或者Linux的軟體意義不太大,並且航天器的配置太低了,根本跑不動虛擬機(或者虛擬化)軟體。


風河羞愧的面紅耳赤,爹就這樣被拍死在沙灘上了


利:讓外行看著很爽。

弊:造謠的人節操都掉光了。

小道消息:其實由於使用了土星共同體的高端科技,spaceOS還能部分支持iOS和安卓app。科研團隊正在為運行XBOX One遊戲而努力攻關中。原本對PS4的支持由於近期和日本的外交摩擦而被叫停。

----

問題改拉。。原問題是spaceOS能運行windows和linux的軟體,這樣設計的利弊是什麼。

以下是修改後的答案,我以民科的身份回答,非正宗專業人士。

spaceOS查不到什麼公開的信息,沒辦法評價架構的區別。如@時國懷所說,很可能是個RTOS,這和Windows/Linux完全不是一類操作系統。通俗來說就是RTOS需要的是在一個確定的時間範圍內必須對信號給予相應。否則會發生探月器遇到個坑,但是因為後台在下a片拖慢了相應速度沒有及時調整體位,於是探月器被坑了。

spaceOS這樣的環境下想要兼容linux和windows,唯一的可能是有些代碼希望重用,不希望自己重新寫。我猜測這樣的系統,至少也會有一套某語言的編譯環境(很可能是C),因為直接寫彙編是很費力不討好的開發方式。這種情況下,假設希望重用的是個庫,比如視頻圖像壓縮庫,用來拍照之類的軟體可能會用到視頻壓縮解壓。最經濟的選擇不是讓這個庫的二進位代碼直接copy到spaceOS就能用,而是選擇把源代碼重新以spaceOS為目標平台編譯一遍。另外的可能是實現某些語言的運行環境(比如JVM或者動態語言的虛擬機)。這樣這些語言對應的軟體有可能可以直接運行(但稍稍複雜的也很難直接拿來就跑)。

這些情況下,spaceOS即便能運行上述軟體,也不能說和spaceOS能兼容運行windows/linux軟體。因為windows/linux本身也都能做到上面說的事情,但是我們從來不會說他們能互相兼容。而且這種案例在spaceOS的環境下也適用與很少的一部分軟體,因為跨平台本身就是一個很不穩定的因素,探月器需要的穩定程度不可能允許引入多少不穩定。頂多是一些經典的與硬體和系統功能無關的演算法庫被重用。如果你想要跑迅雷(哪怕是迅雷迷你)?那sorry了。

再說一個可執行文件拷貝來直接能運行的情況,這是很難的。舉例來說,linux上有一套wine系統,能運行windows程序。但是wine背後重新實現了大多數windows的核心庫,並重新在linux上實現了一套windows的程序載入機制,比如程序的頭部格式不同需要特殊處理,linux沒有windows的dll,需要特殊處理,註冊表在linux上沒有需要模擬(也許還實現了COM相關的基礎架構,畢竟COM在windows上無處不在)。這裡的工作量無法統計,而且很多軟體無法正確運行,畢竟wine不是windows。且不說是否在RTOS上能否做相同的事情,對於spaceOS的情況這種工作毫無意義,畢竟我們不會在spaceOS上跑QQ和迅雷,花這些時間不如多測試系統的穩定性保證探月器不掉坑裡。

兼容其他平台的程序最大的動機是重用代碼而不需要軟體開發商重新開發一套對應操作系統的版本。以spaceOS的情況,探月器並沒有多少通用的需要重用的程序(一切都是為探月工作特別制定開發的),花功夫去搞兼容,意義可以忽略不計。


這問題是小米的發燒友提的?


瞎摻和一下,估計就是拿某個redhat發行版上面裝了個wine……


瞬間想到的是Linux+Crossover。

你們知道出一個高大上的操作系統多麼難得嗎?操作系統,晶元,專利技術,國家安全相關!!!


操作系統肯定是rtos,不會去兼容什麼windows, 抄沒抄

vxworks不確定,rtos 本身並不難寫,有些甚至連虛擬地址空間都不支持,windows和linux才複雜,我相信中科院那些搞龍芯的寫一個出來並不難。現在國產的rtos也很多,當然多少都有開源rtos的影子。另外聽說vxworks並不是最強的,美國國防部用的greenhill rtos才最牛逼


這個問題不是釣魚貼嗎?和國家機密有關的東西有人說錯了也不能說嗎,大家忍住,不能說!這是紀律!。。。 雖然我也很好奇

當然啦,我是操作系統構架小白,開始還意淫過用安卓操作系統,找個報廢的手機,連個太陽能板和蓄電池,然後核心新片用錫箔紙好好包一下。。。


覺得很扯!


RTOS是肯定的.估計是類似vxWorks之類的,搞不好是抄一遍把函數名改得高大上.至於windows和linux,實時性不過關,估計不能

這種宇宙級的控制設備實時性要求多高啊...

工業控制領域的操作系統很多哦,別老把眼光放在win和linux上

這題主肯定沒弄過工控

贊同@時國懷 觀點


利益相關。玉兔號上的Space OS只是個嵌入式的操作系統,並不能兼容Linux和Windows系統。你能在網上查到的Space OS其實另外一款操作系統,只是名字相同而已,它是基於Linux定製而來的,並沒有公開發行,至於兼容Windows軟體運用到的的技術也類似於Wine和CrossOver(這貨本身就是Wine)這類軟體。


.


vxworks笑了


記者SB


推薦閱讀:

為什麼梁海先生不推薦在 Windows 上使用 MacType?
重視版權的知乎用戶有多少用正版 Windows 的?
關於windows下的路由表項的解釋?
如何在windows下打開 pages?
有哪些有趣的事情Mac可以輕易做到而Windows相對複雜和困難?

TAG:MicrosoftWindows | 操作系統 | Linux |