清华大学操作系统OS学习(五)——物理内存管理:非连续内存分配

非连续内存分配

分配给一个程序的物理地址空间是非连续的。

优点:更好的内存利用和管理、允许共享代码与数据、支持动态加载和动态链接。

缺点:带来额外的管理开销:如何建立虚拟地址和物理地址之间的转换。两种实现:软件方案和硬件方案。

两种硬件方案:分段、分页。

 

一、段式存储管理

段表示访问方式和存储数据等属性相同的一段地址空间。

1、分段机制:程序的分段地址空间设计,寻址方案。

把逻辑地址空间分散到多个物理地址空间,堆-→堆,运行栈-→运行栈,程序数据-→数据,运行exe—>代码和库

2、寻址方案:

一维连续逻辑地址,把一个段看成一个内存块。程序访问内存地址分为两部分,段的寻址(段号segment number)+ 段内偏移的寻址(addr)

段寄存器+地址寄存器实现方案(x86)

单地址实现方案(s+addr合在一起)

3、硬件实现方案

二、页式存储管理

1、划分物理内存至固定大小的帧(frame,物理帧),逻辑地址空间也要到相同大小的页(page,逻辑页)。

两者大小要相等,为2的幂数,如512,4096,8192。

建立方案,change pages to frames,需要页表和MMU/TLB(快表,完成对MMU的缓存)。

2、过程:首先CPU得到逻辑地址,逻辑地址分成两块,一块表示页号,一块表示页内偏移地址。有一个页表,页表的索引就是页号,内容是帧号。我们可以通过页号查找到对应的帧号,帧号加上偏移,就能得到物理地址,找到物理地址对应的内存空间。

3、特点:页内偏移大小一定,不需要考虑不同段大小不一致,硬件更易管理;PAGE的地址空间大小和FRAME的地址空间大小是不同的,一般前者更大,页是虚拟内存,连续,帧是不连续的物理内存,不是所有的页都有对应的帧,装不下时会用虚拟内存(以后会讲)。有助于减少碎片。

三、页表概述(TLB)

1、页表结构

大数组,索引是page number,内容frame number

每个运行的程序都有一个页表,属于程序运行状态,会动态变化,PTBR(页表基址寄存器)。

页表项中除了frame number 还有标志位flags检查是否存在地址, including dirty bit(修改位), resident bit (是否存在该对应的物理地址)and clock/reference bit(引用位).

2、性能问题:

①时间开销:页表太大不能放到CPU中,只能放内存,每次寻址一个内存单元需要2次内存访问,获取页表项和访问数据

②空间开销:1个页表可能非常大,64位机器,寻址空间是2的64次幂,一个页size如果只有1024 1k,要建立一个极大的页表=254,存不下。○2n个程序对应n个页表,页表个数非常大。

③两种解决方法:缓存(caching)和间接(indrection)访问

 

四、快表和多级页表

1、快表(TLB)

在CPU的MMU中,存在一个cache叫TLB(translation look-aside Buffer ),缓存近期访问的页帧转换表项。首先CPU根据逻辑地址查快表TLB(key=p, value=f,由于使用关联内存(associate memory)实现,具备快速访问性能,很少超过64个表项,每个对应一个页面的相关信息。)如果命中,FRAME很快被获取,如果未命中MISS,则去查页表并更新对应的表项到TLB中。

TLB的缺失不会很大,32位一个页4K,访问4K次miss一次,可以接受。写程序时注意具有局部性,把频繁的访问集中在一个区域。以避免对内存的访问。另外,还需要注意,miss后,更新是硬件完成(x86),还是OS完成(现代机器,MIPS, SPARC, HP PA)。

TLB可以让寻址的时间开销得到极大的降低。

2、二级/多级页表

将逻辑地址的页号分成多个部分,如下图,分成一级页表的页号p1和二级页表的页号p2,使得将对一个大地址范围的寻址拆分为对几个小的页表的寻址。

3、为什么说二级/多级页表可以节省空间?

第一,如果一级页表中的第一个PTE(分页)是空的,那么相应的二级页表就根本不会存在,这代表着一种巨大的潜在节约,因为对于一个典型的程序,比如4GB,8GB的虚拟地址空间的大部分都将是未匹配的。

第二,只有一级页表才需要总是在主存中;虚拟存储器系统可以在需要时创建,页面掉入或调出二级页表,这就减少了主存的压力;只有最经常使用的二级页表才需要缓存在主存中,这种离散的存储方式是非常便利的。这就是多级页表的一个根本性的优点:可以离散存储。(单级页表为了随机访问必须连续存储,如果虚拟内存空间很大,就需要很多页表项,就需要很大的连续内存空间,但是多级页表不需要)

二级表只是从进程的角度来看,为进程节省了页表项(其实所有的页表存储空间增大了)。二级模式通过只为进程实际使用的那些虚拟内存区请求页表来减少页表,就是进程未使用的页暂时可以不用为其建立页表,因为如果使用一级页表的话,你就必须为所有的4G范围内分配页表,不能细分。每个活动进程必须有一个分配给它的页目录,不过没必要马上为进程的所有页表都分配ram,只有在进程实际需要一个页表时才给该页表分配ram,这样就提高了效率。

五、反置页表

1、折中方案——-哈希表

用硬件加速,建立哈希表来实现反向页表。

对页号做哈希计算,页i放在表中funchash(i)的位置,求得f(i)作为页寄存器表的索引获取对应的页寄存器再检查标签是否有i。

2、页寄存器方案的特征

优点:本身物理存址小省空间,不再是每个应用程序都要page table了,整个系统只用一个。

缺点:需求高,有高效哈希函数和解决冲突的机制,要硬件软件配合

六、段页式存储管理

1、段页式存储管理

在段式存储管理基础上,给每个段加一级页表

逻辑地址:段号+若干个页号+页内偏移

物理地址:帧号+页内偏移

2、段页式存储管理中的内存共享

通过指向相同的页表基址,实现进程间的段共享

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值