王道計算機考研 計算機組成原理

不全 慎用https://www.aliyundrive.com/s/b6JmZQ7toTG
自?。?/p>
截屏不是目的,是記錄當下自己是否真的靜心去聽課,把害怕遺忘交給軟件,不至于每次都倒在離開始不遠處的地方。
https://www.aliyundrive.com/s/b6JmZQ7toTG
引入

常識


CPU

內(nèi)存

硬盤







計算機系統(tǒng)概述












邏輯元件的更替




這個地方舉的例子很恰當





非常形象






















吞吐量與食堂打飯,還是有點形象的,吞吐量是個相對寬泛的概念。



數(shù)據(jù)的表示和運算


數(shù)制之間的轉(zhuǎn)換







注意字母結(jié)尾方式的進制考察

進制轉(zhuǎn)換比較簡單,多練習即可


權(quán)重不同進行的分類,







每天不要花太多時間去學習新的內(nèi)容。


減數(shù)看作加上一個數(shù)的相反數(shù)。
12 - 3 = 12 + (15 - 3 + 1) - 16(后面減去16表示的是溢出部分)別刻意去記憶規(guī)則
0011 + 1100 = 1111 = 15



帶符號整數(shù)


高位表示符號為,能表示的合法范圍減半

符號位是人為定義的,對于機器而言并沒有符號這個概念可言。所以在執(zhí)行減法,需要另辟蹊徑


思考:反碼為什么只對負數(shù)起作用,還是那個思路,負數(shù),即減去一個數(shù),需要將其轉(zhuǎn)化為加上一個數(shù)的相反數(shù)

不建議將補碼轉(zhuǎn)換為反碼

非常實用的技巧









定點小數(shù)


逗號隔開整數(shù)、小數(shù)點隔開小數(shù)




把前面的小Tips好好操練,可以看看計組課本的相應內(nèi)容,補碼概念來源于"模概念"

對于計算機而言,不管是整數(shù)還是小數(shù),都是用的同一套邏輯進行加減運算。



傳輸校驗



多位發(fā)生錯誤校驗可能失效

異或運算

偶數(shù)個比特發(fā)生錯誤無法檢測。
程序狀態(tài)字寄存器(PSW):用于保留由算術邏輯運算指令或測試指令的結(jié)果而建立的各種狀態(tài)信息。


M = 0 : 執(zhí)行算數(shù)運算
M = 1 : 執(zhí)行邏輯運算
指令譯碼器

機器字長的本質(zhì),跟ALU同時能夠處理的位數(shù)有關
X寄存器的位數(shù)與ALU位數(shù)保持一致

數(shù)字邏輯設計里面的內(nèi)容

簡化邏輯表達式可以相應的簡化電路,邏輯清晰,也降低了成本



異或的天然邏輯:
加法(0+0=0, 0+1=1, 1+0=1, 1+1 = 10(溢出需要被保存))
奇偶校驗:奇數(shù)個1結(jié)果為1,其余皆為0

晚上自己分析一下邏輯表達式繪制一下這個邏輯電路圖試試

FA

FA : Full Adder

串行加法器的效率較低

類似于人手工計算

串行進位加法器的缺點
挺有意思,并發(fā)思想
慎用并發(fā),方便但復雜

貼個這個圖,放平心態(tài),哈哈!




最高位產(chǎn)生的進位信息被保留

加法器的位擴展,進位給另一個加法器,高位溢出部分成了另一個加法器的Cin

-8-7: 4bit裝不下的原因是,高位作為符號位會獨占一位,2的三次方加一個符號位,最小的負數(shù)表示位-8,





Sub中的0/1,即作為多路選擇器的判斷條件,又作為Cin的進位數(shù)值,這樣的設計還是非常巧妙地。
這里面產(chǎn)生了一個疑惑點,假設Y本身就是有符號的負數(shù),而X和Y之間是X+Y的關系,上面有給例題,分析分析,上面的X+Y有些問題。
A+B
A-B
3+2
3+(-2)
3-2
(-3)-2

該電路也可以用于無符號數(shù)的加減法


今天到這里,暫停一下



0 2 4 6 8 16 32 64 128 256 512 1024

左移是擴大兩倍,右移是減小兩倍
注意符號位







高字節(jié)低字節(jié)調(diào)換
大端模式和小端模式存儲(以前用Matlab處理地震數(shù)據(jù)碰到過),原來是實用循環(huán)移位的方式進行數(shù)據(jù)的轉(zhuǎn)換的


移位相加,權(quán)重不一樣,才會錯位



異或進行符號位的單獨






