计算机组成原理——虚拟存储器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机组成原理——虚拟存储器相关的知识,希望对你有一定的参考价值。

参考技术A (1)程序员在比实际主存大得多的逻辑地址空间中编写程序

(2)程序执行时,把当前需要的程序段和数据块掉入主存,其他暂不使用的放在磁盘上

(3)执行指令时,通过硬件将逻辑地址转化为物理地址。虚拟地址高位为虚页号,低位为页内偏移地址

(4)当程序发生数据访问或程序访问失效(缺页时),由操作系统把信息从磁盘调入主存中

    (1)基本思想:

        内存被分成固定长度且长度较小的存储块(页框,实页,物理页)

        每个进程也被划分为固定长度的程序块(页,虚页,逻辑页)

        通过页表,实现逻辑地址想物理地址的转化

    (2)逻辑地址

        程序中指令所使用的地址(进程所在地址空间)

    (3)物理地址

        存放指令或数据的实际内存地址

(1)与“cache-主存”层次相比,页大小远比cache的行大小要大(windows中的页位4k)

(2)采用全相联映射方式:磁盘中的任意一个页能用射到内存中的任意一个页

    因为缺页导致中断时,操作系统从磁盘拿数据通常要耗费几百万个时钟周期。增大页大小,可以减少缺页中断

(3)为什么让软件处理“缺页”

    因为访问磁盘需要好粉几百万个时钟周期,硬件即使能立刻把地址打给磁盘,磁盘也不能立即响应

(4)为什么地址转换用硬件实现

    硬件实现地址转换可以加快指令的执行速度

(5)为什么页写会策略采用write back

    避免频繁的慢速磁盘访问

页表的首地址放在基址寄存器。采用基址寻址方式

每个页表项前面有一个虚页号:从0开始递增的序号。页表项又分为几个结构:

(1)装入位:该页是否在内存中

(2)修改位:该也在内存中是否被修改

(3)替换控制位:用于clock算法

(4)其他

(5)实页号(8进制)

(1)一次磁盘引用需要访问几次主存?2次,一次查页表,一次查物理地址。于是,把经常查的页表放到cache中。这种在cache页表项组成的页表称为TLB(Translation Lookside Buffer)

(2)TLB的页表结构:tag + 主存中的页表项

当采用全相连映射时,tag为页表项前面的虚页号。需要把tag和虚页号一一比较

当采用组相联映射时,tag被分为tag+index,虚页号的高位为tag,虚页号的低位为index,做组内索引(属于组内第几行)

    1.段式存储是根据程序逻辑,给程序分段。使得每段大小不同。这种虚拟地址划分方法适合程序设计

    2.段式存储的虚拟地址由段号和段内偏移地址组成。段式虚拟存储器到物理地址的映射通过段表实现

    3.段式虚拟存储会造成空页

    1.段页式虚拟存储,先把程序按照逻辑分成段,再把每段分成固定大小的页。

    2.程序对主存的调入调出是按照页面进行的;但他有可以根据段实现共享和保护

    3.缺点是段页式虚拟地址转换成物理地址需要查询2个表:段表和页表。段表找到相应页表的位置,页表找到想也页的位置

    4.段页式细腻地址的结构可以为以下形式:

            程序地址: 用户号(进程pid) | 段号 | 页号 | 页内偏移地址

(1)某计算机的cache块工16块,采用二路组相联映射方式,每个主存块大小为32字节,按照字节编制。则主存129号单元的主存块硬装如刀cache的组号是:(C)A、0      B、2      C、4      D、6

解:二路组相联,所以每组2块,共有16/2=8组,所以组号占3位。

      每块32字节,所以块内地址占5位。

      129转化为二进制:1000 0001:前3位为组号,100:=4

(2)假设用若干个2K4位的芯片组成一个8K8位的存储器,则地址0B1FH所在芯片的最小地址为:

解:用2片组成一行,共4行,所以片选地址占2位。片内地址有2k=211,所以占11位

      0B1FH:000|0 1|011 0001 1111 这三段为前缀,片选地址,片内地址。

      该片芯片的最小地址是片内地址全0:000|0 1|000 0000 0000 = 0800H

