在虚拟地址中使用偏移

问题描述:

据我了解,CPU始终会生成一个由2部分组成的虚拟地址 - 页码和页偏移量。页码用于索引页表(相应的映射给出了RAM中帧的起始地址)。现在,请考虑以下问题。考虑到机器的字大小是4字节,并且页面大小等于帧大小= 4096字节。在虚拟地址中使用偏移

  1. 假设页码为4,偏移量为3.然后逻辑内存中的页面映射到虚拟内存中的第8帧。这意味着帧的起始地址是8.
  2. 现在,每个帧将包含4096/4 = 1024个字。偏移量是否意味着框架中的某个单词,因为机器每次总是会读取一个单词?我的意思是,这是否意味着第8帧中的第3个字?
  3. 是给予CPU或整个框架的特定字吗?如果是前者,那么为什么每个人都会谈论以帧和页面而不是文字进行转移?
  4. 假设发生页面错误。这意味着特定页面不在内存中。这是否意味着映射的物理地址包含其他页面?在无效位为1的情况下映射甚至存在吗?

有人可以为我清理一些事吗?有一刻我似乎明白了,接下来,我进入迷宫。

分页的关键在于它处理内存的“块”。
它是一个映射函数,它将虚拟地址转换为物理地址,但不是逐个地址的地址。相反,“块”连续虚拟地址被翻译在一起到另一个连续现在是物理地址的“块”。
您可以将其视为内存“块”的“翻译”或“洗牌”。

Shuffing of "chunks" of memory

为 “块”,正确的说法是页。
如果尝试做一个示例映射,可以看到每个页面都包含一组地址,这些地址都具有特殊性:当从虚拟传递到物理时,它们的低位不会更改。高位反而是任意的。
地址值的这种二分法定义了偏移量页面/帧编号
偏移量是不经过任何翻译的地址值的一部分。 在4KiB的页面有4096点的地址,每一个与它的偏移,所以偏移具有大小日志 (4096)= 日志 (2 )= 12 * 日志 (2)= 12比特。
简而言之,页面大小决定了偏移大小。

它是需要将内存分成页面而不是单词或字节,或者在另一个视图中需要将地址分组以翻译成页面。
没有页面,用于翻译的元数据用行话表示各级页面表将占用更多的内存,即翻译的内存!

偏移是相对它们的页面/帧由于它们的定义方式:在框架8的偏移量1024(十六进制400h的)指的地址8000H + 400H = 8400H;如果页面映射到帧12,则偏移量1024在帧开始之后仍然是1024个字节,即0c000h + 400h = 0c400h。

作为一个地址,通常偏移表示字节,事件在架构,其中字节不是寻址的。然而,这不是一个标准惯例,要知道偏移量是否表示字或字节(例如,如果帧0的偏移10是字节40或字节10),请检查体系结构手册。第一部分通常致力于建立一个在本书中使用的术语。

寻呼发生在CPU访问内存之前,你可以把它作为一个高层次的过程。访问存储器/总线的单元基本不知道它,因此CPU读取指令要求它读取的数据(字,字节等)。
人们谈论,因为页面是可以表征
最小单位移动页面。
您可以将页面标记为不存在,但不是一个字。您可以将页面设置为只读而不是单词。
如果你需要映射,比如16个字节,你仍然需要映射整个页面,因为16个字节不可表征。所以我们不妨读一整页。

当一个页面故障发生时则意味着访问的页面是,在页表中的任何水平的,非本。
这可能意味着很多事情,从现在位已被简单地切换(页面仍在那里),事实上,页面已被保存到磁盘并在内存中归零。
因为映射函数是,这意味着每一个值是一个有效的值时,CPU需要一种方法来知道什么时候值无效。
存在位执行以下操作:告诉CPU必须不执行转换,而是必须引发异常。
操作系统使用此异常来通知何时需要页面,它不需要将映射重新分配给另一个页面或清零内存。
当人们说一个页面被移除它们意味着它从映射中被移除,所有现代操作系统也将页面归零,以防止信息泄漏到其他进程。

所以如果一个物理框架没有映射它并不意味着另一个进程中的另一个页面正在映射它,它只是表示该地址范围不能被访问。
如上所述,操作系统有很多原因需要执行此操作,包括保护。

你有些东西倒退了。操作系统为每个进程定义一个逻辑地址空间。逻辑地址空间被分成称为PAGES的内存单元。

操作系统在逻辑上将地址页面映射到物理页面帧或辅助存储如果操作系统将页面映射到辅助存储,则使用虚拟内存。

在过去的日子里,所有进行逻辑内存转换的系统都会做虚拟内存映射到辅助存储。这就是为什么术语虚拟内存翻译和逻辑内存翻译经常被混淆的原因。现在,在没有虚拟内存的情况下进行逻辑翻译变得越来越普遍。

所有通过进程访问的地址都是逻辑地址。处理器将逻辑地址转换为页面帧。如果逻辑页面存在但映射到辅助存储,则访问该页面会触发页面错误。操作系统必须处理故障,将逻辑/虚拟页面重新映射到物理页面框架;将来自辅助存储器的数据加载到页面框架;并重新启动说明。

  1. 假设页面数为4,偏移为3。然后第4页中的逻辑存储器映射在虚拟存储器到框架8。这意味着帧的起始地址是8.

这没有任何意义。逻辑页面映射到辅助存储时是虚拟的。如果页码为4的第四逻辑页面可以:

一个)具有在所有(访问冲突地图没有映射)

b)至物理页帧

C)映射到一个辅助存储(虚拟内存)

  1. 现在,每个帧将包含4096/4 = 1024个字。偏移量是否意味着框架中的某个单词,因为机器每次总是会读取一个单词?我的意思是,这是否意味着第8帧中的第3个字?

在几乎所有的(如果不是全部),目前的处理器没有记忆单词;只有字节。系统总线读取存储器,总线的“字长”可能(通常是)与处理器的“字长”不同。

  1. 给CPU或整个帧赋予特定的字吗?如果是前者,那么为什么每个人都会谈论以帧和页面而不是文字进行转移?

该进程看到与正在执行的指令相关的大小的传输。操作数大小可以大于或小于机器字。总线将数据传输到内存,并且该大小通常与机器的字大小不同。

假设发生页面错误。这意味着特定页面不在内存中。这是否意味着映射的物理地址包含其他页面?映射是否存在于无效位为1的情况下。

我给出了上述三种可能的逻辑页面映射。这些如何表示是系统特定的。有些系统使用2位来表示a,b或c。其他人使用一位来表示(b)并要求操作系统确定它是(a)还是(c)。

是否触发页面错误取决于页表的状态。

页面错误通常意味着页面框架不在内存中。但是,物理页框经常可能在内存中,但不能映射到页表中(软页面错误)。 (这发生在操作系统具有未映射的页面框架以释放某些但未重新分配它们时)。在这种情况下,操作系统只需更新页面表格以指向页面框架并重新启动指令(不需要从辅助存储装载)。