《編碼:隱匿在計算機軟硬件背後的語言》讀書筆記整理總結

前言:

  1. 在前輩的推薦下看了這本書。看完之後唯一的想法是:如果在學《計算機組成原理》這麼課之前看到這本書就好了!不過種一棵樹最好的時間是十年前,其次是現在。
  2. 考研初試複習了《計算機組成原理》這門課(儘管複習期間最頭疼的就是它)。正因爲有“一丟丟”計組的基礎,所以讀這本書時經常會有一種“恍然大悟”的感覺。
  3. 書中有大量的電學知識,一些電學知識我是略過粗看的。
  4. 本篇文章是主要整理一下閱讀時在書中圈畫的知識 + 考研初試時整理的計組的筆記。

第一章:至密親友
  1. 編碼是什麼?指一種用來在機器和人之間傳遞信息的方式
    比如人類發出的聲音,書本上的字符形式,手電筒的閃爍,英語詞彙,空氣中的比劃,手語,布萊葉盲文等都是一種編碼的形式
  2. 編碼就是交流
  3. 編碼的應用:各種類型的編碼用在計算機裏存儲和傳遞數字、聲音、音樂、圖片和電影,然後處理和呈現一切用於和人類的溝通的信息。
  1. 莫爾斯電碼(Morse Code):使用點dot和劃dash組成。
    在這裏插入圖片描述
    在這裏插入圖片描述
    附上一張大二學摩爾斯電碼的筆記圖~
    在這裏插入圖片描述

第二章:編碼與組合
  1. 各種類型的信息都有自己的一套編碼。雙方都熟記編碼之後才能交流。接受編碼、解碼費事費力。但如何表示所有類型的信息?如何讓雙方很快地解碼然後信息快速發送出去?
  1. 碼字的數目= 2 編碼的位數
  2. 莫爾斯碼也被稱作二進制碼。因爲此編碼的組成元素只有兩個—“點”和“劃”。

第三章:布萊葉盲文與二進制碼
  1. 布萊葉盲文是爲了便於盲人閱讀而發明的一種編碼。無須刻意記住關於它的什麼內容,而要從中歸納出編碼的一些性質。
  1. 布萊葉盲文:字母、數字、標點符號都被編碼成2*3 的點碼單元中的一個或幾個凸起的點。點用1-6的數字編號,共64種碼字。

六位二進制碼(實際上是六個點)所能表示的全部64種可能的編碼都羅列了一遍。而這64種編碼中很大一部分在上下文中有着雙重含義。尤其注意數字標識符,他們改變了後面編碼的意義。這樣的編碼通常被稱作“優先碼”(precedence codes)或“換擋碼”(shift codes)。它們改變着作用域內的編碼的含義,直到作用域結束。
大寫字母標識符表示緊隨他的字母應該被譯爲大寫。類似的這樣的編碼叫做“逃逸碼”(escape codes)。逃逸碼使對編碼單調的、一成不變的解析轉入一種新的解析方式中。

在這裏插入圖片描述

