精華區beta Programming 關於我們 聯絡資訊
> ==>發信人: abcdefghi.bbs@ptt.cc (), 信區: programming > ※ 引述《gsj.bbs@bbs.nchu.edu.tw (國王的新衣)》之銘言: > : ※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言: > : > Fairchild 高階語言硬體機器之後的電腦, 在指令方面就是多了複雜資 > : > 料結構的硬體支援, 最明顯的就是 push/pop stack , call/return , > : > 比較不明顯的就是 I/O Channel(或 IOP) 變成 DMA 的 FIFO Block > : > Move 與後來的浮點計算 FPU , 記憶體管理的 MMU ..... > : 你講得都很對,唯一的缺點就是:太複雜了 > : 好比我們在描述一部車的角色,不是以功能角色的觀點來描述它 > : 而是把所有的零件一一拆解,一樣一樣的解釋給你聽 > : 我不能說你錯,但對一個只想開著車去買東西的人來說 > : 太辛苦了而且不實用,更何況我還希望留點心思來留意路上的警察 > : 對於一個軔體工程師來,其實他可以用另外一種更簡明的模型來看待電腦 > : 這個三元素模型我以前已經提過很多次了, > : 市面上也已有不少書用這個架構介紹電腦 > : 這也是為何我認為還在提五大架構的書是爛書的原因 > ---------------------------- > 作者 gsj.bbs@bbs.nchu.edu.tw (國王的新衣), 看板 Programming > 標題 清算劣質的電腦書的方法之一 > 時間 天樞資訊網 (Tue Apr 12 21:22:53 2005) > 轉信 ptt!ctu-reader!ctu-peer!news.nctu!news.nchu!pivot > ─────────────────────────────────────── > 清算劣質的電腦書的方法之一 > 一點困惑 > 這是有關計算機組織的問題 > 在各位心目中, > 電腦系統到底應該分成幾大部門? > 三大部門、四大部門、還是五大部門? > 在我還是學生的時候, > 大一修計算機概論 > 書上都是這麼寫的: > 電腦的架構基本上是由控制單元、 > 算術邏輯單元、 > 記憶體單元、 > 輸入單元、 > 輸出單元等五大元件所組成。 > (算術邏輯單元 + 控制單元 = CPU) > 隨著年紀越來越長, > 接觸電腦越來越深, > 我慢慢發覺, > 這種說法與我實際所接觸的電腦系統根本就不一樣, > 完全是兩回事。 > 我的感覺是, > 不管是以角色分化的觀點, > 還是實際硬體結構來看, > 都應該是分為CPU、 > 記憶體單元、 > 輸入輸出單元三大單元, > 或者是加上匯流排單元成為四大單元。 > 五大單元的說法怎麼看都不對, > 但卻有不少的計算機概論書籍都是這樣寫的 > 後來我終於找到答案了: > 五大單元的概念源自於 > 西元1952年Von Neumann 的IAS 電腦 > (The Von Neumann Machine), > 范氏當時提出了程式儲存觀念(Stored-program concept), > 改良ENIAC的程式必須靠人工設定電路的缺點, > 而那時范氏的IAS 電腦架構, > 就類似於它們說的五大單元。 > 我想這些書的說法應該是從這邊來的 > 但是到了西元1965年, > DEC公司開發了 PDP-8 系統, > 它的架構變得就不是這樣了, > 而是類似於目今電腦所用的三大單元架構: > CPU、 > 記憶體單元、 > 輸入輸出單元。 > 一直到後來的x86、RISC、單晶片等等也都是三大單元的架構, > 而五大單元的IAS 電腦架構, > 從那時候開始就已經沒人用了。 > (至今已經40年沒人用了) > 可是我們看看這些電腦書, > 還有一堆還在講那些, > 早就被淘汰、 > 與現狀不相符的五大單元架構, > 還在那邊誤導大眾。 > 出版商是不是太混了點, > 編一本書只會東抄西抄, > 都不會消化一下, > 難怪現在的學生搞不清楚, > 這些出版商是不是很沒良心, > 這種出版生態是不是很荒謬? > 參考文獻:(詳情可自行找該書參考) > 計算機組織與結構 林獻堂 譯 > 高立出版社 > 還有一些爛書我就不提書名了 ============================================= 舊貼一出, 是比較能體會為甚麼這個版有很多人對 gsj 會有成見. CPU , Central Processing Unit , 這是 IBM 主機的用語, 將 Memory, Control Unit , ALU & Register 及 consol 放在同一個 機櫃內, 稱為 CPU . 其他的 Input Output Unit 則是由 I/O Channel 透過連接線將 Card Reader, Printer, Disk Driver 接 進來, 那個時代的 DMA(就是 I/O channel)稱為 Cycle Stealing, 顧名思義就是做 Channel Operation(就是 DMA)時, 將 CPU 的 Clock Cycle 暫停一個借給 Channel 來使用, 使之直接 access memory. 使用各別的連接線或 selection switch 選擇通路是這類主機 的主要設計, 這跟 on-demand shared bus 的設計當然是不同. 不 過要到 Intel 的微電腦系統才會有 Multibus 與 Distributed Arbiter 的設計, 一般的迷你電腦仍然是用 centralized arbiter 控制排線(bus)的輪流使用. 五大單元與三大單元其實並無不同, 使用 BUS 輪換著用或用 單元與單元間一堆專用連接線互接著, 再經由控制單元來控制相互 連線與資料在 ALU&R , Memory, Input, Output 單元間移動, 用 那種方式(集中或分散控制, 專線或共用排線)在組語的指令上並無 不同. 這種是否用 BUS 的區別只有設計電腦硬體的工程師才會有 興趣, 事實上是這部份影響不到軟體工程師或使用者. 跟軟體有關的是新指令, 尤其是支援高階資料結構的指令, 像 老式 IBM 主機就沒有 PUSH/POP STACK , 她使用 Branch & Store IAR (註: Instruction Address Register , 也就是通稱的 Program counter 或現稱的 Instruction Pointer Register.)將應該 return 的 address 存放到 Branch Entry addrees. 這使得傳送參數與call /return 的方式跟有 Stack Operation 的 X86 Processor 完全不同. 更高階化的 HP-3000 Mini-Computer 則是 Flying Accumulater 的 Stack Machine , 她的 Stack Register 可以整排在 Memory 上, 就是專門用 stack 支援直接四則運算的. 這類硬體架構就會影響組語 與編譯器的程式碼最佳化, 也就是三者互相影響, 所以軟體需要能善 加利用, 這跟有個 FPU 或 ASIC unit 的應用支援是類似的. 同樣的 例子就是處理 row-majoring array 跟 MMU 對 paging memory 的資 料放置與取用次序是有關的, 這是 programmer 需得知曉的. 在十倍速時代, 對老故事不耐煩究竟算是正常還是馬步基礎不穩 可能是很難區分. 不過, 整個問題可能就出在 "為何要替 INTEL 或 MicroSoft 產品做講解與推廣 ? " , 為何這兩個大公司不送學校相 關的資料手冊與設計文件 ? 何苦替人做嫁衣 ? -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234