位置: 编程技术 - 正文

详解Linux系统内存寻址的分页机制(linux系统讲解)

编辑:rootadmin

推荐整理分享详解Linux系统内存寻址的分页机制(linux系统讲解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux那些事儿,linux系统的样子,linux内核介绍,linux系统chia,linux系统chia,linux系统中,linux系统的样子,linux ne,内容如对您有帮助,希望把文章链接给更多的朋友!

分页机制在段机制之后进行,以完成线性—物理地址的转换过程。段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址。

硬件中的分页

分页机制由CR0中的PG位启用。如PG=1,启用分页机制,并使用本节要描述的机制,把线性地址转换为物理地址。如PG=0,禁用分页机制,直接把段机制产生的线性地址当作物理地址使用。分页机制管理的对象是固定大小的存储块,称之为页 (page)。分页机制把整个线性地址空间及整个物理地址空间都看成由页组成,在线性地址空间中的任何一页,可以映射为物理地址空间中的任何一页(我们把物理空间中的一页叫做一个页面或页框(page frame))。

使用4K字节大小的页。每一页都有4K字节长,并在4K字节的边界上对齐,即每一页的起始地址都能被4K整除。因此,把4G字节的线性地址空间,划分为1G个页面,每页有4K字节大小。分页机制通过把线性地址空间中的页,重新定位到物理地址空间来进行管理,因为每个页面的整个4K字节作为一个单位进行映射,并且每个页面都对齐4K字节的边界,因此,线性地址的低位经过分页机制直接地作为物理地址的低位使用。

为什么使用两级页表

假设每个进程都占用了4G的线性地址空间,页表共含1M个表项,每个表项占4个字节,那么每个进程的页表要占据4M的内存空间。为了节省页表占用的空间,我们使用两级页表。每个进程都会被分配一个页目录,但是只有被实际使用页表才会被分配到内存里面。一级页表需要一次分配所有页表空间,两级页表则可以在需要的时候再分配页表空间。

两级页表结构

两级表结构的第一级称为页目录,存储在一个4K字节的页面中。页目录表共有1K个表项,每个表项为4个字节,并指向第二级表。线性地址的最高位(即位~位)用来产生第一级的索引,由索引得到的表项中,指定并选择了1K个二级表中的一个表。

两级表结构的第二级称为页表,也刚好存储在一个4K字节的页面中,包含1K个字节的表项,每个表项包含一个页的物理基地址。第二级页表由线性地址的中间 位(即位~位)进行索引,以获得包含页的物理地址的页表项,这个物理地址的高位与线性地址的低位形成了最后的物理地址,也就是页转化过程输出的物理地址。

页目录项

第~位是位页表地址,由于页表地址的低位总为0,所以用高位指出位页表地址就可以了。因此,一个页目录最多包含个页表地址。

第0位是存在位,如果P=1,表示页表地址指向的该页在内存中,如果P=0,表示不在内存中。

第1位是读/写位,第2位是用户/管理员位,这两位为页目录项提供硬件保护。当特权级为3的进程要想访问页面时,需要通过页保护检查,而特权级为0的进程就可以绕过页保护。

第3位是PWT(Page Write-Through)位,表示是否采用写透方式,写透方式就是既写内存(RAM)也写高速缓存,该位为1表示采用写透方式

第4位是PCD(Page Cache Disable)位,表示是否启用高速缓存,该位为1表示启用高速缓存。

第5位是访问位,当对页目录项进行访问时,A位=1。

第7位是Page Size标志,只适用于页目录项。如果置为1,页目录项指的是4MB的页面,请看后面的扩展分页。

第9~位由操作系统专用,Linux也没有做特殊之用。

页面项

的每个页目录项指向一个页表,页表最多含有个页面项,每项4个字节,包含页面的起始地址和有关该页面的信息。页面的起始地址也是4K的整数倍,所以页面的低位也留作它用。

第~位是位物理页面地址,除第6位外第0~5位及9~位的用途和页目录项一样,第6位是页面项独有的,当对涉及的页面进行写操作时,D位被置1。

4GB的内存只有一个页目录,它最多有个页目录项,每个页目录项又含有个页面项,因此,内存一共可以分成×=1M个页面。由于每个页面为4K个字节,所以,存储器的大小正好最多为4GB。

详解Linux系统内存寻址的分页机制(linux系统讲解)

线性地址到物理地址的转换

位线性地址到物理地址的转换

1.CR3包含着页目录的起始地址,用位线性地址的最高位A~A作为页目录的页目录项的索引,将它乘以4,与CR3中的页目录的起始地址相加,形成相应页表的地址。

2.从指定的地址中取出位页目录项,它的低位为0,这位是页表的起始地址。用位线性地址中的A~A位作为页表中的页面的索引,将它乘以4,与页表的起始地址相加,形成位页面地址。

3.将A~A0作为相对于页面地址的偏移量,与位页面地址相加,形成位物理地址。

扩展分页

从奔腾处理器开始,Intel微处理器引进了扩展分页,它允许页的大小为4MB。

在扩展分页的情况下,分页机制把位线性地址分成两个域:最高位的目录域和其余位的偏移量。

页面高速缓存

由于在分页情况下,每次存储器访问都要存取两级页表,这就大大降低了访问速度。所以,为了提高速度,在中设置一个最近存取页面的高速缓存硬件机制,它 自动保持项处理器最近使用的页面地址,因此,可以覆盖K字节的存储器地址。当进行存储器访问时,先检查要访问的页面是否在高速缓存中,如果在, 就不必经过两级访问了,如果不在,再进行两级访问。平均来说,页面高速缓存大约有%的命中率,也就是说每次访问存储器时,只有2%的情况必须访问两级分页机构。这就大大加快了速度。

Linux中的分页机制

Linux使用了一个适合位和位系统的分页机制。

页全局目录

页顶级目录

页中间目录

页表

页全局目录包含若干页上级目录的地址,页上级目录又依次包含若干页中间目录的地址,而页中间目录又包含若干页表的地址。每一个页表项指向一个页框。线性地址因此被分成五个部分。图中没有显示位数,因为每一部分的大小与具体的计算机体系结构有关。

对于没有启用物理地址扩展的位系统,两级页表已经足够了。从本质上说,Linux通过使“页上级目录”位和“页中间目录”位全为0,彻底取消了页上级目录和页中间目录字段。不过,页上级目录和页中间目录在指针序列中的位置被保留,以便同样的代码在位系统和位系统下都能使用。内核为页上级目录和页中间目录保留了一个位置,这是通过把它们的页目录项数设置为1,并把这两个目录项映射到页全局目录的一个合适的目录项而实现的。

启用了物理地址扩展的 位系统使用了三级页表。Linux的页全局目录对应× 的页目录指针表(PDPT),取消了页上级目录,页中间目录对应×的页目录,Linux的页表对应×的页表。

最后,位系统使用三级还是四级分页取决于硬件对线性地址的位的划分。

总结

这里我们不讨论代码实现,只关注原理。从上面的讨论可以看到分页机制主要依赖硬件的实现。Linux采用的四级页表只是为了最大化兼容不同的硬件实现,单就IA架构的CPU来说,就有多种分页实现,常规分页机制,PAE机制等。

我们虽然讨论的是Linux的分页机制,实际上我们用了大部分篇幅来讨论Intel CPU的分页机制实现。因为Linux的分页机制是建立在硬件基础之上的,不同的平台需要有不同的实现。Linux在软件层面构造的虚拟地址,最终还是要通过MMU转换为物理地址,也就是说,不管Linux的分页机制是怎样实现的,CPU只按照它的分页实现来解读线性地址,所以Linux传给CPU的线性地址必然是满足硬件实现的。例如说:Linux在位CPU上,它的四级页表结构就会兼容到硬件的两级页表结构。可见,Linux在软件层面上做了一层 抽象,用四级页表的方式兼容位和位CPU内存寻址的不同硬件实现。

在Linux服务器上安装使用Memcache 服务器端主要是安装memcache服务器端,目前的最新版本是memcached-1.3.0。下载:

Linux下sed命令使用全解析 一、Sed简介Sed:StreamEditor流式编辑器又称行编辑器,每次只编辑一行。Sed工作是在模式空间中进行的,并不操作源文件。对源文件无危害。二、Sed使用

Linux系统中用户管理的基本命令整理 认识一下linux的权限管理其实认的不是你的用户名和密码而是识别的你的UID和GID说白了,就是你的用户ID和群组ID复制代码代码如下:cat/etc/passwd/pproot:x:0:0:

标签: linux系统讲解

本文链接地址:https://www.jiuchutong.com/biancheng/353308.html 转载请保留说明!

上一篇:深入理解Linux内存寻址的分段机制(深入理解linux内核架构)

下一篇:在Linux服务器上安装使用Memcache(linux在服务器领域的应用状况)

  • 广告牌制作加盟厂家
  • 未分配利润与净利润不相等
  • 合资公司注册成立流程
  • 季度不满30万免增值税如何结转
  • 关联企业往来款 利息
  • 材料成本差异借贷方向
  • 应收账款未收到回函的替代程序
  • 企业购买的商业保险赔偿多少
  • 电子承兑背书失败是怎么回事
  • 仓库产品出库到货时间
  • 以前年度长期股权投资漏记调整
  • 委托收款被拒绝后要怎么做
  • 租房提前退租违约金国家标准
  • 固定资产进项抵扣新政策2021
  • 企业所得税收入大于增值税收入的原因
  • 工会经费用于什么
  • 会计人员必备的知识和技能
  • 当期销项税额等于什么乘以什么
  • 失控发票不处理的后果
  • 一般纳税人印花税减半征收吗
  • 企业购买原材料生产时企业还没有赚到钱
  • 标准差超过多少不合理
  • 增值税留抵税额账务处理
  • 委托贷款利息收入增值税
  • 小企业销售费用包括
  • 机打发票怎么申请流程
  • 暂时性差异的转回期间如何确定
  • 虚增利润
  • 联想昭阳k41笔记本
  • 华为手机找回删除的通讯录号码
  • 在windows 10中任务栏()
  • 增值税发票红字发票怎么开具
  • 海关交税标准表
  • 短期借款会计分录例题
  • 企业无偿借款的税务处理
  • pycharm vue
  • 增值税和所得税区别
  • vue3动态路由权限
  • box-sizing:border-box的理解和作用
  • pytorch基础
  • 报废机器设备如何缴纳增值税
  • 外籍专家劳务费
  • 财务报表季报应付职工薪酬是指三个月工资累计还是
  • 劳务公司承接项目的方案怎么写
  • mongodb导入数据三种方式
  • 货物样品出口
  • 触发器失败是什么意思
  • 知道收入不知道成本
  • 清卡和抄报税是什么意思
  • 融资租赁的服务费是什么票
  • 印花税的征税对象有哪些
  • 增值税版本升级
  • 债务现金流量是正还是负
  • 奖励罚款怎么做分录
  • sql事务的例子
  • mac下安装anaconda
  • 苹果macbook怎么切换系统
  • 数据中心为什么要建在山洞里
  • 电脑如何进入bios选择u盘启动
  • windows active directory功能
  • win8自启动在哪儿设置
  • ubuntu 上不了网
  • win7系统怎么打日语
  • 将Bitmap用Base64转码成字符串,再解码回来出现黑色背景的问题原因及解决办法。
  • python cx_Oracle的基础使用方法(连接和增删改查)
  • tensorflowoom
  • Jquery操作Ajax方法小结
  • 复制文件到c盘需要管理员权限
  • 文本左右对齐排版怎么弄
  • js过滤字符串中的特殊字符
  • javascript基础笔记
  • html微信
  • unity-3d
  • js怎么判断日期大小
  • 关于房地产企业所得税涉税处理表述正确的有
  • 国家税务总局令第43号公告
  • 可以抵扣的消费税项目
  • 邮政银行开税票要什么材料
  • 吉林省会考成绩查询入口网站官网
  • 如果我是科学家我会发明什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设