【发布时间】:2016-02-21 07:11:21
【问题描述】:
我已阅读:
进程切换是从一个进程到另一个进程的上下文切换。它涉及切换所有流程抽象和资源,以支持属于新流程的那些。最值得注意且代价高昂的是,这意味着切换内存地址空间。这包括内存地址、映射、页表和内核资源——这是一项相对昂贵的操作。
还有:
上下文是 CPU 寄存器和程序计数器在任何时间点的内容。
上下文切换可以稍微更详细地描述为内核(即操作系统的核心)针对 CPU 上的进程(包括线程)执行以下活动:(1)暂停一个进程的进程并将该进程的 CPU 状态(即上下文)存储在内存中的某个位置,(2)从内存中检索下一个进程的上下文并将其恢复到 CPU 的寄存器中,以及(3)返回到程序计数器指示的位置(即返回到中断进程的代码行)以恢复进程。
由于 VAS 对于每个进程都是独立的,并且最大大小可达 4GB,因此在上下文的情况下,进程的整个 VAS 是否会加载到 CPU 上下文中进程切换?
由于每个进程都有单独的页表,页表是否也被带入CPU上下文以防上下文切换?
如果不是,那么为什么进程上下文切换比线程上下文切换慢(线程共享相同的VAS)?
【问题讨论】:
-
什么是增值服务?所有虚拟地址的集合?从虚拟地址到物理地址的映射集?还有什么?
-
我的意思是VAS,特定进程的虚拟地址空间。
-
什么是虚拟地址空间?如果你有例如记住this definition,那么“VAS 对于每个进程都是独立的”这句话没有多大意义。
-
VAS 指的是主内存的虚拟内存地址 (en.wikipedia.org/wiki/Memory_address)。 @n.m.
-
虽然“空间”在这里可能不是最好的术语,但我认为很明显 OP 正在询问如何将“虚拟到物理内存映射”交换为进程。您会改用什么术语来表示“
WriteProcessMemory写入另一个进程的虚拟地址空间”?
标签: linux multithreading linux-kernel multitasking context-switch