課程:計算機系統基礎
核心理念:人類世界與計算機世界的異同
- 人類世界
- 直觀感受
- 數學
- 計算機世界
- 與數學不同,存儲首先,各層次與現實世界不同
我們關注點是差異點!
一樣的你就不用關心了,關心差異!差異在哪里呢?
- 計算機存儲是首先了
- 編譯器規則
- 編碼轉換規則
- ……
計算機這個工具,最重要的就是將人類思維產物,使用計算機實現。
因此說,有很多地方,是直接可以直觀地去實現邏輯思維過程的(語義上就能理解),但是也有計算機的一些特點,需要我們專門去把握(從計算機本身處理方式和規則去理解)!
面向機器描述,機器級語言:機器語言和匯編語言
二者都是面向機器結構的語言,與機器有關,不同機器(不同的系統結構)就不一樣了,移植性不好。
面向算法描述:高級語言
根據人的邏輯思維方式,產生的產物來編程,越來越接近人類思考方式。機器無關!因為內些部分交給編譯器處理了,編譯器來完成機器相關性的處理,這也是一種封裝。
執行hello world程序
這里值得注意的關鍵點是緩存技術,我們將存儲器進行分層設計,從而 平衡了存儲的容量、速度和價格等多方面因素:
- 緩存1:磁盤存儲可執行程序的二進制信息,速度慢容量大價格低
- 緩存2:執行程序的時候調入內存中,速度比磁盤快的多
- 緩存3:內存中的二進制代碼調入cache中,速度更快
- 緩存4:cache內容調入到CPU寄存器中,速度最快
我們可以體會到,計算機通過多層次緩存完成了程序的一步步緩沖,通過CPU控制它們,從而有了我們現在看見的計算機系統。
使用高級語言開發程序需要的環境
早期原始程序開發方式
早期沒有高級語言,也沒有那么多的復雜上層環境,我們只需要直接使用匯編語言/機器語言輸入到計算機中執行即可,這個過程,對于計算機來說很簡單,也不需要有太多復雜的處理,但是對于人類來說,編程是一件非常痛苦的事情啊……
現代高級語言程序開發方式
高級語言的但是,解決了匯編語言開發時代的困難,不過也因此,計算機需要處理的工作復雜起來了,也就是,人類世界通往計算機世界的通道變復雜了。
那么這里都具體包括了什么呢,我們依次說明一下
人類世界:高級語言
我們發明高級語言,其實是一種對計算機的權衡與妥協。
高級語言
- 相對來說比較符合人類思維,雖然不是自然語言,但是人類也容易接受
- 計算機也容易接受高級語言,如果是自然語言,那計算機是接受不了的
權衡之下,高級語言成了人類與計算機世界溝通的通行語言。就像英語是國際通行語言內樣。
任何事務都有實體和抽象,人類的是:
- 實體:人類的肉體
- 抽象:高級語言
橋梁/通道
橋梁和通道,也可以叫翻譯官,它負責連接人類世界和計算機世界
- 傳入和轉換
- 傳入:鍵盤,鼠標
- 通過鍵盤和鼠標,還有文本編輯器,我們就能夠往計算機中輸入高級語言并存儲在磁盤中 ,完成源程序的編輯
- 轉換:人類世界傳入的,它給轉換成計算機世界能夠接受的
- 對于源程序,我們需要進行一系列的轉換,最終將其轉換為二進制
- 源程序 –編譯器–> 匯編代碼 –匯編器–> 可重定位二進制 –鏈接–> 二進制的可執行文件
- 傳入:鍵盤,鼠標
- 傳出和轉換
- 傳出:顯示器
- 計算機傳出信息,通過顯示器轉換為人類可以識別的信息
- 轉換:計算機世界傳出的,它給轉換為人類世界能夠接受的
- 傳出:顯示器
它的實體和抽象是
- 實體:鍵盤、鼠標、顯示器、存儲器…
- 抽象:轉換邏輯(邏輯的實現構成了編譯器、匯編器等)
計算機世界:二進制的世界
計算機世界是最終處理二進制指令和數據的地方。
- 實體:CPU
- 抽象:ISA,指令集架構
大管家:操作系統
操作系統負責接收CPU發出的控制信號,負責管理計算機世界以及橋梁的各種控制方式。
操作系統也接收人類世界發出的命令,讓計算機執行,也就是人機接口。
計算機的發展:抽象層次不斷提高
ISA是計算機硬件的抽象。
ISA與微架構
微架構就是指令集架構的實現形式,是硬件實現。同一個ISA,可以有不同的微架構來實現,只要完成了ISA規范即可。
不同指令的組合,實現了通用計算機,否則,如果只能是固定的程序,那就是專用計算機了,就像現在的量子計算機“九章”一樣,是專用量子計算機,是不可編程的。
先設計,再實現;先抽象,再具象
對于計算機的發展過程來說,是自底向上一層層抽象和封裝的。
但是對于程序員來說,通常是先設計,再實現,也就是從人類思維出發,先完成抽象,再進行實現的,是自上而下的。當然這不是絕對是,人類的思維過程更多會受到整體性的、系統思維的影響。
計算機層次結構
ISA是最重要的層次,它向下影響硬件結構,向上影響操作系統等。
指令集架構是計算機硬件結構的抽象,然后,對于抽象出來是指令,我們可以對其進行各種排列組合,根據人類的抽象思維,來編寫程序,讓硬件運行起來,指令是可以有各種排列組合的,這也就是通用計算機。
我們編寫的程序,如果直接運行,那就只有3層結構,是最原始的通用計算機。
后來人類發明了助記符,形成了匯編語言,它與機器語言一一對應,但是需要翻譯,因此需要匯編器,人類需要編輯匯編指令,也需要管理,因此就初代的操作系統,此時,一個能夠實現匯編語言程序設計的二代計算機就誕生了。
再后來,操作系統演變更加復雜,同時高級語言和編譯器也有了,這是現代經典計算機雛形。
計算機的發展,實現了一層層的抽象和封裝,讓人類成了會飛的湯姆貓。
這沒什么不好的,但是身為計算機專業人士,我們需要足夠了解底層機制,如果哪一天幫助飛行的火箭不好用了,我們也能分析原因并處理。
- 指令集架構ISA是對計算機硬件的抽象
- 操作系統是對ISA的抽象和保護,它對外僅提供API
- 編譯器匯編器,以及編程語言,調用了操作系統的接口,也就是它提供的系統調用,完成了高級語言的庫函數,對程序員進行了進一步封裝
- 程序員現在更多需要關注的是做什么,而不是怎么做,因為大多的功能都被足夠的優化和封裝了,人類,就應該更多思考人類該做的事情,機器能做的讓它自動做,人類就不用思考了,但是,人類必須懂機器在做的事情,這本身就是人類發明的,不懂底層,干啥啥不行。
ISA
ISA說白了就是規范,人們都要按照這個規范去設計計算機硬件和軟件,從而讓所有遵循規范的人能夠互通有無,提高溝通效率。編程語言是唯一全球化的通用語言,這非常酷!
微架構
至于微架構,就是ISA的硬件實現,只需要指定,同樣的ISA,可以使用各種各樣的微架構實現,這很好理解不是嗎,就好比單周期CPU和流水線CPU內樣,或者一個乘法指令可以有很多具體實現方式。