完成作業系統的語言

344 views
Skip to first unread message

sung descent

unread,
Dec 26, 2012, 4:37:15 AM12/26/12
to julu...@googlegroups.com
Dear all,

這篇提到 : http://sunxiunan.com/?p=1661
比如編寫操作系統這種高難問題,只有C++、彙編語言可以做到。

寫 os 真的只有組合語言, c/c++ 可以完成嗎?別的語言無法用來寫 os 嗎?


Ben6

unread,
Dec 26, 2012, 1:14:44 PM12/26/12
to julu...@googlegroups.com
以下是我參考一些文章翻譯及一點自已小心得總和而來。

其實是也不是,對所有語言來說最終會轉換machine code (大部分會產生中間的assembly)。
換個精確一點的問法:「我們可能使用更高階的語言來寫OS嗎?」

答案不是絕對的,因人而異。

排列比較答案後,大部分想使用高階語言來寫OS,是想簡化學習的曲線,避掉一些瑣碎細節,來享受快速開發的好處。

但憑心而論,學習沒有捷徑,天道酬勤;
還是需要大量的作業系統設計的基礎(如網路通信協定、記憶體管理、執行緒、驅動程式等等),
畢竟不會使用舊的方法的問題所在;無法創造新的路出來。

從技術的觀點來看,電腦其實並不知道你使用的是C#,還是JAVA;

首先你第一個要的是一個 bootloader, 
如果略過bootloader 的部分,你可以用任何語言來寫OS,

假設所使用的語言可以編譯出機器語言(而不是byte code,但有人可能反駁說硬體有JVM chip,可能也是成立的,視環境而定)。

另一方面,從效能的觀點,OS常需要精實而高效率的,
這部分高階語言無法為你做的,很有可能你會需要自行開適合的編譯器或其他的子系統來輔助,因為在和硬體溝通的部分若沒有低階語言存取能力,事情可能變得更複雜一些。

就我個人而言,也夢想有一天,自已能用 python 或 nodejs 等語言來寫出OS來。

以上寫了一堆,希望有所幫助。

以下是大略列出(但不限),其他語言可用來寫OS:


* Forth -- http://www.forth.org/svfig/osf.html
ref: http://en.wikipedia.org/wiki/Forth_(programming_language)

* Lisp -- Genera is a commercial operating system
ref: http://en.wikipedia.org/wiki/Genera_(operating_system)

* JAVA: JNode
ref: http://www.jnode.org/
ref: http://www.jopdesign.com/ (Java Optimized Processor)

* C#: Singularity
ref: http://research.microsoft.com/en-us/projects/singularity/

* Ada: MaRTE OS
ref: MaRTE OS: An Ada Kernel for Real-Time Embedded ... - CiteSeerX
ref: http://marte.unican.es/


參考資料:
*stackoverflow - 627095/can a whole operating system be written without using even one line of c c code

*High level Languages and IO Access in Computer Interfacing osdever.net/tutorials/pdf/high_level_io.pdf

* System Programming in a High Level Language - Andrew D Birrell
http://birrell.org/andrew/papers/thesis.pdf

* wikipedia Operating system

* stackoverflow - 3317329/what language is used to write operating systems windows

* quora.com/What programming language are operating systems written in





Jim Huang

unread,
Dec 26, 2012, 3:47:58 PM12/26/12
to julu...@googlegroups.com
在 2012年12月27日上午2:14,Ben6 <ben...@gmail.com> 寫道:
> 其實是也不是,對所有語言來說最終會轉換machine code (大部分會產生中間的assembly)。
> 換個精確一點的問法:「我們可能使用更高階的語言來寫OS嗎?」
>
> 答案不是絕對的,因人而異。
[...]

打從 MULTICS 以來,人們就嘗試用高階語言如 PL/1 這樣高階的程式語言,來開發作業系統,早在 C 語言問世前,
就出現有 Pascal, Lisp 等程式語言開發的系統了。

這不是「可能」或「不可能」的問題,將近半世紀前,這是人們的願望 :)

Regards,
-jserv

Spark

unread,
Dec 26, 2012, 9:38:05 PM12/26/12
to juluosdev
越到後來,我對於「作業系統」這個定義跟範圍越來越感覺模糊了…XD



--
您已訂閱「Google 網上論壇」的「juluOSDev-星系統社群」群組,因此我們特別傳送這封郵件通知您。
請前往以下網址造訪這個群組:http://groups.google.com/group/juluosdev?hl=zh-TW



RSChiang

unread,
Dec 27, 2012, 7:31:32 AM12/27/12
to julu...@googlegroups.com
Singularity 已經沉寂很久了,也不完全是 C# 寫的(其實是基於微軟研究院基於C#開發的Spec#的Sing#)
沒有發展成一個社群實在是很可惜的事XD

Ben6於 2012年12月27日星期四UTC+8上午2時14分44秒寫道:

sung descent

unread,
Jun 10, 2013, 4:02:18 AM6/10/13
to julu...@googlegroups.com
感謝 Ben, Jserv 的回應。

看到這個解除我一些疑惑, 這是 haskell 寫的 os
http://programatica.cs.pdx.edu/House

需要一個 compiler 產生 native code,  而透過 foreign function interface (FFI);
就可以處理 Low-level Operations.
裡頭一樣有 c, 組合語言。

若不使用 c, 組合語言, 應該就辦不到了 (其實我的重點就是在這裡)。

ref:



Reply all
Reply to author
Forward
0 new messages