現代體系結構:
1 流水
五級流水: ( =》代表經過時鐘邊緣觸發。對於a-》b=》c:b爲時鐘觸發,a爲觸發前的輸入,c爲觸發後的輸出。 -》代表不經過時鐘觸發器的計算/處理 )
PC=>PC+4->PC->instruction->IR=>RegCtrl->IRex=>ExCtrl->IRmem=>MemCtrl->IRwb=>WbCtrl->Reg
每條命令經過5次 =》 時鐘邊緣,5個時鐘週期
2 冒險
*解決方法: 前遞(及時將Exctrl=》得到的輸出電平 輸入到IRex=》) 旁路, 預測,空泡, 指令/數據內存cache
3 亂序 和 意外事件處理
*最終一致性
4 中斷處理
處理流程
考慮單核單流水
一次中斷處理: 中斷隱指令=》中斷門 Intr Gate=》Do_IRQ保存現場及其他處理(如中斷計數變化)=》 [開中斷] => Do_IRQ_Handler中斷處理 => [軟中斷SWI] => Ret_From_IRQ or Restore_All or 處理其它中斷 => IRET
中斷x被cpu[由擱置態]正式處理(中斷隱指令開始執行)的時機:
1 cpu上正在進行的是中斷處理y, 而且能夠被打斷:
y處於開中斷狀態且不屏蔽x類型中斷:
開關中斷髮生在: 1 中斷隱指令會關中斷、2 Do_IRQ過程中會開/關中斷、3返回時IRET指令恢復EFLAGS會開中斷
2 cpu上正在運行的是現行程序(各種主動的內核/用戶的線程/進程)
這種情況下中斷也應該是打開的
考慮更復雜的超標量亂序流水
必須保證中斷處理時刻的局部順序性
否則中斷處理如例程切換後根本無法恢復原來的進程/中斷上下文
怎麼處理?
關於非中斷的正常語句的邏輯正確性(同步等)處理
在亂序超標量多cpu的背景下:
1 每個線程都在1個亂序超標量流水上,指令之間可能並行/亂序提交
2 每個線程時刻可能被調度出cpu
2 多個線程/中斷在多cpu上並行
1 cpu / 總線 /內存: spinlock! pg57
2 cache : 一致性協議!MESI
其他
分佈式機型