1 分页方式中可以每个进程分配一个页表吗-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分页方式中可以每个进程分配一个页表吗

麦辣鸡腿堡 来源:程序猿阿星 作者:程序猿阿星 2023-10-09 17:06 次阅读

在分页方式下,每个进程分配一个页表会有什么问题?

不卖关子了,每个进程分配一个页表会有空间上的缺陷,因为操作系统上可以运行非常多的进程,那不就意味着页表数量非常多!

1B(Byte 字节)=8bit, 1KB (Kilobyte 千字节)=1024B, 1MB (Megabyte 兆字节简称“兆”)=1024KB, 1GB (Gigabyte 吉字节 又称“千兆”)=1024MB

以32 位的环境为例,虚拟地址空间范围共有 4GB,假设一个页的大小是 4KB(2^12),那么就需要大约 100 万 (2^20)个页,每个「页表项」需要 4 个字节大小来存储,那么整个 4GB 空间范围的映射就要有 4MB 的内存来存储页表。

4MB看起来不大,但是数量上来了就很恐怖了,假设 100 个进程的话,就需要 400MB 的内存来存储页表,这是非常大的内存了,更别说 64位的环境了。

为了解决空间上的问题,在对分页方式的基础上,进行优化,出现了多级页表方式

多级页表

在前面我们知道了,分页方式在32位环境下,以每页4KB来计算,一共有100万页,「页表项」需要 4
个字节大小来存储,一个页表包含100万个「页表项」,那么每个进程的页表需要占用4MB大小,多级页表要如何解决这种问题呢?

在页表的基础上做一次二级分页,把100万「页表项」分为一级页表「1024个页表项」,「一级页表项」下又关联二级页表「1024个页表项」,这样一级页表的1024个页表项就覆盖到了4GB的空间范围映射,并且二级页表按需加载,这样页表占用的空间就大大降低。

做个简单的计算,假设只有 20% 的一级页表项被用到了,那么页表占用的内存空间就只有 4KB(一级页表) + 20% * 4MB(二级页表)=0.804MB,这对比单级页表的 4MB 是不是一个巨大的节约?

图片

接着思考,在二级的基础上是不是又可以继续分级呢,能分二级,必然也能分三级、四级,在64位操作系统是做了四级分页,分为了四个目录,分别是

全局页目录项

上层页目录项

中间页目录项

页表项

图片

TBL

多级页表虽然解决了空间上的问题,但是我们发现这种方式需要走多道转换才能找到映射的物理内存地址,经过的多道转换造成了时间上的开销。

程序是局部性的,即在一段时间内,整个程序的执行仅限于程序的某一部分。相应的,执行所访问的存储空间也局限于某个内存区域。

操作系统就利用这一特性,把最多使用的几个页表项放到TBL缓存, CPU 在寻址时,会先查 TLB,如果没找到,才会继续查常规的页表,TLB的命中率其实很高的,因为程序最常访问的页就那么几个。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    3019

    浏览量

    74002
  • 操作系统
    +关注

    关注

    37

    文章

    6801

    浏览量

    123282
收藏 人收藏

    评论

    相关推荐

    初学者Linux操作系统的基本结构

    的段后与偏移值进行求和.这个地址(在分页机制开启的前提下),会表示页面,通过寻找到的
    发表于 10-01 19:16

    嵌入式Linux内存管理的些知识点总结

    到硬盘,从硬盘上加载被请求的内存, 然后再重新启动您的进程。这样,每个进程都获得了自己可以使用的地址空间,
    发表于 11-20 14:46

    嵌入式Linux内存管理的些知识点总结

    转存到硬盘,从硬盘上加载被请求的内存, 然后再重新启动您的进程。这样,每个进程都获得了自己可以使用的地址空间,
    发表于 03-24 09:31

    页面与地址变换结构

    进行标号,从0#开始。在为进程分配内存空间时,以为单位,每个内存的块存放一页用户作业。只要内
    发表于 08-02 06:14

    Pads Logic 分页符号图编号显示问题

    请教各位大师Pads Logic VX2.6的问题,分页符号如果打开图编号,有时候就叠在起了,如图所示,很难看,这个能设置吗? 谢谢
    发表于 07-08 11:08

    浅谈对计算机系统内存寻址的理解

    转换前地址的话,那么线性地址则对应了硬件式内存的转换前地址。用分页方法来分配和管理实存。即把整个主存分成大小相等的存储块,可装入作业的任何一页。这样
    发表于 08-22 08:00

    Linux内存系统: Linux 内存分配算法

    分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域3) 组织结构· 把所有的空闲分组为 11
    发表于 08-24 07:44

    Linux内存系统---走进Linux 内存

    每个进程都有完全属于自己的,独立的,不***扰的内存空间;用户态的程序就不能随意操作内核地址空间,具有定的安全保护作用;内核态线程共享内核地址空间; 3、内存地址——MMU 地址转换· MMU
    发表于 08-26 08:05

    鸿蒙内核源码分析(内存分配篇):内存的分配方式有哪些

    解决物理内存满足不了多进程对内存的需要。虚拟内存可以远大于物理内存。虚拟空间是进程层面的概念,每个进程都有
    发表于 11-20 10:07

    鸿蒙内核源码分析(内存分配篇):内存的分配方式有哪些

    (); } else {return NULL; }}代码可以看出初始化对物理内存做了几个动作:1.对整个物理内存进行了分页,每页框4K,存放在大
    发表于 11-20 17:34

    WCDMA系统物理信道的功率分配方式

    WCDMA系统物理信道的功率分配方式 如下图所述,每个信道在调制前都有系数对它进行功率大小控制。
    发表于 06-15 12:35 2126次阅读

    操作系统的分页存储基本概念

    非连续分配允许程序分散地装入到不相邻的内存分区,根据分区的大小是否固定分为分页存储管理方式
    的头像 发表于 03-15 16:36 4755次阅读

    由于MySQL分页导致的线上事故

    其实对于我们的 MySQL 查询语句来说,整体效率还是可以的,该有的联查询优化都有,该简略的查询内容也有,关键条件字段和排序字段该有的索引也都在,问题在于他一页一页
    的头像 发表于 05-10 15:31 787次阅读

    MMU多级映射过程

    物理页面大小级地址总线宽度不同,的级数也不同。以AArch64运行状态,4KB大小物理页面,48位地址宽度为例,映射的查询过程如图
    的头像 发表于 11-26 16:28 955次阅读
    MMU多级<b class='flag-5'>页</b><b class='flag-5'>表</b>映射过程

    mybatis逻辑分页和物理分页的区别

    MyBatis是开源的Java持久层框架,它与其他ORM(对象关系映射)框架相比,具有更加灵活和高性能的特点。MyBatis提供了两种分页方式,即逻辑
    的头像 发表于 12-03 14:54 897次阅读