計算機科學基礎_1 - 二進制,寄存器,內存

計算機如何存儲和表示數字: 二進制。測試

二進制

  • 存儲單位 MB, GB, TB等。
  • 正數,負數,整數,浮點數的表示。
  • 美國信息交換標準代碼 - ASCII,用來表示字符。
  • UNICODE 1992年誕生,是字符編碼標準,解決ASCII不夠表達全部語言的問題。

二進制中,一個10 叫 一(a bit).
8位能表示的最小數字是0, 8位都是0;最大數是255,8位都是1.
能表示256個不一樣的值,2的8次方.編碼

8位是如此常見,以致於有專門的名字:字節.spa

1 字節 = 8 位(1 bytes = 8 bits)操作系統

MB(Mege是百萬字節), GB(Giga是十億字節), TB(8萬億個1和0)等,不一樣前綴表明不一樣數量級。設計

1千字節 = 2的10次方 = 1024字節
1000也是千字節(KB)的正確單位,也就是10001024都是正確單位。code

32位/64位計算機: 是一塊塊處理數據,每塊是32位或64位。視頻

32位能表示的最大數是:43億左右。(32個1)。遊戲

如今圖片都是用32位顏色圖片

正數,負數,整數,浮點數的表示

負數,大部分計算機用第一位表示正負:1是負,0是正。用剩下的31位來表示數字。能表示的數字範圍是:正 20億 到 負 20億ip

64位能表示最大數是正負9.2 * 10 ^ 18

計算機必須給內存中每個位置,作一個「標記」,這個標記叫「位址(ADDRESSES)」,目的是爲了方便存取數據。

clipboard.png

非整數,常見浮點數。有不少種表示,最多見的是 IEEE 754標準。它用相似科學記數法的方法,來存取十進制值。例如: 625.9 = 0.6259 * 10 ^ 3, .6259叫「有效位數」, 3是「指數」。

在32位浮點數中,第1位表示數字的正負,接下里8位存指數,剩下32位存有效位數。

clipboard.png

ASCII

與其用特殊方式來表示字母,計算機能夠用數字表示字母,最直接的方法是給字母編號。

設計於1963年,ASCII是7位代碼,足夠存儲128個不一樣值。能夠表示大寫字母,小寫字母,數字0-9,特殊符號以及標點符號。

Unicode

解決ASCII不夠表達全部語言的問題。

最多見的Unicode是16位,有超過一百萬個位置。

  • 對全部語言的每一個字符都夠了
  • 100多種字母表加起來佔了12萬個位置,還有位置放數學符號,甚至Emoji,就像ASCII用二進制來表示字母同樣。
  • 其它格式,好比MP3或GIF,用二進制編碼聲音/顏色,表示照片,電影,音樂。

這些標準歸根究竟是一長串位

短信,視頻,互聯網上的每一個網頁,甚至操做系統,只不過是一長串1和0。

算術邏輯單元

  • ALU,英特爾74181
  • ALU有2個單元,1個算術單元和1個邏輯單元
  • 算術單元: 半加器(處理1個bit,2個輸入)。 全加器(處理1個bit,3個輸入)。8 bit 加法(1個半加器,7個全加器)
  • 邏輯單元:檢測數字是否爲0的電路(一堆OR門最後加一個NOT門),ALU抽象成V符號,Flag標誌(是否相等,是否小於,是否溢出等等)

表示和存儲數字是計算機的重要功能,但真正的目標是計算,有意義的處理數字。

處理數字的操做由計算機的「算術邏輯單元(ARITHMETIC & LOGIC UNIT)」處理,稱之爲: ALU

  • 是計算機的數學大腦
  • 計算機裏負責運算的組件,基本其它全部部件都用到了ALU

英特爾74181:

clipboard.png

第一個封裝在單個芯片內的完整ALU。
布爾邏輯,作一個簡單的ALU電路功能和 74181差很少。

ALU單元

ALU有2個單元,1個算術單元和1個邏輯單元。

