【发布时间】:2015-09-25 05:38:28
【问题描述】:
我目前正在阅读How Linux Works: What Every Superuser Should Know,我阅读了以下关于上下文切换的内容:
- CPU(实际的硬件)基于一个内部的 tinier 中断当前进程,切换到内核模式,并手动控制 回到内核。
- 内核记录 CPU 和内存的当前状态,这对于恢复刚刚中断的进程至关重要。
- 内核执行之前时间片中可能出现的任何任务(例如从输入和输出中收集数据, 或 I/O、操作)。
- 内核现在已准备好让另一个进程运行。内核分析准备运行的进程列表并选择一个。
- 内核为这个新进程准备内存,然后准备 CPU。
- 内核告诉 CPU 新进程的时间片将持续多长时间。
- 内核将 CPU 切换到用户模式,并将 CPU 的控制权交给进程。
我了解需要从 CPU 的状态(寄存器值等)中保存哪些内容,但我不了解需要管理哪些内存。进程不是有自己的内存块,应该不受上下文切换的影响吗?
内核在上下文切换之间需要保存哪些内存?
【问题讨论】:
-
我认为这完全不正确。在任务切换时,内核会记录 CPU 的状态(根据处理器寄存器和标志)。进程的内存不需要这样保存,因为它与分配给其他进程的内存是分开的。也许它正在谈论内存映射(即活动的逻辑到物理地址的映射)。
-
第 6 步也像是胡扯:内核不需要告诉 CPU 时间片将持续多长时间;相反,它使用一个定时器(它可能是也可能不是 CPU 的一部分)周期性地产生一个中断,这决定了时间片将持续多长时间。同样在第 1 步中,timer(在您的帖子中写为 tinier)不需要是 CPU 的一部分。
标签: linux memory-management linux-kernel