多级页表如何节省内存
2016-06-16 11:25
274 查看
在谈到多级页表的优势的时候,很多地方都是这么说的:32位地址空间的分页系统,如果页面大小为4KB,则每个进程可达1M个页,假设每个页表项占用4个字节,这样每个进程仅仅页表项就占用了4MB连续的内存空间。
那么多级页表怎么节省存储空间的?
如果是2级页表,32位地址分为10,,10,12这3部分。则,页目录表1024项,每个小页表也是1024项,实际的存储空间是1024*4k(所有小页表大小)+4k(页目录大小),变大了!!!!!!
在这里我谈谈个人的理解!
实际上,一个进程并不是所有线性地址都会映射到页表中,假如所有页表都映射,的确多级页表占用了更多的内存,但是大多数地址都是没有映射的。
如果是一级页表,因为页表是一个大数组,如果在初始化的时候没有分配好足够的空间,以后要扩展的话怎么办?所以一级页表在初始化的时候便分配了全部的连续内存,即使并不是所有地址都映射到页表上。
如果是多级页表,这里以二级页表为例。在初始化的时候只需要先分配好页目录所需的连续内存,页表的内存可以到需要使用的时候再动态分配,增加了灵活性,同时节省了内存。
那么多级页表怎么节省存储空间的?
如果是2级页表,32位地址分为10,,10,12这3部分。则,页目录表1024项,每个小页表也是1024项,实际的存储空间是1024*4k(所有小页表大小)+4k(页目录大小),变大了!!!!!!
在这里我谈谈个人的理解!
实际上,一个进程并不是所有线性地址都会映射到页表中,假如所有页表都映射,的确多级页表占用了更多的内存,但是大多数地址都是没有映射的。
如果是一级页表,因为页表是一个大数组,如果在初始化的时候没有分配好足够的空间,以后要扩展的话怎么办?所以一级页表在初始化的时候便分配了全部的连续内存,即使并不是所有地址都映射到页表上。
如果是多级页表,这里以二级页表为例。在初始化的时候只需要先分配好页目录所需的连续内存,页表的内存可以到需要使用的时候再动态分配,增加了灵活性,同时节省了内存。
相关文章推荐
- javascript设计模式学习之二——this
- C#定时执行程序
- Apache shiro集群实现 (一) shiro入门介绍
- java设计模式
- Java中生成随机数的方法
- JS中sort函数排序用法实例分析
- 二叉搜索树
- eclipse,android studio 签名打包,获取MD5, SHA1(应用的签名)
- AngularJS的ng-click阻止冒泡
- spring--mybatis事务总结
- spring--事务原理
- Django视频教程 - 基于Python的Web框架(全13集)
- 关于JS的this的情况分析和总结
- Objective-C语法之KVC使用
- 【自学笔记】js JavaScript callback()执行线性动画
- @synthesize和@dynamic区别
- 【Leetcode】之Sort Colors
- java 之 23种设计模式
- 欢迎使用CSDN-markdown编辑器
- 自定义tabbarcontroller 和 双击自定义的btn 的时候使当前viewcontroller 返回最顶层