a*****1 发帖数: 314 | 1 http://www.mitbbs.com/article_t/JobHunting/32248935.html
context switch的时候保存什么,保存在哪里??
保存内核堆栈? 保存到内核里?
很模糊。
请高手指点。。
谢谢 |
t*******2 发帖数: 292 | 2 每个process有一个对应的kernel stack,
这个stack不同于virtual space的那个stack
这个stack好像就8K,
context switch就把当前的一些寄存器存在这里
【在 a*****1 的大作中提到】 : http://www.mitbbs.com/article_t/JobHunting/32248935.html : context switch的时候保存什么,保存在哪里?? : 保存内核堆栈? 保存到内核里? : 很模糊。 : 请高手指点。。 : 谢谢
|
a*****1 发帖数: 314 | 3 那global page directory 和 page table 呢?
是不是也应该保存? 那他们保存在哪啊?
谢谢
【在 t*******2 的大作中提到】 : 每个process有一个对应的kernel stack, : 这个stack不同于virtual space的那个stack : 这个stack好像就8K, : context switch就把当前的一些寄存器存在这里
|
s********k 发帖数: 6180 | 4 每个process的stack就是它的virtual space的stack,VM的原因每个process都认为自
己拥有所有的memory addr吧。
context switch保存应该是所有寄存器信息,尤其是PC,再加上stack pointer吧
【在 t*******2 的大作中提到】 : 每个process有一个对应的kernel stack, : 这个stack不同于virtual space的那个stack : 这个stack好像就8K, : context switch就把当前的一些寄存器存在这里
|
t*******2 发帖数: 292 | 5 好像是一个cr3管最上层的,然后page table就在每个process的1g那部分的virtual sp
ace里,具体忘记了。。。
【在 a*****1 的大作中提到】 : 那global page directory 和 page table 呢? : 是不是也应该保存? 那他们保存在哪啊? : 谢谢
|
s********k 发帖数: 6180 | 6 看了看,context switch分两步:
1. Switching the Page Global Directory to install a new address space; .
2. Switching the Kernel Mode stack and the hardware context, which
provides all the information needed by the kernel to execute the new process
, including the CPU registers.
应该是整个PCB都被switch 进入kernel stack,
【在 s********k 的大作中提到】 : 每个process的stack就是它的virtual space的stack,VM的原因每个process都认为自 : 己拥有所有的memory addr吧。 : context switch保存应该是所有寄存器信息,尤其是PC,再加上stack pointer吧
|
a*****1 发帖数: 314 | 7 register 保存 在kernel stack里。
Page Global Directory 保存在哪啊? |
a*****1 发帖数: 314 | |
s********k 发帖数: 6180 | 9 X86下是CR3 register吧,ARM不太清楚了。重新flush所有的TLB,还有一二级cache,
所以慢,context switch本身消耗并不大
【在 a*****1 的大作中提到】 : register 保存 在kernel stack里。 : Page Global Directory 保存在哪啊?
|