(3)某计算机的主存地址空间大小为256MB,按字节编址,指令cache和数据cache分离,均有8个cache行,每行大小为64B,数据cache采用直接映射方式,现有两个程序A,B对数组int a[256][256]进行遍历,程序A按行遍历,程序B按列遍历。假定int类型数据用32位补码表示,数组a按行优先方式存储,其地址为320(十进制)。

问:(1) 若不考虑cache一致性维护和替换算法所需的控制位,则数据cache的总容量占多少?

      (2) 数组元素a[0][31]和a[1][1]各自所在主存块对应的cache行号分别为多少(cache从0行开始)?

      (3)程序A和B的数据访问命中率各自为多少?哪个程序的执行时间更短?

解:(1) 因为cache的总容量是cache每行的数据存储大小+tag位+数据是否有效位+其他一致性控制位。

          主存地址空间256MB,占28位。直接映射方式,8行,行号占3位。每行64B,所以块内地址占6位,因此,tag占28-3-6=19位

          每行有一个数据有效位。因此,cache共(19+1+648)8 = 532字节

      (2) 因为int类型占32位,所以一个int占4B。a[0][31] = 320 + 314 = 444 a1 = 320 + 4(256+1) = 1348。

          块内地址占6位,直接映射下行号占3位,因此444 = 110 | 111100,所以行号为6

          1348 = 10 | 101 | 000100,所以行号为5

      (3) 因为1行cache占64B,每个int数占4B,所以一行有16个数。第一个数会因cache缺失而不命中,然后调入cache。,使得后面的15个int访问全部命中。所以命中率为1516 对于程序B,每次调入16个数,小于数组每行的128个元素,因此每次都不会命中,命中率为0

Linux 操作系统原理 — 内存 — 物理存储器与虚拟存储器


目录


文章目录


Linux 内存管理全貌

Linux

物理存储器

见《​​计算机组成原理 — 存储系统​​》。

虚拟存储器

在早期的计算机系统中,程序员会直接对主存的物理地址进行操作,这种编程方式显然会出现多进程操作共享内存空间的数据一致性问题。而且由于当初不存在虚拟存储器的概念,所以 CPU 寻址宽度就成为了内存容量的极限。显然,直接操作主存的物理地址不是一个好的办法。

为了解决这些问题,现代计算机系统通过软(操作系统)、硬件结合的方式,把内存和外存从逻辑上统一成了一个整体,这就是虚拟存储器,或称为虚拟存储系统,简称虚拟内存。

虚拟存储器解决了三个根本需求:


  1. 确保可以运行存储空间需求比实际内存空间大的用户程序​。
  2. 确保为用户程序分配的内存空间是连续的​。
  3. 确保多个用户程序之间的内存空间互相隔离​。

为此,虚拟机存储器提供了三个重要的能力:


  1. 内-外存空间交换能力​:利用局部性原理,从设计上,把内存当成外存的高速缓存,在内存中只存储活动数据,并根据需要在 “内-外” 存之间来回传送数据。通过这种数据交换的能力,即高效地利用了内存,同时也内存的容量扩大至内-外存容量的总和(注:实际上通常不会将全部外存都加入交换)。
  2. 虚拟地址空间编址能力​:为每个应用程序提供一致的虚拟地址空间。
  3. 虚拟地址空间隔离能力​:保护每个应用程序的虚拟地址空间是互相隔离的。

为了提供上述三个重要的能力,虚拟存储器实现了两个关键技术:


以上是关于计算机组成原理——虚拟存储器的主要内容,如果未能解决你的问题,请参考以下文章

计算机组成原理3.7虚拟存储器

计算机组成原理3.7虚拟存储器

Linux 操作系统原理 — 内存 — 物理存储器与虚拟存储器

jvm虚拟机原理1

计算机组成原理——存储层次结构

组成原理-存储Cache 和页式虚拟存储器