分页和上下文切换有什么区别?

分页和上下文切换有什么区别?

看起来两者都涉及进程的进出。

在分页中,您交换现有进程的一页,并将其替换为磁盘中的另一个页面(我相信是虚拟内存),但对于上下文切换,您还可以通过首先将其保存在 PCB 中,然后恢复另一个进程来交换进程PCB 插入内存​​。

两者有何区别?这是我目前的猜测/理解:

  1. 上下文切换是针对整个流程的,所以可能所有页面都被一次性换出。

  2. 因此,进程控制块或 PCB 将包含页面(如果不是,两者有何关联?)。

答案1

我认为差异多于共同点。

上下文切换基本上是指程序代码运行所需的任何 CPU 上下文。其中包括 CPU 寄存器的值、标志、指令指针和堆栈指针、优先级、虚拟内存设置(页表)等。

它不需要包括实际的记忆进程的内存,通常不会,因为完全交换进程的内存会很慢。如果系统可以同时在内存中存储多个程序,并且程序有办法知道要使用哪一部分内存,则在切换到另一个进程时不需要交换整个内存。

(根据维基百科,他们曾经换出不过,整个过程发生在 20 世纪 60 年代。)

分页是在主内存和某些辅助存储之间移动内存块(“页面”)的过程,通常以运行进程不可见的方式移动。

在现代系统上,进程之间的上下文切换将包括重新加载页表,但根本不需要涉及分页,因为通常所有内容都适合内存。另一方面,如果使用足够的内存来需要交换,即使在单个进程内,分页也可能发生。

所以实际上,上下文切换和分页是相当正交的,它们只是多任务虚拟内存操作系统的两个概念。

答案2

上下文切换与分页无关,它允许您同时运行两个不同的程序。上下文是用户空间或内核空间代码正在运行的内容,并且切换是从用户空间移动到内核空间,反之亦然。

仅当您有交换空间来将要换出的内存页放置到该空间以便将该内存页用于其他用途时,才会发生分页。如果没有交换空间,则不会发生分页,但会发生上下文切换。

当上下文从用户空间切换到内核空间代码(然后可能切换到不同应用程序的其他用户空间代码)时,不一定进行分页。 IE。原来的进程内存不会自动换出。因此,当第二个进程运行时,它仍然会使用内存。

相关内容