第四章:手電筒的剖析
  1. 所有物質—我們能感知到的事物----都是由**原子(atom)**構成的。每個原子又有三種粒子構成:中子(neutron)、質子(proton)、和電子(electron)。中子和質子被束縛在原子核內,而電子在圍繞着原子核旋轉,猶如行星繞太陽系旋轉一樣。
  2. 質子和電子都具有帶電荷(charge)的性質,且性質相反。
  3. 當質子和電子在數目相同的條件下共存時,它們都處在最穩定、最和諧的狀態,如果質子和電子之間出現失衡現象,他們就會試圖進行自我修復。原子核中的質子被一種力量束縛到一起,這種引力要強過同性電荷之間的斥力,我們稱之爲強力(strong force)。強力可能引起原子核分裂,而核能就是由此產生的。
  4. 在風暴中,底層雲聚集了大量的電子二頂層雲失去大量電子,最後一道閃電劃過一切又迴歸了平衡。閃電大量電子從一段快速到另一端所形成的。
  5. 一個原子電子的數目和質子數目相同。但在某些情況下,電子可能從原子中脫離,這是電流產生的原因。
  6. 電路中的電子不斷地從一個原子移動到下一個原子,就形成了電流。
  7. 電池:使電子流動
  8. 導體Conductor:最好的導體是銅、銀、金;在最外電子層中只含有一個電子,容易逃逸。
  9. 半導體Semiconductor:鍺元素和硅元素;“半導體”不是導電性能是導體的一半,而是它們的導電係數可以通過多種方式操控
  10. 絕緣體Insulator:橡膠和塑料都是很好的絕緣體;布料和木頭在乾燥的空氣中也是很好的絕緣體;
  11. 導線越長,阻抗越高;導線越粗,阻抗越低(粗一些的導線可以使更多的電子順承的通過線路)。
  12. 開關只能閉合和斷開,沒有介於二者之間的狀態,類似於二進制編碼

第五章:繞過拐角的通信

當手電筒的光無法達到朋友的臥室中,怎樣與他們進行無聲的交流呢?— 電路


第六章:電報機與繼電器

全球性即時通信 + 遠距離通信

  1. **電報(telegraph,遠距離書寫)**原理:在線路的一段採取某些措施,是線路的另一端發生某種變化。
  2. 電報機,就是用以發送和接收電報的設備。1835年美國畫家莫爾斯經過3年的鑽研之後,第一臺電報機問世,莫爾斯成功地用電流的“通”“斷”和“長短”來代替了人類的文字進行傳送,這就是鼎鼎大名的莫爾斯電碼
  3. 電磁鐵是電報的基礎。
  4. 電報機最大的問題就是長距離的導線帶來的電阻,儘管一些電路使用使用高達300伏的電壓,是有效距離超過300英里,但是線路還是不能無限延長。— 設置一個中繼系統
  5. 繼電器:傳進來的電流驅動電磁鐵拉動金屬桿,金屬桿有作爲一個開關的組成部分,而這個開關連接着電池和輸出電路。通過這種辦法,輸入的較弱的電流就被“放大”爲較強的電流。(電流被“放大”)
  6. 繼電器是一個意義非凡的設備。當然它是一個開關,但這個開關閉合和斷開不是由人爲的來操作的,而是由電流來控制的。甚至可以組裝出一部近乎完整的計算機!
    在這裏插入圖片描述
    在這裏插入圖片描述

第七章:我們的十個數字

0,1,2,3,4,5,6,7,8,9

  1. **digit(數字)**這個詞有三種意思: 手指、腳趾、數字
  2. 阿拉伯數字系統:和位置有關-位權

第八章:十的替代品
  1. 對人類而言,10是一個非常重要的數字。(因爲10是我們擁有的手指或腳趾的數目)
  2. 人類已經適應了以10位基數的數字系統,但是隻能用十進制來計數嗎?如果像卡通人物一樣每隻手只有4根手指會怎樣?— 八進制數字系統
  1. 二進制:是最簡單的數字系統,在算術和電子技術之間架起了一座橋樑。二進制和計算機之間有緊密的聯繫。
  2. 二進制只有0、1,可以代表開關、電流是否通過、燈泡是否發亮、繼電器閉合還是斷開。
  3. 二進制數:使用 bit 代替 binary digit

第九章:二進制數

只要信息能轉換成兩種或多種可能性的選擇,就都可用比特來表示。

  1. 二進制每一位,被稱爲比特位(bit)
  2. 1比特是可能存在的最小信息量
  3. 編碼數量 = 2比特位
  4. 比特可以表示文字、圖片、聲音、音樂、電影、產品編碼、膠片速度、影評結果、軍隊入侵以及心愛人的意圖。
  5. 用比特表示信息所要做的就是計算有多少種可能性罷了。比特位越多,所能表示的不同可能性就越多。
  6. 每增加一個比特位,就會將編碼的數量增加一倍。
  7. 奇偶校驗(是一種檢查錯誤和一致性的方法):奇校驗(一組比特位中含有奇數個1)
  8. 比特是數字

