現代體系結構(指令流水),中斷處理(中斷隱指令,中斷門,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


其他

 分佈式機型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章