算術單元:
負責計算機裏全部的數字操做,好比加減法,好比某個數字+1(增量運算)。
計算根本「把兩個數字相加」,能夠用單個晶體管一個個拼,把這個電路作出來,但很快就會複雜到難以理解。因此會使用更高層的抽象,用邏輯門來作。

最簡單的加法電路,是拿2個bit加在一塊兒(bit是0或1),有2個輸入:A和B,1個輸出:就是兩個數字的和。須要注意的是:A,B,輸出,這3個都是單個Bit(0或1),輸入只有四種可能。

0 + 0 = 0
1 + 0 = 1
0 + 1 = 1

二進制裏,1與true相同,0與false相同。
這組輸入和輸出,和XOR門的邏輯徹底同樣。

1 + 1 = 10

使用XOR門不夠表示,須要一根額外的線表明「進位」。只有輸入是1和1時,進位纔是「true」,由於算出來的結果用1個bit存不下,能夠和AND門一齊使用,構成半加器

clipboard.png


clipboard.png

半加器/全加器

clipboard.png

兩個輸入 A 和 B都是1位,兩個輸出 「總和」與「進位」。

若是想處理超過1 + 1的運算,須要「全加器」。

101
101
----
1010

意味着,算下一列的時候,還有以後的每一列,得加3位在一塊兒,並非2個。

clipboard.png

半加器:輸出了進位。

clipboard.png

有3個輸入:A,B,C(都是1個bit)
因此,最大的多是:1 + 1 + 1

「總和」1,「進位」1,因此要二條輸出線: 「總和」和「進位」。

能夠用 半加器 作 全加器:
先用半加器將 A 和 B 相加,而後把C輸入到第二個半加器,最後用一個OR門檢查進位是否是true。

clipboard.png

能夠再提高一層抽象,把全加器做爲獨立的組件。全加器會把A,B,C三個輸入加起來,輸出「總和」和「進位」。

獨立組件:

clipboard.png

使用獨立組件,能夠相加兩個8位數字。

clipboard.png

若是第9爲有進位,表明着2個數字的和太大了,超過了8位,叫作「溢出」。
通常來講「溢出」的意思是,兩個數字的和太大了,超過了用來表示的位數,這會致使錯誤和不可預期的結果。
著名的例子是:吃豆人,用8位存當前關卡數。若是玩到了第256關,ALU會溢出,形成一連串錯誤和亂碼,使得該關卡沒法進行。

避免溢出,能夠加更多的全加器,能夠操做16或32位數字。讓溢出更難發生,但代價是更多邏輯門,另一個缺點 ,每次進位都要一點時間。現在的量級是每秒幾十億次運算,因此會形成影響。因此,現代計算器用的加法電路有點不一樣,叫「超前進位加法器」。它更快,作的事情是同樣的:把二進制數相加。

ALU的算術單元,也能作一些其它數學運算,通常支持這8個操做:

  1. ADD 加法
  2. ADD WITH CARRY 帶進位的加法
  3. SUBTRACT 減法
  4. NEGATE
  5. INCREMENT 增量(+1)
  6. DECREMENT 減量(-1)
  7. SUBTRACT WIH BORROW 帶借位的減法
  8. PASS TUROUGU 數字無改變經過

就像加法器同樣,這些操做也是由邏輯門構成。

沒什麼魔法,只是更多邏輯門。

邏輯單元(LOGIC UNIT)

邏輯單元執行邏輯操做,AND, OR, NOT操做。
也能作簡單的數值測試。好比一個數字是否是負數。

檢查ALU輸出是否爲0的電路:
使用一堆OR門檢查其中一位是否爲1,哪怕只有一個Bit(位)是1,就知道那個數字確定不是0,而後用一個NOT門取反。因此只有輸入的數字是0,輸出才爲1。

clipboard.png

clipboard.png

只是一大堆邏輯門巧妙的鏈接在一塊兒。

特殊符號來表示ALU:

clipboard.png


8位ALU有兩個輸入,A和B,都是8位(bits),還須要告訴ALU執行什麼操做,例如加法或減法,因此用4位的操做代碼告知ALU,簡言之,"1000"可能表明加法命令,"1100"表明減法命令。
操做代碼告訴ALU執行什麼操做,輸出結果是8位的,ALU還會輸出一堆標誌(FLAG),「標誌」是1位的,表明特定狀態。好比相減兩個數字,結果爲0。

