Caching 上下文切换:如果新进程的虚拟内存映射到与前一个进程相同的物理地址,那么如何实现内存保护?

Caching 上下文切换:如果新进程的虚拟内存映射到与前一个进程相同的物理地址,那么如何实现内存保护?,caching,operating-system,virtual-memory,Caching,Operating System,Virtual Memory,我知道上下文切换时不会刷新缓存。因此,如果新进程要求一个页面映射到与前一个进程相同的物理地址(并且前一个进程现在交换到磁盘),那么前一个进程的内容仍然会被缓存。当新进程尝试从物理映射的缓存访问其部分内存时,它们不会被新进程访问吗 如果新进程的虚拟内存映射到同一物理内存 地址与前一个地址相同 对于大多数当代操作系统,您的问题的答案是 假设您有一个可寻址内存为4GB的操作系统,但系统上安装的物理内存只有2GB。进一步假设一个内存需求为1.5GB的进程处于活动状态,因此如下所示 因为有足够的物理内存

我知道上下文切换时不会刷新缓存。因此,如果新进程要求一个页面映射到与前一个进程相同的物理地址(并且前一个进程现在交换到磁盘),那么前一个进程的内容仍然会被缓存。当新进程尝试从物理映射的缓存访问其部分内存时,它们不会被新进程访问吗

如果新进程的虚拟内存映射到同一物理内存 地址与前一个地址相同

对于大多数当代操作系统,您的问题的答案是

假设您有一个可寻址内存为4GB的操作系统,但系统上安装的物理内存只有2GB。进一步假设一个内存需求为1.5GB的进程处于活动状态,因此如下所示

因为有足够的物理内存,所以此进程的完整虚拟地址空间映射到物理内存。

现在让我们假设一个需要1.5GB内存的新进程进入系统。由于两个进程都没有足够的物理内存,第一个进程的地址空间可能会映射到磁盘(分页),因为第二个进程需要整个1.5GB的空间。 因此,现在的情况如下

请注意,从第一个过程的角度来看,一切都和以前一样, 一旦激活并使用其虚拟空间,操作系统就会将存储在磁盘上的内存空间分页回物理内存。

我知道上下文切换时不会刷新缓存。因此,如果新流程 已要求一个页面映射到与 上一个进程(以及上一个进程现在已交换到磁盘)的 前一个进程的内容仍将缓存在内存中 保护

您的前提不完全正确,您在哪里读到缓存不会被刷新?

在上下文切换上使缓存失效的问题取决于各种因素,其中一些因素不受操作系统的控制

一些操作系统实现确实会刷新缓存(如下所示),而不刷新缓存的操作系统则需要硬件的特殊支持。无论哪种方式,任何值得一试的操作系统都将确保无效数据不会提供给任何进程

下面是一些非常好的操作系统书籍中的相关文本

表2-11。与体系结构无关的TLB失效方法

方法名称--flush\u tlb
说明——刷新非全局 当前进程拥有的页面 通常在执行过程切换时使用

如果CPU切换到使用同一组 将表分页为正在替换的内核线程,内核 调用uu flush_tlb()使 中央处理器

缓存和MMU的存在可能会对 演出在多道程序设计系统中,从一个程序切换到另一个程序时, 程序到另一个,有时称为上下文切换,它可能是 需要从缓存中刷新所有修改的块并更改 映射MMU中的寄存器。

一种方法是简单地刷新上下文开关上的TLB,因此 在运行下一个进程之前清空它。基于软件的网络环境 在系统中,这可以通过显式(和特权)实现 硬件指令;使用硬件管理的TLB,刷新可以 更改页表基址寄存器时生效(注意操作系统必须 更改上下文开关上的PTBR(无论如何)。在这两种情况下,同花顺 操作只是将所有有效位设置为0,基本上清除 TLB的内容。通过刷新每个上下文开关上的TLB,我们可以 现在有一个有效的解决方案,因为一个过程永远不会意外 在TLB中遇到错误的翻译

另一方面,为了减少这种开销,一些系统添加了硬件 支持跨上下文交换机共享TLB。在里面 特别是,一些硬件系统提供地址空间标识符 TLB中的(ASID)字段。您可以将ASID视为一个过程 标识符(PID),但通常具有较少的位(例如,8位用于 ASID与PID的32位比较)。如果我们以上面的TLB为例 加上ASID,很明显流程可以很容易地共享TLB:仅 需要ASID字段来区分其他相同的字段 翻译

如果新进程的虚拟内存映射到同一物理内存 地址与前一个地址相同

对于大多数当代操作系统,您的问题的答案是

假设您有一个可寻址内存为4GB的操作系统,但系统上安装的物理内存只有2GB。进一步假设一个内存需求为1.5GB的进程处于活动状态,因此如下所示

因为有足够的物理内存,所以此进程的完整虚拟地址空间映射到物理内存。

现在让我们假设一个需要1.5GB内存的新进程进入系统。由于两个进程都没有足够的物理内存,第一个进程的地址空间可能会映射到磁盘(分页),因为第二个进程需要整个1.5GB的空间。 因此,现在的情况如下

请注意,从第一个过程的角度来看,一切都和以前一样, 一旦激活并使用其虚拟空间,操作系统就会将存储在磁盘上的内存空间分页回物理内存。

我知道缓存不会在c刷新