精華區beta Programming 關於我們 聯絡資訊
※ 引述《tinlans.bbs@whshs.cs.nccu.edu.tw (汀)》之銘言: > ※ 引述《Vishnu.bbs@bbs.cs.nthu.edu.tw (大王此乃房宮模型)》之銘言: > > 請你明確的定義:一段程式碼合乎哪些條件才叫做「屬於OS的一部分」。 > > 如果你承認POSIX pthread library是OS的一部分,那請你解釋為什麼 > > 其他人自己寫出來的user thread library「不能」成為OS的一部分? > > 違反了哪些定義? > OS 這個領域並沒有明確指出 thread 是屬於 OS 的領域, > OS 的教科書也沒有規範一個 OS 必須要提供 thread, > OS 的教科書更沒有說只要是跟 thread 有關的東西就必然是 OS 的一部份。 > 為什麼你認為別人想知道什麼是 multi-thread 不能翻 Java? > 為什麼我不能說 OS 的實例太少,而且你還認為是廢話? > 既然你都說 Java 「不只是」一個 OS, > anyway 我先不爭論 Java 是 platform 還是 OS, > 但是 Java 「語言本身」就支援 multi-thread, > 所以理所當然的去讀「Java 語言」的書就有辦法知道。 > 所以你大概還不知道 multi-thread 也是 programming language 裡的 term, > 你不要因為只有讀過 OS,你就認為 thread 一定要跟 OS 有關, > 你不要因為你只有讀過一本 programming language, > 你就認定 programming language 裡面沒有其它分支領域在探討 thread。 嘿!花了這麼長的篇幅,只為了要辯解為什麼當別人問multithread是 什麼的時候,別人建議看OS,只有你要叫他捨OS不看去看Java? 你當其他人都不知道multithread也出現在programming language裡? 應該反問你的是,有關multithread這個term相關的資料,是出現在 OS教科書多,還是Java程式設計手冊裡多?是OS的相關資料對thread 說明比較詳盡,還是Java的說明比較詳盡?OS的課本甚至還會提到 Java的thread機制,故意叫人家去找資料比較少的來源,你這是什麼 心態?我真的很懷疑。 > 為什麼一個人不能只懂 programming language 中的一個分支, > 而不用去懂 OS 的課本寫些什麼東西? > 當這個人不用去懂 OS 課本寫什麼東西但是知道什麼是 thread 的時候, > 他對 thread 的認識跟 OS 絕對是無關的。 很簡單,因為問的人並沒有告訴你「我不用去懂 OS 課本寫什麼東西」, 這不是他問的,這是你的預設立場,如果你對每個問問題的都用這樣的 立場來回答,問你問題的人大概自己去找google還比較有幫助。至少 google找"multi-thread"時,並不會叫人家先找Java。 > 第一本讓我知道 thread 的書叫 unix network programming, > 還是網路方面的書籍,當時我連什麼叫恐龍本都不知道, > 不好意思當時我還在讀高中(應該說高職), > 民國 88 年我高二,那年寒假讀的。 > 我不是在跟你說我有多厲害,因為有人比我更早讀, > 我是要跟你說當時我還認為 multi-thread 是 programming design 領域的東西, > 請問你認為當時我的認知有錯嗎? 我該反問你的是:你現在知道你自己的認知有錯嗎?所謂的錯,指的是 「不知道multi-thread在其他領域也有,而且份量比在programming中 更重」這件事。更應該反問你的是:你覺得你應該讓另外一個不知道 multithread的人重蹈你的覆轍嗎? > 你知不知道資工學生讀 OS 的目的是幹什麼? > 其中一個主要目的就是讓你瞭解 OS 是怎樣設計的, > OS 提 multi-thread 主要也是想告訴你有這種東西, > OS 可以實作它,當實作它的時候會碰到什麼問題, > 像是整個 process 收到一個 signal 的時候要哪條 thread 來處理, > 當整個 process 呼叫 fork() 的時候要不要複製每條 thread。 > 當一個人以不知道是不是 user view 的角度問這是什麼的時候, > 為什麼我不能叫他往 user view 的角度去看 multi-thread? > 以「實作 multi-thread」和「使用 multi-thread」的人口比例來說, > 為什麼我不能就 user view 做回答,叫他去看 Java? > 更何況實作 multi-thread 跟 OS 領域也不見得有關係。 很簡單,因為「實作 multi-thread」和「使用 multi-thread」 並不是互斥集合,而這兩個集合的聯集,也並不等同於「想知道 什麼是multi-thread」的集合,更不要說你的回答其實只適合 「使用 Java multi-thread」的人口比例而不是「使用 multi- thread」的人口比例。 > 我深深覺得你不是 OS 沒有讀好,也不是閱讀方法不對, > 而是你讀了 OS 忘了計算機概論, > 我不是刻意要拿計算機概論來侮辱你這麼多年所學的東西, > 只是覺得你忘記計算機概論跟你說什麼。 > 我來幫你複習一下,電腦軟體分為系統軟體和應用軟體, > 系統軟體包含作業系統、組譯器、編譯器、連結器、載入器和巨集處理器「等」, > 又由於計算機概論對系統軟體的解釋是:協助開發應用程式的工具軟體。 > 因為那個「等」字,理所當然任何 libraries 均為系統軟體的一部份。 > 你現在應該想起來「系統軟體包含 OS」這件事了吧? > 用 tree 狀來表示的話 pthread library 充其量只是 OS 的 sibling, > 你憑什麼把它變成 OS 的 child? > 因為 OS 痛扁了 pthread 一頓,所以要 pthread 叫他爸爸? 「因為」任何 libraries 均為系統軟體的一部份,所以 pthread library 充其量只是 OS 的 sibling?我才要問 你憑什麼? 告訴你我憑什麼,憑Beck貝殼書的Sec. 6.1.3,pthread library 充其量是rum-time environment的一部分,Beck把run-time environment 歸類為作業系統的功能之一,看了一眼system software的「等」 字就自動把pthread library升級變成可以獨立於OS運作的東西? 請不要打自己的嘴巴,一組以OS的system call來實作,而且還不 是stand-alone executable的服務函式,你是憑什麼把它變成OS的 sibling?你是自己拿計算機概論來侮辱你自己所學的東西。 > 這個第一段回文就回給你了,因為想說拖到這裡才回你太慢, > 你有很多地方腦袋打結了。 這句話還給你,請看第一段回文看看是誰的腦筋打結。 > > 你怎麼知道某些API不是利用其他API製作的? > > 我以為這種普通常識你不可能不知道,所以我把重點擺在 > > 沒public這點上面,原來你不知道很多API其實只是另外 > > 一些API的包裝,就跟你「利用 API 製作的 library」是 > > 一樣的,這些「2nd level API」算不算OS的一部分?你要 > > 不要回答這問題看看? > 是因為你愛用 API 我才跟著你用 API 這個字, > 原本我講的可是 system call, > system call 是 API 的 subset, > 呼叫 system call 會引發 software interrupt, > 呼叫 API 則未必,跟 system call 等價的字應該是 kernel API, > 請記得 API 的 A 字是什麼東西,不要罵昏頭了。 > 根據這樣解釋,我必須先請你回答你的 2nd level API 是不是 system call, > 我才有辦法告訴你它是不是 OS 的一部份。 問題是:你有辦法嗎?誰告訴你只有會引發soft interrupt的 system call才是OS的一部分? > > 我要告訴你的就是「自己寫的」並不是重點所在 > 雖然這邊也要請你 goto 第一段回文, > 但是我還是補充一下,免得你看不懂。 > 一旦我自己寫 library,那麼實作的部分 maybe 跟 OS 領域有關, > 而我寫出來開始給別人使用以後,使用這個 library 跟 OS 領域 maybe 是無關的, > 就算「這個 OS 的實作」認得裡面的 thread,它也跟「OS 領域無關」, > 那你會問到底什麼時候有關? > 當這個使用者想知道這是 user thread 還是 kernel thread 的時候才有關。 > 所以我回答「可以有關也可以無關」絕對是沒有問題的。 你要硬抝絕對是沒有問題的,人家問multithread,你可以硬抝成 Java thread,不管那邊的資料比較多,也不用管課本怎麼定義, 只要你自由心證,有關無關都可以,只有你認定的有關才是有關。 所以就隨你吧。 -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 203-203-38-134.cable.dynamic.giga.net.tw