老師講解的特別清晰,自己手動也模擬了一下。
乘法被轉(zhuǎn)換為:加法+移位操作,簡化了手動計算的復雜。ACC最為累加器,一直在保留中間的結(jié)果。MQ保留乘積低位也在這里有所解釋,即部分積

雙符號位建議(保持與補碼乘法一致)

最好寫出原碼機器數(shù)
一定要自己手動推導一遍,看看自己哪里自己沒有清楚。
這部分雖然十幾分鐘,我花了差不多一個小時自己去推導理解。還是很受用的
+0與+|x|,確定清楚,最后一步確定符號位:異或方式

輔助位,MQ需要擴展一位


輔助電路


補碼這個地方需要自己深究一下,補碼本質(zhì)上是(原數(shù)+模)%模, 所以正數(shù)的補碼位自己。補碼參與運算如何去原碼運算保持一致,自己分析一下再看
已手動分析完過程
還沒開始看視頻,從乘法采用移位的方式,除法則同理,相應的會有一些精度損失。


迷糊

二進制中只有上0和1,敢不敢將相應的邏輯電路講講?
單圖重復用,還是同樣的結(jié)構(gòu)

計算機在試探,跟人一樣,自動恢復錯誤的步驟,

ACC符號位為1,負,需要進行恢復

自檢



左移



商的結(jié)果在MQ里面

計算機默認上商

能否不恢復余數(shù)???

簡化中間步驟


加減交替法,最后還是需要與恢復余數(shù)法一樣進行正負判斷,對于負數(shù)依舊需要恢復

定點小數(shù)除法運算,前提條件,商也是一個定點小數(shù),規(guī)定,被除數(shù)需要小于除數(shù),判斷條件:第一步的商進行確定。
原碼的出發(fā)運算,符號位單獨運算
補碼除法依舊采用雙符號位方式,將符號位直接參與到運算當中。

末位商恒指為1,省事,跟原碼商比起來


這部分比較簡單
有符號與無符號
截斷處理,低位保留
符號擴展,高位補0補1,看符號情況

大小端模式,前面講到可通過循環(huán)移位的方式進行轉(zhuǎn)換
大端存儲方式符合人類的習慣
小端方式方便機器進行處理,內(nèi)存地址遞增的方式進行處理,先從低位開始進行處理

邊界對齊以前在某本C語言書看到過,作者闡明大部分人不是非常了解邊界對齊這個規(guī)則。像C語言中的結(jié)構(gòu)體,不同的數(shù)據(jù)類型連續(xù)存儲

剛好也講到哈哈
用邊界對齊的方式其實更好訪問,所以對于結(jié)構(gòu)體型,中間存在很多空的數(shù)據(jù),造成空間上的浪費。
邊界對齊方式:空間換取時間
邊界不對齊方式:時間換取空間
具體情況具體使用






有限空間內(nèi),保留數(shù)據(jù)精度,如何進行優(yōu)化,引出浮點數(shù)尾數(shù)的規(guī)格化




浮點數(shù)確定真值
計算機浮點數(shù)的統(tǒng)一規(guī)則,引出標準
https://zhuanlan.zhihu.com/p/343033661
在深入Java學習的時候,有了解了一下IEEE754標準,對于認識Java的float和double有了比較清晰的認識,以上專欄系列文章可以去自習查閱。這部分我就直接跳過了。

關于第二章,還是可以看到,算數(shù)運算還是根據(jù)數(shù)學經(jīng)驗在數(shù)字邏輯單元上進行實現(xiàn)。符合人類思維的東西,比如正負數(shù),對于計算機而言,一概是陌生的。補碼的引入,核心還是對于模這個概念的正確認識,模的概念在數(shù)據(jù)結(jié)構(gòu)棧這種數(shù)據(jù)結(jié)構(gòu)中會有所體現(xiàn)。將負數(shù)轉(zhuǎn)換為正數(shù),多余部分溢出可以不去理會。而對于需要存儲中間數(shù)據(jù)的量,都會設計相應的邏輯原件。這樣在去對照之前關于算數(shù)邏輯單元,每個寄存器所具備的職能,就不需要去死記硬背,每個邏輯器件的設計都有它的核心理由?,F(xiàn)在寫的還是相對比較雜亂,只是停下來思考一下,將這三天的學習,大概在腦子里面過一下,后面還是得看課本和刷題加深理解。
可以開展后面的章節(jié)了。
存儲器


流水線模式~傳遞提高效率
主存輔存:實現(xiàn)虛擬存儲習題,解決主存容量不夠的問題





相聯(lián)存儲器(Associative Memory)即可以按內(nèi)容訪問的存儲器(Content Addressed Memory, CAM) 可以按照內(nèi)容檢索到存儲位置進行讀寫,“快表”就是一種相聯(lián)存儲器