ALU經常使用標誌:

  • OVERFLOW(BIT) 是否溢出
  • ZERO(BIT) 是否相等
  • NEGATIVE(BIT) 是否負數

clipboard.png

計算機是怎樣在沒有齒輪或槓桿的狀況下進行運算?

  • 晶體管
  • 二進制
  • 邏輯門
  • ALU(算術單元和邏輯單元): 邏輯與算術

計算機須要一些「記憶」。

寄存器和內存

Memory (存儲 / 內存 兩種含義)

  • 存1位(Gated Latch - 鎖存器)。
  • 存8位(Register - 寄存器)。
  • 16 * 16 的矩陣存256,數據選擇器/多路複用器(Multiplexer)解碼8位地址,定位單個鎖存器。
  • 4位表明行,4位表明列。
  • 組合256位內存 + 多路複用器。
  • 可尋址的256字節內存。
  • 8個模塊,每一個模塊有32個小方塊,每一個小方塊有4個小塊,每一個小塊是128位 * 64 位。

經過ALU計算出來的結果,須要找地方存儲,可能還須要進行多個連續操做。這就用到計算機內存了。

電腦用的是「隨機存取存儲器」,簡稱「RAM」。它只能在有電的狀況下存儲東西,好比遊戲狀態。
另一種存儲(memory)叫持久存儲,電源關閉時數據也不會丟失。

鎖存器

目前看到的電路都是單向的,老是向前流動

迴向電路,把輸出連回輸入。

OR門輸出連回輸入:

"0 OR 0"是0,因此電路輸出0。
若是將A變成1, "1 OR 0" 爲1,因此輸出1,連回輸入回到B, OR 門看到的是兩個輸入都是1。
"1 OR 1"仍然爲1,因此輸出不變。
若是A變成0,OR門依然輸出1。

clipboard.png
clipboard.png

AND門輸出連回輸入:

"1 AND 1",永遠輸出1.
若是A設爲0,因爲是AND門,輸出會變成0. 這個電路能記錄0。

clipboard.png

OR門連回能存1的電路
AND門連回能存0的電路

爲了作出有用的存儲(memory),須要把兩個電路結合起來:

clipboard.png

clipboard.png

它有兩個輸入,"設置"輸入,把輸入變成1,"復位"輸入,把輸出變成0。
若是"設置"和"復位"都是0,電路會輸出最後放入的內容。也就是,它存儲了1位的信息。

clipboard.png

clipboard.png

clipboard.png

這叫作鎖存,由於它「鎖定」了一個值,放入數據的動做叫作「寫入」,拿出數據的動做叫作「讀取」

簡化一個輸入:
將它設爲0或1,來存儲值,還須要一根線來「啓用」內存。啓用時容許寫入,沒啓用時就「鎖定」。

clipboard.png

在此基礎上,加一些額外的邏輯門,能夠作出「門鎖」電路。由於門能夠打開和關上

clipboard.png

clipboard.png

把「門鎖」放到盒子裏,這個盒子能存一個bit:

clipboard.png

一切從0開始,數據輸入從0換到1,從1換到0。

clipboard.png

clipboard.png

無論輸入1仍是0,輸出值都是0,由於容許寫入線是關閉的,因此內容不會變化。

打開「容許寫入線」輸入1,「打開」門,輸入數據是1,1就能在門鎖存起來,輸出也是1。如今關閉掉「容許寫入線」,輸出會保持1。無論輸入數據是什麼,輸出都是1。

clipboard.png

clipboard.png

寄存器

並排放8個鎖存器,能夠存8位信息,好比一個8 bit數字。

寄存器能存一個數字,這個數字有多少位,叫「位寬」。

寫入寄存器前,要先啓用裏面全部鎖存器。

  1. 能夠用一根線鏈接全部「容許輸入線」,把它設位1。
  2. 而後用8條數據線發送數據
  3. 而後將「容許寫入線」設爲0
  4. 就能夠將8 bit 存儲起來

