0
考慮到Linux情況,我們知道每個用戶堆棧都有一個內核堆棧,無論何時發生上下文切換,我們切換到當前的內核模式處理。調度 - 每個進程有一個或多個內核堆棧的上下文切換
這裏我們保存當前進程的當前狀態,寄存器,程序數據等,然後調度程序(不知道它是否在此內核中運行)保存PCB並加載下一個要調度的進程的PCB。
現在第一個問題是,如果上面的解釋似乎對您有意義,考慮一個上下文切換,其中每個進程都有一個「專用」內核堆棧。
而我的問題的另一部分是,如果我們有一個單一的內核堆棧的所有進程會發生上下文切換?
所以這個答案是關於我的問題的第一部分嗎?因爲從這裏我還不能很好地理解在所有進程(與其各自的用戶堆棧)基於單個(UNIQUE)內核堆棧的情況下,上下文切換將如何工作 – DevX10
@ DevX10每個進程都有自己的'thread_union',所以他們有自己的「專用」內核堆棧,它是'thread_union'的成員。內核堆棧的指針是保存在TSS中的'ss0:esp0'。當上下文切換髮生時,TSS將被改變,所以內核堆棧也將被切換。 – haolee
是的,但問題是如何在另一種情況下工作?我不是在談論linux(我的例子是展示這種系統,我們爲每個進程都有一個「專用」內核堆棧,但也有一些系統,我們只有一個內核堆棧)。 而問題是如何這樣的工作?我們將在何處保存寄存器,程序數據,切換時每個進程的用戶堆棧指針? – DevX10