Crash Course Computer Science—筆記1
以下所有認知來自於b站上的“Crash Course Computer Science”,是趣味科普計算機相關知識的一門課程(由youtube——CrashCourse頻道出品,這個頻道兩歲了,建立此頻道的哥倆旨在創造一些對人們有用的教育內容),之前有看王垠在著手寫一本科普計算機的書,力求將計算機最本質的東西以白話形式講明白,看了這套視訊以後,我覺得書這種形式還是太單調了,比不上視訊這種可以同時調動多種感官的形式來得生動,易於理解,而且傳播快速。這套視訊製作精良,裡面的動畫和配色(原諒我只能看到表面)時刻吸引著我,生怕眨眼一秒都會錯過點細節,主講人飽滿的情緒讓我一個哈欠都不會打,由此可見整個團隊的心血,最後由衷感謝CrashCourse字幕組,讓我可以在語境中理解很多中英文對應不上的專業詞語(我才不會說我沒有字幕根本看不懂)。
視訊地址:
https://www.bilibili.com/video/av21376839/?p=7
一.計算機的起源與發展簡介
公元前2500年
先看計算的起源,人們早早就對計算產生了需求,早在,人們就發明了算盤,為什麼要發明算盤?因為當時的社會規模已經超出了人們心算的能力,算盤的作用其實是將大腦的算力解放(工具的發明要麼是解放人的體力,要麼是解放人的智力),隨後發明了度量各種別的可度量事物的計算裝置,比如星盤算經緯度,時鐘算日出,算潮汐。
1822年
charles babbage研究出了差分機制造方法,由於硬體限制,沒有製造出來(後人依據草稿又造一臺而且好用),但是在研究過程中有了製造分析機的靈感,分析機可以做很多事,不只是一種特定運算,所以是首個通用計算機(之前的都是專用的),甚至可以輸入資料進行一些列的計算,這一些列的計算就是程式,程式是一個劃時代的概念,而Ada由於為分析機寫了第一個程式,被公認為第一個程式設計師,她還預言以後一定會有一門語言為分析而生。
1890年
人口越來越多,要進行人口普查費時費力費錢,而且往往普查時間太長,出來的結果與現實狀況不符,沒有意義了,這樣的情況催生了機器的產生,打孔卡片製表機,在紙上打孔,然後把紙放進機器裡,機器會根據所打的孔,自己統計符合條件的人數,比如男女各有多少,之後再通過紙把統計結果輸出來。這就是後來計算機一開始採用的輸入和輸出模式。(後來製表機器公司與其他機械公司合併成立了IBM=international business machines)
1900
人口爆炸以及全球貿易(社會規模大幅度增長)導致資料大量增長,
1904-1906
真空管,二極體,三極體可代替繼電器,開閉速度快,但像燈泡一樣易碎,貴
1940
真空管成本降低,政府負擔得起,就應用於計算機(計算機從機電轉向電子)
1941
阿蘭圖靈設計Bombo,用來破解納粹的英格瑪通訊加密裝置(是一臺解密碼機不是計算機)
1943
巨人一號第一次用真空管制造的計算機,用於破解納粹通訊
1944
Harverd mark I最大的計算機之一,IBM給二戰同盟國造的,是服務於曼哈頓計劃的(政府和軍方)。構件使用的是機械繼電器(作用就是開關,控制電路開閉),速度慢,齒輪會磨損,故障率很大,甚至一直小蟲都會因其故障(bug)。
1946
賓夕法尼亞大學, 世界上第一個真正通用的,可程式設計的,電子計算機,成本還是很高,而且很容易壞
1947
貝爾實驗室,發明了電晶體,固態,小,速度快,很多電晶體半導體的開發在加州位於舊金山和聖荷西之間,後來被稱為矽谷(因為材料大多是矽),電晶體創始人也搬過去了,創立了肖克利半導體,裡面的員工後來創立了快捷半導體,裡面的員工創立了Intel(最大計算機晶片製造商)。
二.為啥採用二進位制
二進位制的本質是電路開關的兩種狀態(真和假,通路或斷路),一開始其實有三進位制或者五進位制的(多種狀態表示),但是進位制越多,訊號越不容易被區分,而且有一整個數學分支存在,叫布林代數(George Boole,19世紀自學成才的英國 數學家,是布林Boolean名字的由來),專門處理真和假的問題,法則和運算都給你處理好了,拿過來直接就能用。
Boolean代數裡面常用的操作:邏輯與的本質是物理上的串聯,邏輯或的本質是物理上的並聯,這些操作在計算機裡面由最底層的電路(組合電晶體,物理層面)來實現,操作只是電路的高一層次抽象。(抽象允許我們在高層思考而不必在意底層細節,抽象的本質是把複雜包裝起來,只留一個簡答的介面)
ASCLL讀/asgi/
三.算術邏輯單元
算術邏輯單元(ALU)計算機的計算大腦。是計算機裡負責運算的元件,包括一個算數單元(加減法,增量計算)和一個邏輯單元(邏輯與或非,判斷正負)。
ALU的表示法
1970 第一個被封裝在單個晶片內的完整ALU,Intel 74181
四.暫存器和記憶體
- 儲存的作用:因為算出來扔掉就沒意義了,也許要做連續的操作,所以要存起來。
- 暫存器的本質:現在你這存一小下下,我馬上就拿走
- 鎖存器的結構如下,一組鎖存器構成一個暫存器
(當允許寫入線開啟時,資料可以輸入,當允許寫入線被關閉時候,資料即可存在data out 裡面不允許被改變了,每個暫存器只能存一個數,這個數是多少位,暫存器的位寬就是多少,比如16位的暫存器本質是由16個二進位制單元位構成的)
- 記憶體結構(太喜歡他們做的圖了,又好看又明瞭)
記憶體的地址是由位數決定的,位數越大,能表示的門牌號(地址)越多,記憶體數量也就越大,所謂的記憶體大。
記憶體的重要特性是可以隨時訪問任何位置,RAM
五.CPU(第七集)
- CPU的工作是負責處理程式,程式是由一條條操作構成的,操作就是指令(因為它們指示計算機要做什麼)
- 構建一個CPU
暫存器:臨時儲存和操作資料
指令地址暫存器:追蹤程式執行到哪條指令了(存下指令的地址)
指令暫存器:存當前是什麼指令(指令的內容)
時鐘:以精準的節奏釋放電訊號,控制單元會用這個訊號推進CPU的內部操作
(取指令-解碼-執行,這三個操作算一個步驟,步驟的執行速度叫做時鐘速度,就是需要多長時間才可以執行完這一步,)
ALU:用來計算
CLU:用來控制
3.執行程式
第一階段:取址階段(fetch phase)
第二階段:解碼階段(decode):對照指令表,把01串翻譯成要做的實際操作,並找到被運算元,這個階段由控制單元完成,控制單元底層也是電路
第三階段:執行階段:去運算元的地址處取出運算元放到暫存器裡(暫存器是由操作所指定的Load_A就是寄存到暫存器a裡)
執行過後,把指令地址暫存器加一,就完成了這條指令的執行,準備去執行下一條了