計算機組成原理的重要性

計算機組成原理,你還真不須要理解cpu的每個電路怎麼運行,但當我懂得內存與外存的區別,以及緩衝區這些概念時,代碼的書寫思惟和我入門時真的有很大不一樣。算法

老師建議拆電腦玩(拆壞了不負責噢~) 總的來講,就是加深對電腦的瞭解吧。編程


首先,咱們能夠把計算機分解成最原始的部件——晶體管。晶體管是一種半導體材料,其最重要的做用就是半導:能夠經過電流的變化,實現電路的切換。好比計算機最基礎的與或非運算,均可以經過晶體管組成的電子元件實現。而經過晶體管的電位差不一樣,就能夠體現"二進制數據",即0和1。再加上電容和電阻,就能把這種二進制數據臨時保存起來。
綜合這些特性,大牛們發現把晶體管用做精密的數學計算,能夠極大的提升運算的效率。好比我有2個電容,分別是充滿電和沒有電,對他們同時釋放電信號,電容就會把其中的電子放出來,通過特定的邏輯電路,如與門,獲得了0的結果。要計算1+1,實際上也是相似的原理。我先設計一個加法電路,把若干電容組合成的"數字"流過這個電路,把結果存入目標電容,就獲得告終果。大規模的複雜運算以此類推。
最先期的計算機真的就是用許多結晶體管實現的複雜電路結構,經過控制輸入電流獲得但願的輸出結果。後來人們發現,這種計算能夠用某些形式抽象成多種指令,不用針對每次計算設計複雜的電路,只要調用指令就能夠實現任何一種計算組合,因而誕生了cpu。只有cpu,每次都要本身配置輸入信號,實在太痛苦,就作了紙帶輸入給計算機。後來又發現紙帶仍是很麻煩,因而發明了輸入終端和對應的存儲設備。後來又發現不少數據要臨時保存起來,供連續計算使用,因而發明了內存。再後來pc的發展經歷了無數次的變革,讓計算機一步步到了今天的地步,也就是你如今看到的這樣。
其中的歷程很是曲折,也許有機構可以把他們所有組織成一本漫長的歷史,但我的確定是無能爲力的。
 
組成原理:是否是學過中斷、8259A、保護模式尋址等等?體如今操做系統裏,爲了實現進程調度,你要用時鐘中斷,爲了會用中斷,你要寫8259A的控制程序;爲了實現實模式到保護模式的切換和保護模式編程,你必須理解處理器的段保護機制等
 
過去的廠商作計算機都是從硬件到軟件一整套,你說的這些東西都會涉及到
如今這種軟硬結合的工做大概作嵌入式的會比較多一些
不過造計算機門檻低了,有錢的話你也能夠本身DIY
好比用FPGA,CPLD作CPU,本身畫PCB,作板子,裁剪內核,燒ROM........
本身作板卡,或者本身造一個虛擬設備,寫驅動程序
寫虛擬機,cpu模擬器
 
學這門課程以前,要先忘掉這門課程名字中的「計算機」三個字。每節課,每一個課程階段都會介紹一種電路。從簡單到複雜,從開關到ALU。每一個階段作出來的東西看起來都和「計算機」沒什麼關係,除了他們都能存儲和運算。可是會很清楚的瞭解到每一個階段作出來的東西其實徹底沒有「存儲」和「運算」功能。他們只不過是一種電路的狀態,或者經過一個信號,控制另外一部分電路的狀態。因爲很簡單,很容易弄清楚這個東西是如何工做的。最後把全部東西拼成一塊CPU的時候,就像你趴在地上拼拼圖,拼完最後一塊起身俯視的感受。會了解到高低電平是如何經過各類門電路變成數據,變成屏幕上花花綠綠的程序的。這就是所謂的「原理」。

這門課徹底能夠用一個詞來歸納,就是「抽象」。在我看來這也是整個計算機設計中所蘊含的的靈魂。

其實一個門電路徹底不知道本身在作什麼,不過是按照電氣特性把高電平變成低電平,低電平變成高電平。是人們把這些不一樣的狀態抽象出0和1的概念,而後從中產生了「邏輯門」。並用此來表達邏輯運算,而後用這些邏輯運算去表示二進制的數值運算,再把這些運算組合起來,用一組開關來啓動,就有了一條指令,最終把這些簡單的電路變成了CPU。整個過程不過是一層一層的抽象。上層依賴於下層所提供的功能與意義,完成自己的功能同時又提供了更高層次的抽象。最後你從上挖到下,最底下的一層根本找不到什麼0或1 。包括操做系統和各類協議,絕大部分計算機相關的東西都是這麼一層層抽象出來的。這就是「計算機」「組成」的「原理」。