第十章:邏輯與開關
  1. 喬治·布爾發明了一種代數,這種代數看上和傳統代數十分相似,而且運算規則也十分相似。在傳統代數中操作數(通常爲字母)代表數字,算子(通常爲“+”和“×”)則用來指示這些數字之間如何運算。傳統代數是處理數字的,布爾的天才之處在於他把代數從數的概念中抽離出來使其更加抽象。在**布爾代數(boole’s algebra)**中,操作數不是數字而是類(class)。簡單來說,類就是一個事物的羣體,後來也被稱爲集合(set)。
  2. 布爾代數中,類的計算使用交集、並集計算,1表示全集,0表示空集。
  3. 交集、並集、從全集去掉某些元素:可用OR、AND、NOT表示。
  4. 映射到電路中的表示:AND:串聯;OR:並聯
    電路中使用開關的原理,可以製造出電報機,從而可以演變製造出計算機。

第十一章:門

繼電器的組合 叫做 邏輯門

  1. 邏輯門的工作方式非常簡單—讓電流通過或者阻止通過
  2. 繼電器像開關一樣,可以串聯或並聯在電路中執行簡單的邏輯任務。這種繼電器的組合叫做 邏輯門。
  3. 繼電器是通過 放大微弱信號來生成強信號
  4. 繼電器可作爲一個電流控制而非人工控制的開關
  5. 電路是有緩衝器、反向器、四種邏輯門或其他邏輯門組成的複雜電路。
  1. 與門AND:2個繼電器串聯
    在這裏插入圖片描述
    三輸入端與門:
    在這裏插入圖片描述
  2. 或門OR:2個繼電器並聯
    在這裏插入圖片描述
  3. 或非門NOR:(與OR相反 )
    在這裏插入圖片描述
  4. 與非門NAND:(與AND相反)
    在這裏插入圖片描述
  5. 反向器:可以將低電平轉換爲高電平(即0變爲1)
    在這裏插入圖片描述
  6. 緩衝器
    在這裏插入圖片描述
    緩衝器的特點是“什麼都不做”,其輸出和輸入是相同的:當輸入信號很弱時,可以使用緩衝器,這是因爲這也正是多年前繼電器被用於電報當中輸入輸出的原因。此外,緩衝器也可用於延遲一個信號,這是因爲繼電器可能要求多一點兒動作時間,如1秒的幾分之一才被觸發。

第十二章:二進制加法器
  1. 層層組合:繼電器 → 邏輯門 → 加法器
  2. 半加器 → 全加器 → 8位加法器 → …
    在這裏插入圖片描述
  3. 當然現代計算機已經不使用繼電器了,後來使用過真空管,現在使用的是晶體管,但是工作方式和繼電器是基本相同的。繼電器 → 真空管 → 晶體管

第十三章:如何實現減法

把減法運算變成加法
在這裏插入圖片描述

“波洛尼厄斯”:既不向別人借錢,也不借錢給別人的人。
向人告貸,容易養成懶惰的習慣;把錢借出去,往往不但丟了本錢,還失去了朋友。


第十四章:反饋與觸發器