clipboard.png

clipboard.png

clipboard.png

64位寄存器要64根數據線,64根連到輸出端。只要1根線啓用全部鎖存器,但加起來也有129根線了。
若是256位寄存器要513根線。解決方法是矩陣

在矩陣中,不併列排放鎖存器,而是作成網格,存256位,用16 * 16 網格的鎖存器,有16行16列。
要啓用某個鎖存器,就打開相應的行線和列線。

clipboard.png

打開交叉的鎖存器的「容許寫入線」,全部其它的鎖存器,保持關閉。
能夠增長AND門,只有行線和列線均爲1,AND門才輸出1.
因此能夠用選擇單個鎖存器,這種行/列排列法,用一根「容許寫入線」連全部鎖存器,爲了讓鎖存器變成「容許寫入」,行線,列線和「容許寫入線」都必須是1,每次只有1個鎖存器會這樣,表明能夠只用一根「數據線」鏈接全部鎖存器來傳數據。由於只有一個鎖存器會啓用,只有那個會存數據。其它鎖存器會忽略數據線上的值,由於沒有「容許寫入」。

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

「容許讀取線」來讀數據,從一個指定的鎖存器,讀取數據。因此對於256位的存儲,只要35根線。1條「數據線」,1條「容許寫入線」,1條「容許讀取線」,還有16行16列的線用於鎖存器(16 + 16 = 32, 32 + 3 = 35)。

須要某種方法來 惟一指定 交叉路口。

多路複用器

將地址轉成 行 和 列,須要「多路複用器」。
多路複用器有不一樣大小,由於有16行,須要1到16多路複用器。
工做方式:
輸入一個4位數字,它會把那根線,鏈接相應的輸出線。若是輸入0000,它會選擇第一列,若是選擇輸入0001,會選擇下一列,以此類推。

clipboard.png

clipboard.png

一個多路複用器處理(row), 另一個多路複用器處理列(column)。

把256位內存當成一個總體,它輸入一個8位地址:4位表明列,4位表明行,還須要「容許寫入線」和「容許許讀取線」。還須要一條數據線,用於讀/寫數據。256位內存,也無法作事情,因此還須要擴大規模。把它們並排放置。

clipboard.png

並排放置,一行8個,能夠存一個8位數字,8位也叫作一個字節(byte),爲了存一個8位數字,同時給8個256位內存同樣的地址。每一個地址存1位,意味着下圖總共能存256個字節(byte)

clipboard.png

不看做是一堆獨立的存儲模塊和電路,而是當作一個總體的可尋址內存。每一個地址能讀或寫一個8位值。

clipboard.png

現代的計算機的內存擴展到上兆字節(MB)和千兆(GB)的方式,不斷把內存打包到更大規模,隨着內存地址增多,內存地址也必須增加。
8位最多能表明256個內存地址(11111111 是255, 0~255,一共256個數字),要給千兆或十億字節的內存尋址,須要32位的地址。

8個模塊

內存的一個重要特性是:能夠隨時訪問任何位置

「隨機存取存儲器」,簡稱RAM:
clipboard.png

RAM就像人類的短時間記憶,記錄當前在作什麼事。

把內存中某塊放大,看到32個內存方塊;放大其中一個方塊,能夠看到有4個小塊;若是再放大,能夠看到存「位」的矩陣,這個矩陣是128 * 64位,總共是8192位。
每一個方格4個矩陣,因此一個方格有32768(8192 * 4 = 32768)位(bits)。
一共32個方格,一個芯片大約存100萬(8192 4 32 = 1048576)位。
RAM有8個芯片,因此總共800萬位,也就是1兆字節(1 MB)

clipboard.png

clipboard.png

clipboard.png

clipboard.png

用鎖存器完成了一塊SRAM(靜態隨機存取存儲器),還有其它類型的RAM,例如閃存和NVRAM,它們在功能上與SRAM類似,但用不一樣的電路存單個位。好比用不一樣的邏輯門,電容器,電荷捕獲或憶阻器。但根本上,這些技術都是矩陣層層嵌套,來存儲大量信息

相關文章
相關標籤/搜索