哈工大劉宏偉老師講的這個部分挺好的


讀寫線的個數(shù)
譯碼驅(qū)動器,放大信號

片選線,指定存儲
引腳的數(shù)目


矩陣化




雙穩(wěn)態(tài)觸發(fā)器
這個月補一下數(shù)字邏輯設計,加深對硬件的理解






刷新周期(2ms如果題目沒有給)



DDR3、DDR4




云存儲主要使用機械硬盤


以前我記得買手機插內(nèi)存卡





現(xiàn)代計算機結(jié)構(gòu)



WE:Write Enable

并聯(lián)

改造前

改造后


A13與A14同為1,發(fā)生沖突


優(yōu)化
非門引入

3-8譯碼器 (2^3)

2-4譯碼器

低位->高位
實際題目:A15與A13(考試中可能遇見)

位擴展:存儲器的字長增加,更好的發(fā)揮數(shù)據(jù)總線的傳輸能力
字擴展:增強存儲器的存儲字數(shù),可以更好的理解CPU的尋址能力

兩片芯片為一組進行位擴展
24譯碼器,



使能端

多個使能端




74ls138譯碼器


先考慮單核問題,再考慮多核問題







假設四個通道,二四或者一三插入,原來是低位交叉編址


主頻一致,協(xié)同,主頻不一致,高頻的會進行降頻處理,發(fā)揮不了原本性能。



想起考察角速度線速度。。。。。。
水平方向和垂直方向
機械硬盤沒事不要甩了,磁頭很脆弱。

道密度,磁道
位密度,線速度=角速度*R,每個磁道存儲的比特信息相同











磁盤冗余陣列重點




映射關系可發(fā)生改變,也就是重新編號

磨損均衡技術:重新進行映射




列存儲,指針移動的跨度比較大



不同的訪問策略,速度不一樣
















抖動現(xiàn)象,讓我想起前端里面的防抖debounce,輸入框里面輸入的字符很快被打印出來,頻繁打印, 本來想輸入名字,然后變成一個字一個字的連續(xù)組合,造成多行. 這種快速調(diào)用也會造成一定的困擾.
做題的思路

步驟需要理清

4個存儲塊,計數(shù)器數(shù)只在{0,1,2,3}這個集合元素中


計數(shù)器數(shù)可能非常大


Cache與主存一致性的問題
Cache中的副本修改了,如何與主存保持一致?

寫命中

緩沖Buffer, SRAM(雙穩(wěn)態(tài)觸發(fā)器)


寫不命中

三級緩存(Cache)
分層管理提效,計算機系統(tǒng)稱之為系統(tǒng)當之無愧

與操作系統(tǒng)第三章部分高度重合,容易聯(lián)合考察





快表:相聯(lián)存儲器,按內(nèi)容尋訪,SRAM(雙穩(wěn)態(tài)觸發(fā)器)

問題會傳遞,跟Cache進行對照

結(jié)合操作系統(tǒng)進行學習
重點在操作系統(tǒng)中
硬件等級森嚴
虛擬化





功能模塊為依據(jù)進行拆分

可以停一兩天消化一下





后綴表達式




小結(jié):












PC+1,通常情況下取指令,注意條件

PC+2,注意條件是什么才加2


---------------------------------------------------
跳躍尋址





直接尋址

間接尋址
指針套娃

寄存器尋址

寄存器間接尋址

立即尋址
字面量
匯編 #數(shù)字, 立即數(shù),非地址

小結(jié)

偏移尋址

main函數(shù)為起點


進程控制塊PCB中


變址尋址


普通程序員可以修改


系統(tǒng)分配的基地址+變址尋址的 復合

相對尋址
以PC為基準解讀為:A是相對于下一條地址的偏移量,因為PC會自動+1

跳轉(zhuǎn)修改了PC值,局部性(封裝的味道)

一段代碼在程序中的內(nèi)部浮動


講的有點問題,不妨礙理解

堆棧尋址




What, How, Where

玩倒裝。。。

double word
ptr: pointer縮寫 即指針
C語言好像也喜歡用ptr進行指針命名
Extended 擴展的
X通用寄存器
老師講的很清晰
ESI/EDI
EBP/ESP


AH(high高位)/AL(low低位)

考試常見32bit
寄存器間接尋址

[ebx+8]偏移



再次分析真題

ebp basepointer , 入棧
cmp:compare
算數(shù)、邏輯、轉(zhuǎn)移等等

英語命令習慣倒裝,想想SQL
SELECT
FROM
WHERE
中文,從哪兒,拿什么,Where定語