一個能計數的電路必定需要觸發器(有記憶力)

  1. 振盪器:對於反向器而言,當輸入爲0時,輸出爲1;輸入爲1時,輸出爲0。在電路中閉合開關會使反向器中的繼電器間斷地閉合和斷開。如果去掉開關,可以使反向器連續地工作,如下圖示:
    在這裏插入圖片描述
  2. 所有計算機都靠某種振盪器來使其他部件同步工作。振盪器有時稱爲時鐘(clock),因爲通過對振盪次數記數還可確定時間。我們把振盪器從某個時間的輸出開始,經歷一段變化又回到同樣輸出的這一段間隔稱爲振盪器的一個循環(cycle),一個循環所需要的時間稱爲振盪器的週期。
    在這裏插入圖片描述
  3. 觸發器電路可以保持信息,換句話說,它有記憶性。它可以“記住”最近一次是哪個開關先閉合的。
    在這裏插入圖片描述
  4. 可以進一步構成鎖存器。鎖存器不同於觸發器,它不在鎖存數據時,輸出端的信號隨輸入信號變化,就像信號通過一個緩衝器一樣;一旦鎖存信號起鎖存作用,則數據被鎖住,輸入信號不起作用。鎖存器也稱爲透明鎖存器,指的是不鎖存時輸出對於輸入是透明的。

第十五章:字節與十六進制

在前面的章節中,加法器、鎖存器以及數據選擇器的輸入和輸出形式都是8位的數據流,即:數據路徑的位寬爲8

  1. 字節Byte:(古)表示某一數據路徑上的位數(僅)表示一組8比特數據半字節:4比特
  2. 8作爲比特率的尺度重要性:數字可以按照BCD方便的保存 ;全世界大部分書面語言的基本字符數少於256 ;字節也適合表示黑白圖像中的灰度值(256種)
  3. 二進制 十進制 十六進制 八進制 之間的轉換
1. 其他進制轉爲十進制:按位權展開(×各自的基數)
2. 十進制轉爲其他進制:除基
3. 二進制轉爲八進制:每3比特看做一組
4. 二進制轉爲十六進制:每4比特看做一組

在這裏插入圖片描述

第十六章:存儲器組織

存儲器:記錄信息

  1. 電報繼電器以一定的形式組織起來構成邏輯門,再形成觸發器就具備了保存信息的能力一個觸發器只能保存一位信息
  2. 鎖存器:存儲進去的數據就好像被鎖住了一樣
  3. 8個1位鎖存器,3-8譯碼器,8-1選擇器構成的一個8×1RAM,如下圖所示:
    在這裏插入圖片描述
    這種鎖存器的配置有時也稱爲讀/寫存儲器,但通常叫作隨機訪問存儲器RAM。稱它爲存儲器是因爲它能保存信息,稱爲讀/寫存儲器是因爲可以在每個鎖存器中保存新的數據(也就是寫數據),同時還可以查看每個鎖存器中所保存的數據(也就是讀數據)。稱它爲隨機訪問存儲器是因爲通過簡單地改變地址輸入就可以從8個鎖存器中的任意一個讀出或寫入數據。相比之下,其他類型的存儲器必須順序讀出—也就是,在可以讀出存儲在地址1 0 1的數據之前,必須讀出存儲在地址1 0 0的數據。
    可以將多個8×1RAM構成一個整體的RAM,兩種組合思路:增加數據寬度(數據線),增加地址線寬度。
  4. 爲什麼RAM具有易失性
    如果一個裝滿65 536字節的6 4 K×8 RAM陣列被關掉電源,將會發生什麼情況呢?所有的電磁鐵將失去磁性,所有繼電器的觸點將回到未觸發狀態, RAM中的內容也將永遠丟失。這就是隨機訪問存儲器也稱爲易失性存儲器的原因,它需要恆定的電源來保持其中的內容。

第十七章:自動操作

編寫程序來讓 加法器自動完成數據輸入和計算

  1. 用來累加多個數的鎖存器成爲累加器(accumulator)
  2. 概念:操作碼(又叫指令碼 指示電路要執行某種操作);控制信號(時鐘 清零 寫 選擇)取指令,執行 。
  3. 一臺數字計算機 = 處理器 + 存儲器 + 輸入設備 + 輸出設備
  4. 機器語言、彙編語言

