計算機科學速成課1(p1-p6)

P1 計算機早期歷史-Early Computing

  最先的計算設備--算盤,手動計算器,存儲着當前的計算狀態。dom

 

P2 電子計算機-Electronic Computing

  最先的機電計算器之一,哈佛Mark 1號,這臺機器的大腦是繼電器。繼電器裏,有個控制線路,控制電路是開仍是關,控制線路連着一個線圈,當電流經過線圈的時候,線圈產生電磁場,吸引金屬臂,從而閉合電路。electron

  可是繼電器的機械臂有質量,所以沒法快速的開關。除了速度慢以外,還會形成磨損,增長故障率。編碼

   因此,想要進一步提升計算能力,須要更快更可靠的東西來代替繼電器,即真空管。以下圖,向控制電極施加正電荷,會容許電子流動,施加負電荷,會阻止電子的移動。因此經過控制電路,能夠打開或關閉電路,和繼電器的功能同樣,但磨損更少,每秒能夠開閉數千次。spa

  這標誌着計算機從機電轉向電子。(electro-mechanical computing to electronic computing)操作系統

        

   爲了下降成本和大小,同時提升可靠性和速度,須要一種新的電子開關——晶體管。晶體管遠遠小於繼電器和真空管,每秒能切換上百萬次,而且能工做幾十年。.net

     

  從繼電器---真空管--晶體管,讓電路開閉的愈來愈快。3d

P3 布爾邏輯 和 邏輯門-Boolean Logic & Logic Gates

  計算機採用二進制,多進制帶來的問題是,狀態越多,越難區分信號。code

 

 

 

   只用開和關兩種狀態,能夠減小這類問題。視頻

 

   另外一個使用二進制的緣由是,有一整個數學分支,專門處理「真」和「假」,已經解決了全部法則和運算,即「布爾代數」。布爾代數中,變量的值不是數字,而是true和false,能進行邏輯操做。布爾代數中有三個基本操做,NOT、AND、OR,用晶體管能夠實現。blog

  晶體管有三根線,2根電極和1根控制線,控制線通電時,電流就能夠從一個電極流向另外一個電極。將控制線當輸入,底部電極用於輸出,因此一個晶體管有一個輸入和一個輸出

      

  這樣的話,打開輸入,輸出也會打開(輸入爲true,輸出爲true),關閉輸入,輸出也會關閉(輸入爲false,輸出爲false),對應的真值表:

  

  實現NOT GATE:將輸出放在上面那個電極,打開輸入,電流流過接地,那麼輸出沒有電流,即輸入true,輸出false。

  當輸入是off,電流無法接地,就流過了輸出,輸出是on。

  對應的NOT真值表

  實現ADD GATE:將兩個晶體管鏈接在一塊兒,A和B都打開了,纔會有輸出。

  對應的ADD真值表:

  實現OR GATE:將兩個晶體管並聯起來,以下。

  對應的OR真值表:

   NOT門,AND門,OR門均可以用晶體管表示。抽象表示以下,能夠用來構建更大的組件。

    

P4 二進制-Representing Numbers and Letters with Binary

 

  計算機如何存儲和表示數字?

  數字:位來表示(1和0 即true和false),1bytes = 8bits(0~255),32位計算機或64位計算機意味着是一塊塊處理數據,每塊是32位或64位

  字母:給字母編碼,用數字來表示 ASCII--Unicode

  因此,短信,YouTube視頻,互聯網上的網頁,操做系統,只不過是一長串的1和0。

 

P5. 算術邏輯單元-How Computers Calculate-the ALU

 

 

   表示和存儲數字是計算機的重要功能,但真正的目標是計算和有意義的處理數字。好比兩個數字相加。這些操做由計算機中的「算術邏輯單元」(ALU)處理。ALU是計算機中負責運算的組件。

 

    ALU有兩個單元,算數單元和邏輯單元

  算數單元:負責計算機裏的全部數字操做,如半加器和全加器組成的加法器(由一大堆邏輯門巧妙的鏈接在一塊兒)

 

   但想要處理超過1+1的運算,就須要全加器了。

 

  有了半加器和全加器,利用他們來相加兩個8位的數字。

 

   這樣也能夠獲得16或32位加法器,可是須要更多的邏輯門,而這種方式每次進位都須要一點時間,而現在的計算器量級是每秒幾十億次運算,因此會形成影響。現代計算機用的加法電路有點不一樣,「超前進位加法器」。

 

  邏輯單元:執行邏輯操做,ADD--OR--NOT等操做。

   計算出以後若是扔掉了就沒什麼意義了,得找個辦法存起來,這就用到了計算機內存了

 

