上下文切換的時候泛范,CPU的開銷都具體有哪些呢候引?開銷分成兩種,一種是直接開銷敦跌、一種是間接開銷澄干。
直接開銷就是在切換時,cpu必須做的事情柠傍,包括:
1麸俘、切換頁表全局目錄
2、切換內(nèi)核態(tài)堆棧
3惧笛、切換硬件上下文(進程恢復前从媚,必須裝入寄存器的數(shù)據(jù)統(tǒng)稱為硬件上下文)
ip(instruction pointer):指向當前執(zhí)行指令的下一條指令
bp(base pointer): 用于存放執(zhí)行中的函數(shù)對應的棧幀的棧底地址
sp(stack poinger): 用于存放執(zhí)行中的函數(shù)對應的棧幀的棧頂?shù)刂?/p>
cr3:頁目錄基址寄存器,保存頁目錄表的物理地址
......
4患整、刷新TLB
5拜效、系統(tǒng)調(diào)度器的代碼執(zhí)行
間接開銷主要指的是雖然切換到一個新進程后,由于各種緩存并不熱各谚,速度運行會慢一些紧憾。如果進程始終都在一個CPU上調(diào)度還好一些,如果跨CPU的話昌渤,之前熱起來的TLB赴穗、L1、L2膀息、L3因為運行的進程已經(jīng)變了般眉,所以以局部性原理cache起來的代碼、數(shù)據(jù)也都沒有用了潜支,導致新進程穿透到內(nèi)存的IO會變多甸赃。