處理器可以響應的操作碼(如指裝載和存儲的1 0 h和11 h)叫作機器碼,或機器語言。之所以用“語言”這個術語是因爲機器碼類似於可讀/寫的人類語言可被機器理解和響應。還有一種一種計算機程序設計語言,稱作彙編語言。它是全數字的機器代碼和指令描述性語言的綜合,且存儲器地址用符號表示。彙編語言的每條語句都對應於機器代碼的特定字節。


第十八章:從算盤到芯片
  1. 存儲器:用來存儲程序代碼和程序執行中產生的數據。這些指令在存儲器中是順序存放的,而且可以由程序計數器進行尋址,但允許條件跳轉。— “存儲程序

馮諾依曼提出:計算機內部應該使用二進制數;計算機中應該擁有儘可能大容量的存儲器,這些存儲器應該用來存儲程序代碼和程序執行中產生的數據;這些指令在存儲器中是順序存放的,而且可以由程序計數器進行尋址,但允許條件跳轉。這就是存儲程序概念(stored-program concept)

  1. 最大時鐘頻率/主頻:決定了執行一條指令所需要的時間
  2. 芯片:指內含集成電路的硅片,體積很小,常常是計算機或其他電子設備的一部分。集成電路實體往往要以芯片的形式存在。

某種意義上,所有數字計算機都是相同的。如果一個處理器的硬件能做別的處理器做不了的,那麼別的處理器可以用軟件實現,最終它們能做同樣的事情。

  1. 以下三個指標經常用來作爲微處理器相互比較的標準
  1. 處理器的數據通路的寬度。
  2. 時鐘頻率是可連接到微處理器並能運行的振盪器的最大頻率。時鐘頻率決定了每一條指令的執行速度。
  3. 可尋址空間大小。

第十九章:兩種典型的微處理器
  1. 8080微處理器:8位 6000個晶體管,2MHZ 64KB 單芯片 40個管腳 (3個電源電壓2個同步時鐘輸入16個尋址的輸入信號8個輸入輸出信號10個控制信號)
  2. 6800微處理器:有一個16位程序計數器PC、一個16位堆棧指針SP、一個8位狀態寄存器(作爲標誌)以及兩個8位累加器A和B;有一個16位索引寄存器(indexregister),可用來保存一個16位地址
  3. 現代處理器使用了一些技術用來提高速度,其中之一是流水線技術處理器在執行一條指令的同時讀取下一條指令。由於轉移指令會改變執行流程,實際上這樣達不到預期效果。現在的處理器還包含一個Cache(高速緩衝存儲器),它是做在處理器內部的快速RAM陣列,用於保存最近執行的指令。因爲計算機程序經常執行一些小的指令循環,因而Cache可以避免這些指令重複裝載。所有這些速度提升措施都需要在處理器中有更多的邏輯器件和晶體管
  4. 第一個是Call(調用)指令Call指令與Jump指令的不同之處在於:前者把一個新值裝入到程序計數器PC中,處理器保存PC中原來的地址,保存在哪裏?當然,在堆棧中。這種策略意味着Call指令可有效地保存“程序從哪裏跳轉”的標記。處理器最終可利用此地址返回到原來的位置。這個返回指令叫Return。Return指令從堆棧中彈出兩個字節,並把該值裝載到PC中。
  5. 微處理器是怎樣與外圍設備(對於連接到微處理器而不是存儲器的東西的稱呼)進行通信的呢?外圍設備具有與存儲器相似的接口,微處理器可通過對應於外設的具體地址來對外設進行讀寫。在有些微處理器中,外圍設備實際上佔用了通常用來尋址存儲器的地址,這種配置叫作內存映像I/O。然而在8 0 8 0中,在65536個正常地址外還有256個附加地址專門爲輸入輸出設備預留,這些就是I/O端口(I/O Port)。I/O地址信號爲A0~A7,但I/O訪問與存儲器訪問不同,由8228系統控制芯片鎖存的信號來區分。
  6. RISC精簡指令集計算機指令都是等長的;只有加載和保存兩種指令能訪問存儲器;儘量簡化指令的操作;設置了大量的寄存器

