> ==>發信人: 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