imul:integer
有無i, 即有無符號

除法,放被除數(shù),隱含尋址。
聯(lián)想前面的除法運算,余數(shù)被放在ACC里面,商被放在MQ里面,也是需要兩個寄存器。
既然ABCD寄存器差不多,為何是AD寄存器的組合?
指令理解英語意思,記憶前綴即可

王道也用前綴代指
X86不允許兩個操作數(shù)同時來自主存



重點關注Intel格式

參考:https://zhuanlan.zhihu.com/p/54821702


常量、寄存器、主存

封裝思想

goto:?來源


等價于


減法,補碼運算,

幾個標志需要好好區(qū)分一下。


ecx默認指定自減操作













簡單粗暴的mov指令












前面有講mov的兩個操作數(shù)不能同時來自于主存








中央處理器




專用數(shù)據(jù)通路方式

單總線方式

同時傳入總線會產(chǎn)生沖突


等待輸入信號的穩(wěn)定



灰色部件用戶不可見





上節(jié)課談到每個指令執(zhí)行結(jié)束后都需要進行中斷檢查














寄存器與寄存器之間
寄存器與存儲器之間
寄存器與ALU之間
三種數(shù)據(jù)流動方式

答題注明那些控制信號有效




間址周期,教材不一樣會不同的表示,不需要過度糾結(jié),計組應用科學,沒有標準答案




例題分析不截圖,自行分析






問題引入,M(MAR)->MDR在取指周期的不同階段會被重復使用,如何設計相應的電路?

LDA X,loda data ->ACC,由邏輯表達式推演相應的電路(數(shù)字邏輯設計中的內(nèi)容)


ID,也可以叫做操作碼譯碼器

微操作,解決問題的分解步驟,計算機只能做確定性的事情。
將不同指令執(zhí)行周期過程中的相同微操作進行統(tǒng)一管理,形成一個模塊,減少了實際電路實現(xiàn)的冗余。

安排微操作時序



電路設計(組合邏輯設計)

IND:是否處于間址周期
EX:當前是否處于執(zhí)行周期





總結(jié)

硬布線控制器適合RISC

















Another














MIPS


Instruction Cache
Data Cache






NOP: 空操作,編譯器的范疇,插入多少空指令

中間數(shù)據(jù)直接作為下一步操作的輸入,需要額外添加邏輯部件

*編譯優(yōu)化

提前形成條件碼,與并行加法器類似(提前產(chǎn)生進位)

第四種是對第一種方法的優(yōu)化

小結(jié)


多CPU工作



與亂序發(fā)射進行對比,空分復用技術

時分復用技術




空段依舊需要消耗相應的時間

運算類

Load



Store

條件轉(zhuǎn)移指令


無條件轉(zhuǎn)移指令
盡早發(fā)現(xiàn)控制沖突

例題

指令流水線大題常考,具備一定難度



向量運算,解線性方程(參數(shù)非常多)



共享物理地址空間

地址空間相互獨立


線程切換,保存恢復寄存器的值




發(fā)送互斥

拆過。。。


總線的定義

總線的特性

總線的分類

1.數(shù)據(jù)傳輸方式分類
并行適合近距離傳輸,串行適合長距離傳輸(抗干擾能力強)

2.功能分類












剔除附加信息

例題




小結(jié)


鏈式查詢方式




操作系統(tǒng)饑餓問題,游戲機舉例(形象)
計數(shù)器查詢方式

循環(huán)計數(shù),或軟件設置更復雜的計數(shù)方式

獨立請求方式

大哥小弟游戲機,不同方式

分布仲裁方式

時序安排


跟計算機網(wǎng)絡中的通信方式有些類似
同步定時方式


異步定時方式

互鎖,相互制約

半同步通信

分離式通信

小結(jié)


大體上說:北橋負責與CPU通信,且連接高速設備(內(nèi)存/顯卡),并與南橋通信;南橋負責與低速設備(硬盤/USB)通信,時鐘/BIOS/系統(tǒng)管理/舊式設備控制,并與北橋通信。

系統(tǒng)總線標準(大致了解即可)

局部總線標準
GUI

VESA完全受到CPU的控制


串行傳輸


設備總線標準






雙絞線(麻花。。)




多個數(shù)據(jù)通路,數(shù)據(jù)包同時傳輸

串行傳輸逐漸取代了并行傳輸






CPU作為中轉(zhuǎn)站進行數(shù)據(jù)的中轉(zhuǎn)







顯存計算*




高中物理。。。



















原子操作



中斷優(yōu)先級

通常使用硬件排隊器進行判優(yōu)