第二十章:ASCII碼和字符轉換
  1. 存儲器唯一可以存儲的形式是比特
  2. 用比特來表示數字和機器碼。那如何存儲文本呢?ASCII碼
  1. 數字計算機中唯一可以存儲的是比特
  2. ASCII碼(American Standard Code for Information Interchange)美國信息交換標準碼;7位編碼
  3. 擴展的ASCII碼:8位編碼
  4. Unicode(統一化字符編碼標準)16位編碼,每一個字符需要2個字節;用於世界上所有語言文字

當數字以文本流的身份出現時,是以ASCII編碼的。和該數本身表示的含義無關。也就是說我們平時從鍵盤輸入一個數字(0-9)都是ASCII碼形式的。
在這裏插入圖片描述


第二十一章:總線

一臺計算機包括:中央處理器、存儲器、輸入/輸出設備等。這些部件按照功能被分別安裝在兩個或更多的電路板上。這些電路板通過總線bus通信。

  1. 總線是數字信號的集合,這些信號被提供給計算機上的每一塊電路板並供電。
  2. 信號分爲四類:地址信號 ;數據輸出信號 ;數據輸入信號 ;控制信號
  3. 數據輸入輸出信號決定所存儲的數值的大小
  4. 微處理器不能直接從磁盤讀取數據,需要將所需的數據從磁盤調入內存(隨機訪問存儲器)。磁盤上的數據以文件files作爲實體來存放的。
  5. 磁帶:只能順序訪問

第二十二章:操作系統
  1. 操作系統是很多軟件構成的龐大程序集合 包括文件系統
  2. 功能:利用命令和實用程序對文件進行基本操作將程序加載到內存中並且運行、讓程序方便地訪問計算機硬件
  3. 只讀存儲器ROM:存放一小段引導程序,操作系統的其他部分可以通過這段代碼的自舉操作被高效的引導

第二十三章:定點數和浮點數
  1. 浮點格式是基於科學計數法的,它是存儲極大或極小數的理想方式
  2. IEEE浮點數的兩種基本格式:單精度格式和雙精度格式
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

第二十四章:高級語言和低級語言

使用機器碼編寫程序 就如同用牙籤吃東西,伸出手臂費半天勁刺向食物,但每次都只取到小小的一塊。用這種低級語言編寫程序既費時又費力。所以人們想出了一種效率更高的編程方法-使用高級語言

  1. 彙編語言的助記符和機器語言是一一對應的
  2. 彙編語言存在“不可移植性
  3. 程序設計語言中的變量名實際上對應內存的一個存儲單元。在程序中是通過名字來訪問該存儲單元的,而不是直接使用存儲單元的地址值。
  4. 指針本質:數字化描述的內存地址

第二十五章:圖形化革命

**用戶接口 (User Interface)**是人機交互的核心。

  1. 像素pixels:屏幕是一個巨大的矩形陣列,陣列的每個元素都是一個點,這些點稱爲像素。
  2. 每個像素所賦予的比特數 也稱爲 色深或色彩分辨率
  3. 顏色數= 2每個像素所賦予的比特數
  4. 計算機圖像的兩個分支:矢量和光柵。
  1. 矢量圖形:是CAD計算機輔助設計 所應用的領域;其一般轉化爲圖元文件格式以存放到文件中。
  2. 光柵圖形(也稱爲 位圖):陣列中的一個單位對應着輸出設備上的一個像素點
  1. 位圖可能很大-數據壓縮
  1. 無損壓縮:壓縮過程是可逆的;
  2. 有損壓縮:不可逆;可壓縮圖像,但不可壓縮電子報表或文字處理文檔

參考文章:

  1. 《編碼:隱匿在計算機軟硬件背後的語言》讀書筆記
  2. 《編碼》讀書筆記:從無到有構建計算機系統
  3. 我的考研初試計組整理筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章