精華區beta Programming 關於我們 聯絡資訊
※ 引述《[email protected] (汀)》之銘言: > ※ 引述《[email protected] (大王此乃房宮模型)》之銘言: > > 你覺得Java byte code在JVM裡面執行,JVM算不算是個OS? > > (對,JVM「不只是」個OS,我問的是:對你的Java application > > 來說,JVM有沒有涵蓋OS的功能?) > > 同樣的,user thread library等於是把原本OS的process控制相 > > 關的API「包裝」起來,給其他需要的Application呼叫使用,你 > > 覺得這不叫OS的一部分? > > FreeBSD的linux emulator是不是OS的一部份?當然是。 > 以 FreeBSD 的 pthread 來說, > 請 cd /usr/src/lib/libpthread/thread 然後 grep __sys_ *.[ch], > 然後你會發現什麼呢, > 發現把 __sys_ 去掉留下後面的字串就是 system call name, > 接著你就會發現到你好像也能丟 1 到 2 週什麼事都不做, > 就專門來設計一個有基本功能的新 user thread library 並不困難, > 事實上靠那些 POSIX 制訂的 system calls 任何人都能寫一套 user thread library, > 雖然我們不能排除 POSIX 制訂這些 system calls 是為了實現 pthread, > 我對歷史並沒有太大的興趣... > 不過事實就是 pthread 的確是使用這些 system calls 而出現的一個產物。 所以呢?你這個發現可以證明pthread library不是OS的一部分? 需不需要我告訴你POSIX的全名是什麼? > 接著就是解答你似是而非的說法... > 你說「user thread library等於是把原本OS的process控制相關的API包裝起來」, > 這句話並沒有問題,但是「包裝起來給其它需要的 application 使用」這件事, > 並不可能成立「它是 OS 的一部份這件事」, > 邏輯上的三段論法來說你試圖使用的是 A -> B -> C 的三段論法, > 你的 A -> B 的確是成立的,但你的 B -> C 並不成立, > 所以你並不能夠讓 A -> C 成立。 > 你的 B -> C 描述的是: > 「for all (包裝 OS process API 的 libraries) 必為 OS 的一部份」, > 事實上這個 for all 無法成立,但若是 for some 可以成立。 你這種說法才叫做似是而非,首先,每本OS課本都開宗明義告訴你, OS這組程式目的是作為使用者與硬體的介面,以及應用程式與硬體 的介面,以及運算資源的管理,user thread library既不是單一的 application program,目的又是作為application的介面,請問它哪 一點不能稱為是OS的一部分? > 我當然知道你想要澄清 OS != kernel 這件事實, > 也想要澄清 OS 的東西是可以在 user space 下執行的, > 你那一章讀得不錯,這沒問題... 拜託,這個叫做常識,修過OS課程的本來就不應該犯這種 基本錯誤。 還有,你先前用user thread library當例子回答別人「thread 在什麼情況下跟OS無關」,在邏輯上,你的回答直接等同於「 for all」user thread library跟OS無關。 > 今天要是我利用這些 system calls 實作了自己的 user thread library, > 然後自己用在自己所屬的研究機關或公司行號內部開發程式使用, > 你會認為我寫的 user thread library 也是 OS 的一部份嗎? > 我的 user thread scheduler 固然呼叫了許多 system calls 來實現所需的功能, > 但是會有人認為我這個 library 是 OS 的一部份嗎? Windows裡面有很多Undocumented API,也是給內部用的,換個版本 說不定這些API還會有增減,你覺得它們是不是OS的一部分? > 我不知道你懂不懂我要說的意思, > 不是在探討 OS 課本怎樣寫... > OS 課本的確是說 OS 包含了這些東西, > 但是並不代表這些東西一定要是 OS 的一部份, > 好比 windows 的 explorer 是一種 command interpreter(或叫 shell), > 在 OS 課本上說那也是 OS 的一部份, > 很久之前就有人不喜歡那個 explorer 寫了自己的 shell 丟給大家玩, > 你能說那是 OS 的一部份嗎? 為什麼不是?command.com是DOS這個OS的shell,你換成4DOS就不是OS的 shell?車胎是車子的一部分,誰告訴你車胎跟車子不同牌子就不是一部分? 再強調一次,一組程式碼是不是OS的一部分,是根據這組程式碼的功能, 不是根據程式碼有沒有public到市面被大家知道。 -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 203-203-38-134.cable.dynamic.giga.net.tw