P6. 寄存器 & 內存-Registers and RAM

 

ADD-OR鎖存器實現存儲1位的信息

   

完善一下,將兩個輸入改爲一個輸入,添加一個容許寫入線,獲得門鎖

  

  抽象一下,把門鎖放到一個盒子裏,這個盒子可以存儲一個bit

  

  容許輸入線輸入1,打開門,數據輸入1,1就能夠保存在門鎖中,數據輸出是1,此時關閉容許寫入線,不管數據輸入是1仍是0,門鎖中保存的都是1,輸出也永遠都是1。

   若是並排放8個鎖存器,那就能夠存8位信息,好比一個8bit的數據,一組這樣的鎖存器就叫作寄存器。

  

  寫入寄存器以前,要先啓用裏面全部的鎖存器。用一根線鏈接全部的「容許輸入線」,將之設置爲1,容許寫入

   

  

  

  若是這樣並排放置,以64位寄存器爲例,須要64根數據線,64根連到輸出端,一根線啓用全部的鎖存器,加起來須要64+64+1 = 129根線。就要存256位就須要256+256+1 = 513條線,這樣線太多,解決方法就是矩陣。

  在矩陣中,不是並列排放鎖存器,而是作成網格

  

  

  啓用某個鎖存器,就打開相應的行線和列線就好

  

  咱們只想打開交叉處鎖存器的容許寫入線,全部其餘的鎖存器保持關閉。看下圖,只有行線和列線均爲1,ADD門纔會輸出1,用一根容許寫入線連全部的鎖存器,因此爲了讓該鎖存器容許寫入,行線和列線以及容許寫入線都必須是1,每次只有一個鎖存器會這樣,這樣就能夠只用一個數據線來鏈接全部的鎖存器來傳輸數據,由於只有一個鎖存器會啓用,只有那個會存數據,其餘鎖存器會忽略數據線上的值,由於沒有容許寫入。一樣能夠用相似的技巧,作容許讀取線來讀數據,從一個指定的鎖存器中讀取數據。

  因此對於256位的存儲,只須要1條數據線傳輸數據,1條容許寫入線,1條容許讀取線,還有16條行線+16條列線用於選擇鎖存器,即須要1+1+1+16+16 = 35條線。相比於並排排列的513條線,節省許多。

  

  接下來就須要某種方法來惟一指定交叉點的地址,好比剛剛存了一位的地址是「12行8列」,因爲最多隻有16行(16列),因此能夠用4bit來表示行數(列數),這樣行地址(12)就能夠表示成1100,列地址(8)表示成1000,即12行8列的地址就能夠表示成11001000。計算機將地址轉化成對應的行列時須要用到多路複雜器。

   將256位內存抽象成一個總體,以下圖,其中:

    輸入一個8位的地址,4位表明列,4位表明行

    容許寫入線和容許讀取線

    一條數據線,用於讀/寫數據

  

  256位的內存也無法作成什麼事,因此還要擴大規模。將之並排放置,像寄存器同樣,一行8個,這樣每一個存一位,一行8個就能夠存一個8位的數字,也就是能夠存一個字節。爲了存一個8位的數字,同時給這8個256位內存同樣的地址,每一個地址存一位,這就意味着總共能夠存儲256個字節。

  

  抽象一下,將之當作一個總體的可尋址內存,有256個地址,每一個地址能讀或寫一個8位值

  

  這樣不斷的把內存打包到更大的規模,就能夠擴展到上兆字節(MB)和千兆字節(GB)的現代計算機,隨着內存地址的增多,內存地址也必須增加,8位最多能夠表明256個內存地址,更多字節的存儲就須要32位的地址。

  內存的一個重要的特性是:能夠隨時訪問任何位置,所以稱之爲「隨機存取存儲器」(Random Access Memory或RAM)

   看一下下圖的內存,上面焊了8個內存模塊

  

  打開一個,而後放大,會看到32個內存方塊

  

  放大其中一個方塊,看到有4個小塊

  

  再放大,就能夠看到存儲「位」的矩陣,這個矩陣是128位 * 64位,總共8192位,一層層疊加,8192 * 4 * 32 * 8 = 800萬位,也就是1兆字節(1 MB)。

  

  矩陣層層嵌套,來存儲大量的信息。就像計算機中的不少事情,底層都很簡單,讓人難以理解的是,一層層精妙的抽象。

相關文章
相關標籤/搜索