内存管理之分页和页表

简单的分页:内存被划分为许多大小相等的页框;每个进程被划分成许多大小与页框相等的页;要装入一个进程,需要把进程包含的所有页都装入内存中不一定连续的某些页框中。优势:没有外部碎片。缺点:有少量的内部碎片。

简单的分段:每个进程被划分为许多段;要装入一个进程,需要把进程中包含的所有段装入内存内不一定连续的某写动态分区中。优势:没有内部碎片;相对于动态分区提高了内存利用率,减少了开销。缺点:存在外部碎片。

分页

内存被划分为大小固定,相等的块,且相对比较小,每个进程也被分为分为同样大小的小块(页),那么进程中称为页的块可以分配到内存中称为页框的可用块。

上图说明了页和页框的用法。在某个给定时刻,内存中的某些页框正被使用,某些页框是空闲的,操作系统维护空闲页框的列表。存储在磁盘上的进程A由4页组成。装入这个进程时,操作系统查找4个空闲页框,并将进程A的4页装入这4个页框中。进程B包含3个页,进程C包含4个页,他们一次被装入。然后进程B被挂起并被换出内存。此后,内存中的所有进程被阻塞,操作系统需要换入一个新进程,即D进程,它由5个页组成。

现在没有足够的页框来保存进程D,这会足之操作系统加载该进程吗?答案是否定的,因为可以使用逻辑地址来解决这个问题。这时候仅有一个简单的基址寄存器是不够的,操作系统需要为每个进程维护一个页表。页表给出了该进程的每页所对应页框的位置。在程序中,每个开始处的位置,处理器把它转换为一个物理地址。在分页中,逻辑地址到物理地址的转换任然由处理器硬件完成,且处理器必须知道如何访问当前进程的页表。

继续前面的例子,进程D的5也被装入页框4,5,6,11,12。

页表

虽然应用程序操作的对象是映射到物理内存上的虚拟内存。但是处理器直接操作的却是物理内存。所以当应用程序访问一个虚拟地址时,首先必须将虚拟地址转化成物理地址,然后处理器才能解析地址访问请求。地址的转换工作需要通过查询页表才能完成,概括的讲,地址转换需要讲虚拟地址分段,使每段虚拟地址都作为一个索引指向页表,而页表项则指向下一级别的页表或者指向最终的物理页面。

linux中使用三级页表完成地址转换。利用多级页表能够节约地址转换需占用的存放空间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值