作者jb0802 (吳先生)
看板C_and_CPP
標題[問題] 如何撰寫一個作業系統
時間Sat Jan 30 02:21:55 2010
其實想問的問題有點多~~也有點雜~~比較不像是要問程式問題~~而是有點像是
作業系統或是計算機組織與結構的觀念~~所以起這個標題有點怪怪的~~
不過或許這個標題比較適合我以下想問的問題
常聽過人家講C語言很強大~~也可以拿來撰寫作業系統~~但是不知道要怎麼辦到
一般在書本上學到的~~就是透過C所提供的library~~達到我們一般常見的目的~~
或許算算數學式子~~或是可以寫網路程式建立一個Socket~~~library都有提供函式
可是我想到的是比較底層的問題~~它是如何與硬體做到溝通的~~
以下是我的認知與理解(有錯請版上大大指正)
我們在擁有一個作業系統(平台)後~~在此平台放入一個程式編譯器~~
所有叫用到的library牽涉到硬體的 ~~ 例如:getMACAddress() <--隨便打個比方
就可以讓我們輕鬆的得到硬體資訊或操縱這些硬體等功能~~~這個library能夠做到
也是因為該作業系統(平台)~~有提供這樣的API~~作業系統的核心(kernel)~~
掌管了所有可用的資源~~並且開了窗口~~讓程式設計師可以撰寫程式~~運用資源
當我下printf()或scanf()~~作業系統發起系統呼叫(system call)~~
讓我可以將鍵盤打的字讀入~~或是將一些字印在螢幕上~~ 我的問題是
當我現在連作業系統都沒有~~而我就是要撰寫一個作業系統時~~
我要如何access到硬體~~例如取得網卡的MAC address~~或是在螢幕上的某一個pixel秀出
特定的顏色~~如此我們才可以做出漂亮的視窗作業系統~~
這些操作是否要以組合語言撰寫~~而且硬體與硬體之間是否有一個固定的spec
硬體商提供的driver到底定義了哪些東西~~這些東西是否有個全球標準
在從無到有的過程中~~C要怎麼將所有的東西兜起來~~製造出一個作業系統~~
讓螢幕可以顯示~~滑鼠可以移動~~喇叭可以出聲音~~而且還可以讓更上層的
程式設計師使用你所提供的API~~再寫出一些應用程式
抱歉~~好像問的有點紊亂~~先感謝解答的版友 thx in advance
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.219.120
推 flashliqu:一切都是先從 bootloader 控制權拿到開始 01/30 02:32
推 flashliqu:driver 其實就是 Memory Map IO trigger HW. 01/30 02:35
→ flashliqu:簡單的說 OS 就是 bootload 之後跳到的 entry function 01/30 02:37
推 COLDTURNIP:在 LinuxDev 板上推的兩本 kernel 入門書也就差不多在 01/30 02:48
→ COLDTURNIP:解釋你的疑問。 01/30 02:48
推 Cloud:會寫程式嗎?自己動手寫就知道了.... 01/30 09:13
推 QQ29:我覺得你問的也是我想問的 我怎麼可以呼叫一些api就可畫圖 01/30 09:55
→ QQ29:好厲害喔 01/30 09:55
推 twotwoone:這些都有書,真有興趣花點小朋友跟時間去買來看就好了 01/30 09:56
推 suhorng:之前看過一本 "自己動手寫作業系統" (操作系統) 01/30 10:14
→ suhorng:我是覺得那本主要以實做來帶領還不錯,不過可能有些地方 01/30 10:14
→ suhorng:寫得不是很好XD 01/30 10:15
推 Dannvix:回樓上,那可以看看「打造個人作業系統」 01/30 13:51
推 alongalone:你問的這些問題,是否有相對應的背景去理解你找到的答案 01/30 14:11
推 final01:砍掉重練? 01/30 14:41
推 loveme00835:好像很好玩~ 01/30 15:54
→ kazuto:有些東西可以參考貝殼書,其實也有說到相關的東西 01/30 16:30
推 x000032001:~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ 01/30 18:56
→ mimi0213:上面那個是我自己玩的東西,你看完應該大概知道怎麼寫一 01/30 21:00
→ mimi0213:個os 01/30 21:01
推 vizshala:作業系統其實要和硬體溝通了 非相關背景應該很難入門 01/30 22:23