友情提示,理論課能夠逃,但實驗課絕對不能逃。不知道大家的實驗課作的是什麼,咱們是用VHDL寫程序,而後燒到一個FPGA試驗檯裏面。因爲個人理論課老師每次課程要花至少三分之二的時間給咱們講西遊記的處世哲學,因此我基本沒怎麼上過。但實驗課一次沒逃過,就算因故缺勤也會本身找老師補上。我感受算法也好,理論也好,玩具也好,若是本身不親自拆一遍再裝回去,就沒辦法深入理解它們是怎麼跑起來的。
 


確實是本了不得的神書,目前已經出了第六版了。大牛Andrew S. Tanenbaum使用語言、層次和虛擬機的概念,結構化的對計算機進行描述,使得計算機的功能層次能很是清晰地呈現。另,還記得差很少10年前初讀此書,第一次震撼地讀到「硬件和軟件在邏輯上是等同的」,至今記憶猶新。
沿着Tanenbaum的分層式思想說,組成原理這一層在硬件層(或者說數字邏輯層)之上,向上則承接操做系統層。籠統講,硬件層最重要的貢獻是解決了如何使用半導體器件實現布爾代數邏輯,使得在更高層工做的人不用再考慮如何使用半導體器件實現單個的邏輯門,而是能夠從邏輯門出發組合出更復雜的功能模塊實現更復雜的功能。計算機組成原理層解決的核心問題,就是如何在門電路的基礎上搭建出能夠執行程序實現計算的機器。操做系統層則要解決在這樣一臺「裸機」上實現資源管理、任務管理等關鍵功能,以便供更高層級上的用戶能夠方便使用計算機。
理解這個層次關係以及組成原理層所要解決的核心問題對於貫穿這門課的知識點、理解計算機組成十分關鍵。計算機組成原理介紹的內容主要是以馮氏結構(存儲指令、順序執行)爲基礎,加之指令集,以及cache、流水線等重要的性能優化技術。
從課程的角度看,計算機組成原理的課程知識內容多,知識點比較龐雜,各教材內容組織順序差異大,所以先從大的方向上把握馮氏結構的主幹(計算部件、存儲器、總線的工做原理),進而熟悉其餘各知識點內容以及各知識點間的關聯關係,最後再在複習時從總體上創建一個包括全部知識點及其聯繫的知識架構,我的以爲是一種比較好的學習方法。
課程實驗的重要性,在以前諸位答主的答案中都說得很全面了,最後想推薦另外一本書,Randal E.Bryant 的 深刻理解計算機系統 (豆瓣),該書從編程的角度給了許多基於計算機組成原理優化程序設計的方法和例子,能夠做爲組成原理學習的有益補充參考。

因爲咱們院師資不行,這算是咱們那旮旯拿得出手的幾個課了,內容和其餘院的沒啥區別,就是搭一個簡單的CPU,咱們那兒主要是用Verilog語言,xilinx軟件寫一個閹割的MIPS處理器,固然只是一個五級流水線的(還水水寫了個單週期的沒啥難度)。 我以爲這門課算是一個分水嶺,數字電路和計算機組成,搞軟件的和硬件的得學;再深刻下去,那就是計算機架構了,算是CE專業的重頭戲;再深刻下去,那就是VLSI,半導體這種硬件專業大課,搞CS的就不用看了。搞軟件的要了解計算機的原理,實際上看個計算機組成就能掌握原理了。當時這門兒課學的很感興趣,想往架構方向發展,媽的本身院不開,結果本身看書看paper去其餘院蹭,唉喲媽講的太好了,時間衝突最後一段兒講GPU架構的沒去,始終以爲那門兒課是我本科上(蹭)的最爽的一門專業課。 最後說說上計算機組成的體驗吧,我以爲想學好就靠一個勤字,我當時挺自私的,把組裏全部的活兒都幹了,單刷可爽~等一次次在充滿bug的軟件上調試好而後燒到FPGA板兒上成功跑出test case,多少努力都值了。基本上從迷之異常到能工做,你對這個體系的理解也就透了。最後我靠這個練就的Verilog debug能力混到院裏一個數字電路助教職位,混到一封推薦信,不得不說運氣太好了。
相關文章
相關標籤/搜索