Memory 什么是寻呼?

Memory 什么是寻呼?,memory,virtual,translation,paging,ram,Memory,Virtual,Translation,Paging,Ram,此处对分页进行了说明,幻灯片#6: 在我的课堂讲稿中,我无法理解它。我知道这是一种将虚拟地址转换为物理地址的方法。因此,磁盘上的虚拟地址被划分为2^k的块。这之后我真的很困惑。有人能简单地给我解释一下吗 简单地说,这是一种保存远多于地址空间通常允许的数据的方式。也就是说,如果您有一个32位地址空间和4位虚拟地址,您可以保存(2^32)^(2^4)个地址(远远超过32位地址空间)。正如您所指出的,分页是一种虚拟内存。为了回答@johncurtsy提出的问题:它通常与虚拟内存分开讨论,因为还有其他

此处对分页进行了说明,幻灯片#6:


在我的课堂讲稿中,我无法理解它。我知道这是一种将虚拟地址转换为物理地址的方法。因此,磁盘上的虚拟地址被划分为2^k的块。这之后我真的很困惑。有人能简单地给我解释一下吗

简单地说,这是一种保存远多于地址空间通常允许的数据的方式。也就是说,如果您有一个32位地址空间和4位虚拟地址,您可以保存(2^32)^(2^4)个地址(远远超过32位地址空间)。

正如您所指出的,分页是一种虚拟内存。为了回答@johncurtsy提出的问题:它通常与虚拟内存分开讨论,因为还有其他类型的虚拟内存,尽管分页现在(到目前为止)是最常见的

分页虚拟内存非常简单:您将所有物理内存拆分为块,大部分大小相同(尽管在实践中选择两个或三个大小是相当常见的)。使块大小相等使它们可以互换

那你就有地址了。首先将每个地址分成两部分。一个是页面内的偏移量。您通常对该部分使用最低有效位。如果使用(比如)4K页面,则需要12位的偏移量。使用(比如)32位地址空间,还剩下20位

从那以后,事情实际上比最初看起来要简单得多。您基本上构建一个小的“描述符”来描述内存的每一页。这将有一个线性地址(客户端应用程序用来寻址该内存的地址)和内存的物理地址,以及一个当前位。将(至少通常)有一些其他的东西,如权限,以指示该页面中的数据是否可以读取、写入、执行等

然后,当客户机代码使用某个地址时,CPU会首先将页偏移量与地址的其余部分分开。然后,它获取线性地址的其余部分,并通过页面描述符查找与该线性地址相关的物理地址。然后,为了对物理内存进行寻址,它使用物理地址的上20位和线性地址的下12位,它们一起形成实际的物理地址,在处理器引脚上输出,并从内存芯片获取数据

现在,我们进入到获得“真实”虚拟内存的部分。当程序使用的内存超过实际可用内存时,操作系统会获取其中一些描述符的数据,并将其写入磁盘驱动器。然后清除该页内存的“当前”位。内存的物理页现在可以用于其他用途

当客户端程序尝试引用该内存时,CPU检查当前位是否已设置。如果不是,CPU将引发异常。当这种情况发生时,CPU将释放一块物理内存,如上所述,从磁盘读回当前页的数据,并用物理页的地址填充页描述符。完成所有这些后,它从异常返回,CPU重新启动导致异常开始的指令的执行——除了现在,当前位已设置,因此使用内存将起作用

您可能还需要知道一个细节:页面描述符通常被安排到页面表中,并且(重要的部分)系统中的每个进程通常都有一组单独的页面表(另一组用于操作系统内核本身)。为每个进程提供单独的页表意味着每个进程可以使用相同的线性地址集,但这些地址会根据需要映射到不同的物理地址集。通过创建两个包含相同物理地址的单独页面描述符(每个进程一个),也可以将相同的物理内存映射到多个进程。大多数操作系统都使用这一点,例如,如果运行同一程序的两个或三个副本,那么内存中实际上只有该程序的一个可执行代码副本——但它将有两个或三个指向同一代码的页面描述符集,因此所有操作系统都可以使用它,而无需为每个程序分别创建副本


当然,我简化了很多——已经有很多关于虚拟内存的完整(通常相当大)的书被写了出来。机器之间也有相当大的差异,添加了各种修饰,参数也有细微的变化(例如,页面是4K还是8K),等等。尽管如此,这至少是一个关于发生了什么的核心的总体概念(它仍然处于一个足够高的级别,可以同样适用于ARM、x86、MIPS、SPARC等)。

分页是一种存储机制,允许操作系统以页面的形式将进程从辅助存储器检索到主存储器中。在分页方法中,主存被分成固定大小的物理内存块,称为帧。帧的大小应保持与页的大小相同,以最大限度地利用主内存并避免外部碎片


我天生不相信任何用漫画书写的东西;首先,我倾向于找到更好的文档。非常好,并且有关于这个主题的更多文章的链接。它可能有点杂乱无章(为什么一开始就有分页和虚拟内存文章,而不是一篇两篇都有的文章?哦,好吧。)但它是用完整的句子和例子写的(与powerpoint幻灯片相反)。我同意,笔记留下了很多需要改进的地方……不仅仅是漫画。我想我现在基本上理解了这个概念——虚拟内存被分成2^k的页面,然后创建一个地址。地址的低n-k位用于指向页表条目,高n-k位是页的偏移量。所以你是c