1. 程式人生 > >現代體系結構(指令流水),中斷處理(中斷隱指令,中斷門,Do_IRQ,關中斷,Do_IRQ_Handler, 軟中斷SWI,中斷巢狀與遮蔽),語句同步處理

現代體系結構(指令流水),中斷處理(中斷隱指令,中斷門,Do_IRQ,關中斷,Do_IRQ_Handler, 軟中斷SWI,中斷巢狀與遮蔽),語句同步處理

現代體系結構:

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

其他

 分散式機型