精華區beta Programming 關於我們 聯絡資訊
※ 引述《[email protected] (大王此乃房宮模型)》之銘言: > ※ 引述《[email protected] (汀)》之銘言: > > 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裡? 這句話先還給你,你當其他人都不知道 multi-thread 也出現在 OS 裡? 不管怎樣這句話是照你的想法還的,接著我來說我自己的想法。 首先我並沒有叫別人不看 OS 看 Java, 我保留了相當大的選擇性空間給發問者, 我也沒說去看 OS 就會掉入萬劫不復的深淵或是去看 OS 就不再回他了。 別人比較建議去看 OS 有別人的理由, 我叫他去看 Java 我的理由。 我是覺得你把這裡當成研究所考試專板在回這些文章, 我建議你稍微注意一下這個板的板名以及會進來問的人的類型。 OS 是資工和資管還有應數等等少數科系會開的學科, 更何況某些科系還是開成選修, 這可不像 programming 一樣普及, 所以不能像可以叫一些不懂程式設計技巧的人去看 data structure 一般, 隨隨便便就叫一個人跑去看 OS 課本。 以照顧所有人以及符合看板本身意義的立場來講, 我請一個我不知道他學術和專業背景的人去看 Java thread 並沒有不對。 雖然我本身屬於反 Java 挺 C++ 的派系, 但是基於 C++ 語言本身不想支援 thread 並且基於原發問者的內容如下: 「 在本版有看過這個詞,原本以為c++的書找的到,但是我翻蜜蜂書卻找不到, 請問在什麼教科書找的到,是OS嗎 還是 Archi. Thanks BTW,能不能也稍微解釋一下是什麼意思. 」 他本身的思考方向既然就是以 language 出發點為前提, 以資工背景的教科書為後續尋找的方向, 我給他的建議理所當然 priority 是 language > csie text book。 > 應該反問你的是,有關multithread這個term相關的資料,是出現在 > OS教科書多,還是Java程式設計手冊裡多?是OS的相關資料對thread > 說明比較詳盡,還是Java的說明比較詳盡?OS的課本甚至還會提到 > Java的thread機制,故意叫人家去找資料比較少的來源,你這是什麼 > 心態?我真的很懷疑。 比較少的資料來源? 不是我說你,讀學校的教科書之餘, 偶爾去逛逛書店對增廣見聞一定會很有幫助的, 請參考 http://www.oreilly.com.tw/sleepless/part05.htm, 其實你光看章節編排自己就心裡有數。 他既然先找 C++ 的書找不到才找課本, 我可以合理的判斷他是希望讀來在程式設計上有幫助, 而不是去讀課本上面的理論, 課本上其實講得天花亂墜, 很多實作的書可以三言兩語把重要的觀念帶過。 以恐龍本第六版為例好了,你期望一個沒讀過那本書的人, 翻開第五章,讀完這一章以後, 會比我剛剛那本讀完第一章還懂多少? 固然他可以看到各種 thread model, 但我不覺得那些東西是一個在這個板上發問的人想要的東西。 何況我也沒有說讀 OS 教科書不好, 只是我覺得那裡面的東西不像是他要的。 > > 為什麼一個人不能只懂 programming language 中的一個分支, > > 而不用去懂 OS 的課本寫些什麼東西? > > 當這個人不用去懂 OS 課本寫什麼東西但是知道什麼是 thread 的時候, > > 他對 thread 的認識跟 OS 絕對是無關的。 > 很簡單,因為問的人並沒有告訴你「我不用去懂 OS 課本寫什麼東西」, > 這不是他問的,這是你的預設立場,如果你對每個問問題的都用這樣的 > 立場來回答,問你問題的人大概自己去找google還比較有幫助。至少 > google找"multi-thread"時,並不會叫人家先找Java。 所以我一直懷疑你閱讀的方法不太對勁, 如果今天他說他想找資工的教科書找不到, 然後才去找 C++ 又找不到所以來問, 我的回答方式當然又不一樣。 > > 第一本讓我知道 thread 的書叫 unix network programming, > > 還是網路方面的書籍,當時我連什麼叫恐龍本都不知道, > > 不好意思當時我還在讀高中(應該說高職), > > 民國 88 年我高二,那年寒假讀的。 > > 我不是在跟你說我有多厲害,因為有人比我更早讀, > > 我是要跟你說當時我還認為 multi-thread 是 programming design 領域的東西, > > 請問你認為當時我的認知有錯嗎? > 我該反問你的是:你現在知道你自己的認知有錯嗎?所謂的錯,指的是 > 「不知道multi-thread在其他領域也有,而且份量比在programming中 > 更重」這件事。更應該反問你的是:你覺得你應該讓另外一個不知道 > multithread的人重蹈你的覆轍嗎? 我不認為我的認知到現在為止有任何的問題。 打從我剛接觸 thread 的時候, 我就認定那是一種 programming design 的方法和技巧, 我甚至不認為這是一個錯誤的思路, 只能說是和那些透過基礎學科才認識 thread 的人有不同的面向, 我對 csie 的知識有很多跟程式設計相關的部分都是由實作起家, 之後才學正式的理論和閱讀相關的教科書,瞭解更精確的名詞和定義。 我不覺得這有什麼覆轍可言,更不用說要別人來重蹈它, 我現在仍然深信這種認知並沒有什麼錯誤, 國內的教育方式大都習慣用例子培養感覺再奠定基礎知識, 我提 Java 請發問者從實作面切入並沒有什麼不對。 > > 你知不知道資工學生讀 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」的人口比例。 原來我提 Java 是針對「使用 Java multi-thread」的人口? 這就奇怪了, 我單純是因為 Java 有 Threading API 而且語言本身有提供同步設施, 所以特地提 Java 來幫助別人透過 Java thread 來建立觀念, 什麼 language 比較適合就挑哪種 language 來說。 而且你要記得我上面有說我是反 Java 的, 我提 Java 絕對不是因為我對 Java 有所偏好, 而是真的認為透過它瞭解 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?你是自己拿計算機概論來侮辱你自己所學的東西。 雖然我覺得你拿 system software 的書, 跟在 system software lab 做研究的人來爭很有趣, 但是我還是會好好回答你, 不要說我都搬一些怪東西來當擋箭牌, 好掩飾我的什麼什麼。 附帶一提,這年頭還有人手上留著系統程式的書, 真的蠻難得的,不錯不錯,很多學校系統程式甚至還停開了。 我相信你還記得我先前所下的論點是什麼, 我的論點是 thread 可以跟 OS 有關也可以無關, 之後又跟你扯到 user thread library 是否「必然是」OS 的一部份, 幫你恢復記憶完了,請翻到 Sec. 6.1 最後兩段, 這是該書引出你所提的 Sec. 6.1.3 的部分。 我相信你看到 Sec. 6.1 最末段第一行應該就會發現到了, 根據這樣的說法,我說: 「user thread library 可以是 OS 所提供的 run-time environment, 也可以不是 OS 所提供的 run-time environment」 你能說我錯嗎? 但是如果你看了之後還是堅持「必然是」, 我覺得你應該在回我之前拿那一頁去跟你的系統程式老師討論一下, 免得你被一些修過系統程式手上又有課本的人修理。 接著請問你知不知道「軟體」的定義是什麼? 誰管那個是不是獨立於 OS 還是什麼 stand-alone executable, 我真的很好奇被你這樣定義下去, 一定要能獨立於 OS 運作的才算, 那有什麼才可以不算是 OS 的一部份? 我今天高興好了,用 open()、read()、write()、close() 這四個 system call, 來寫個複製檔案的 function,用 gcc 編譯好,再做成 .a 或 .so, 於是乎它就變成你所謂的 OS 的一部份了? 還是你要我動手寫一寫然後發出去問大家這是不是 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的一部分? 不好意思, 我從以前到現在在 UNIX 上一旦呼叫 manual section 2 中所列出的 function, 都會發生 software interrupt, 而 unix 傳統上 section 2 放的內容都叫 system call, section 3 放的叫 library function, 雖然我承認我沒有照著 OS 教科書所說的來講, 但是我實在想不到還有別的招數, 可以把控制權從 user process 交到 monitor 或 OS 手上執行特權指令, 因為我也沒看過 MS Windows 的東西,所以如果有例外請指教, 好讓我能夠增廣見聞,我對學習新知是很有興趣的, 我相信你看過我以前的發文就會知道我這個人認錯相當爽快不會硬拗, 而且還會感謝對方的指教, 但是如果我認為我沒有錯我就會據理力爭。 > > 雖然這邊也要請你 goto 第一段回文, > > 但是我還是補充一下,免得你看不懂。 > > 一旦我自己寫 library,那麼實作的部分 maybe 跟 OS 領域有關, > > 而我寫出來開始給別人使用以後,使用這個 library 跟 OS 領域 maybe 是無關的, > > 就算「這個 OS 的實作」認得裡面的 thread,它也跟「OS 領域無關」, > > 那你會問到底什麼時候有關? > > 當這個使用者想知道這是 user thread 還是 kernel thread 的時候才有關。 > > 所以我回答「可以有關也可以無關」絕對是沒有問題的。 > 你要硬抝絕對是沒有問題的,人家問multithread,你可以硬抝成 > Java thread,不管那邊的資料比較多,也不用管課本怎麼定義, > 只要你自由心證,有關無關都可以,只有你認定的有關才是有關。 > 所以就隨你吧。 請你說明為什麼不能藉由 Java thread 來瞭解 multi-thread, 這叫什麼硬拗? 人家書名都叫 Java Threads 了, 第一章還不是叫做 Introduction to Threading。 -- Name: Tseng, Ling-hua E-mail Address: [email protected] School: National Chung Cheng University Department: Computer Science and Information Engineering Researching: GNU Toolchain Porting for Unified RISC/DSP Processor with VLIW Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.16 > ╰─╮ ╚╦═╦╝ From:218-171-140-222.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 -- * Modify: tinlans 05/02/02 23:56:36 <218-171-140-222.dynamic.hinet.net>