Linux——页表的分页机制

news2024/12/25 17:41:03

目录

一.相关概念(页帧、页框、缺页中断)

二.页表分页机制

(一).为什么采用两级页表

(二).两级页表分页机制

①原理:

②映射原理计算


一.相关概念(页帧、页框、缺页中断)

在linux中,创建进程时会同时创建一个mm_struct代表虚拟地址空间,再通过页表和MMU映射到内存(即物理内存)中。

首先,我们需要知道的是,linux的磁盘是以4KB为一个基本存储单元,即页帧。内存也是以4KB为基本存储单元,即页框linux通过struct Pages结构体管理页框,页框总数是内存大小/4,因此linux中使用Pages结构体数组管理内存。

CPU运行进程前会将程序加载进内存。即磁盘数据写入内存中对应的页框,struct Pages数组对应下标位置的Pages结构体进行记录,页表再填充相关映射关系,也就是缺页中断。一切准备工作做好之后才会运行进程。

二.页表分页机制

(一).为什么采用两级页表

linux的页表分页采用两级页表分页机制

而没有采用单级页表直接映射到物理内存是基于空间大小的考虑。

以32位机器为例,页框的个数为4GB / 4KB也就是2^20次方个,假设一个表项占有4Byte,总共有4MB的连续空间需要使用,也就是说,每次调度进程时,这4MB的空间都要被使用。

而两级分页因为存在第二级映射,虽然两级页表加起来依旧是4MB,但这是一级页表 + 所有二级页表的和。而调度进程只需使用一级页表 + 特定的一个二级页表,因此,使用的空间要比单级页表少。

(二).两级页表分页机制

①原理:

linux将虚拟地址的32位分为前10位、中间10位、后置12位。

前置10位作为一级页表的索引映射中间10位,中间10位作为二级页表的索引映射到内存中的页框的起始地址,再根据后置12位找到特定页框中具体地址。后置12位即页内偏移

本质上页表只是映射到具体的页框,再根据偏移量找到物理地址。

即物理地址 = 页框起始地址 + 页内偏移量。

原理图如下:

②映射原理计算

虚拟地址前20位是两级页表的索引,共能索引出2^20次方个页框,内存共4GB即2^20次方个页框,因此正好与之一一对应。

每个页框4KB,共有4x1024个地址,即2^12次方,页内偏移即虚拟地址后12位,也是2^12次方,正好可以偏移出一个页框中全部地址。

 


如有错误,敬请斧正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/164199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Python+Django]Web学生信息管理系统数据库设计及系统实现

本文我们完成数据的设计,并通过Django框架完成数据库构建同时利用Django框架模式实现学生信息管理系统的功能。 简单的包装下毕设应该没问题了。 Python,Mysql,Pycharm的安装本文就不做特别介绍了,有需要的同学请参考如下博文。…

Linux shell 多线程开发以及模板使用,详细一文透彻

Linux shell 多线程开发以及模板使用 序 在日常工作中,通常是起一个终端,通过 shell 连接我们的跳板机服务器,为此服务器提供一个进程供我们使用。但我们通常都是一条一条命令的运行,在某些需要并发的场景时就显得捉襟见肘。所以…

读取和写入音频文件

将数据写入到音频文件,获取文件信息,然后将数据读回到 MATLAB 工作区。 写入音频文件 获取有关音频文件的信息 读取音频文件 绘制音频数据图 写入音频文件 从文件 handel.mat 加载示例数据 load handel.mat 工作区现在包含音频数据矩阵 y 和采样率 …

Linux 中断子系统(六):核心数据结构

Linux中断子系统有六个核心数据结构,分别是: irq_desc irq_data irqactions irq_chip irq_domain irq_domain_ops关系如下: 强烈建议大家学习一个子系统之前,先研究这个子系统的核心数据结构,知道了他们的关系,你就知道这个子系统在做什么事情。 右侧的 irq_chip、irq…

(nio)Selector-处理消息边界-附件与扩容

⚠️ 不处理边界的问题 以前有同学写过这样的代码,思考注释中两个问题,以 bio 为例,其实 nio 道理是一样的 public class Server {public static void main(String[] args) throws IOException {ServerSocket ssnew ServerSocket(9000);whi…

算法训练营第四天| 24. 两两交换链表中的节点 | 19.删除链表的倒数第N个节点 | 面试题 02.07. 链表相交 |142.环形链表II

24.两两交换链表中的节点 看完题后的思路 用两个指针pre,q指向1,2,创建一个虚拟头结点,使用尾插法插入**.难点在于初始条件的两个指针判空与终止条件的判断(奇数个节点与偶数个节点)** 初始节点判空无非三种情况,空节点,一个节点,直接使用一个判断解决 当个数是奇数时,pre指向…

Alluxio 2022技术干货年终大赏

2022,我们积累了很多应用案例,邀请了很多嘉宾参与了我们的社区直播活动 17场主题活动(Alluxio Day、Meetup、Datafun Summit等) 44位嘉宾44个主题(来自一线大厂的实战者) 2000分钟的分享时长(内…

【项目实战】使用Maven打包生成jar包到指定目录

一、背景(Maven打包存在的问题) Maven默认打包后,jar文件都是生成在各自服务的target下,对微服务的部署不太友好,需要整个项目上传服务器,里面包含了源码 二、如何解决以上问题? 其实可以在打…

[激光原理与应用-63]:激光器-光学-探测光、泵浦光和种子光三种光的区别

目录 种子光 泵浦光: 探测光: 种子光 种子光是用来放大出光的,它的作用好比在激光中增加了受激辐射的光子数,因此加快放大出光。 为放大器或者其它激光器产生种子光的激光器。 种子激光器是其输出光被注入到一些放大器或者其…

类(class)-结构体(struct)-共用体(union)的异同

一、"类" 的介绍在C中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点…

10道题熟练掌握并运用链表结构算法

目录 1.牛客BM3 链表中的节点每k个一组翻转 2.BM4 合并两个排序的链表 3.BM5 合并k个已排序的链表 4.BM6 判断链表中是否有环 5.BM7 链表中环的入口结点 6.BM8 链表中倒数最后k个结点 7.BM9 删除链表的倒数第n个节点 8.BM10 两个链表的第一个公共结点 9.BM11 链表相加(…

将写好的.py/.java程序变成.exe文件

目录 一、背景 1.1、前言 1.2、说明 二、优点与缺点分析 2.1、优点 2.2、缺点 三、将.py变成.exe步骤 3.1、下载需要的库 3.2、pycharm控制台.py->.exe文件 3.3、命令行.py->.exe文件 四、.py->.exe->执行.exe可能会遇到的报错与解决办法 4.1、pyinsta…

第2章 ESP32 日志

ESP32 日志 UART配置 新建工程 查看->命令面板,输入esp-idf:new project,一路完成工程创建选择menuconfig,输入UART 输入UART 自定义波特率改为:460800 日志打印 ESP32的日志打印函数 ESP_LOGx分成5个等级:err…

前端笔记总结+注册登录页案例

day 1 前端开发 目的:开发一个平台(网站) 前端开发:HTML、CSS、JavaScript Web框架:接收请求并处理 - Flask、Djiango MySQL数据库:存储数据的地方快速上手:基于Flask Web框架快速搭建一个网站…

Spring Cloud Alibaba商城实战项目(day02)

四、搭建Spring Cloud Alibaba环境 4.1、简介 官方文档:https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html 我们所选用的组件: SpringCloud Alibaba - Nacos:注册中心(服务发现/注册&#xf…

还不会二分查找?看这一篇就够了

目录一、整数二分1.1 二分查找模板1.1.1 寻找右边界的二分查找1.1.2 寻找左边界的二分查找1.2 应用:寻找元素的起始位置和终止位置二、浮点数二分2.1 浮点数二分模板2.2 应用:数的三次方根三、使用STL进行二分查找3.1 std::binary_search3.2 std::lower_…

27-Golang中的错误处理机制

Golang中的错误处理机制说明基本说明使用deferrecover处理上述代码错误处理机制的好处自定义错误说明 package main import ("fmt" )func test() {num1 : 10num2 : 0res : num1 / num2fmt.Println("res", res) }func fmt() {test ()fmt.Println("mai…

分享77个Java源码,总有一款适合您

Java源码 分享77个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接:https://pan.baidu.com/s/1EhB4snvWia5eCztyfiX_2A?pwdbofo …

wish、亚马逊、ebay、沃尔玛自养号测评补单优势之分析技巧

测评补单的资源可以说是卖家非常宝贵的财富,通过测评补单和广告相结合,可以快速有效的提升店铺的产品销量,提高转化,提升listing权重,如果是做自养号还可以不用担心以后被别人牵制,毕竟资源掌握在自己手上&…

docker-基础实战第二课

Docker三剑客 Docker 镜像(Image):镜像可以用来创建容器,一个镜像可以创建多个容器。 容器:容器实例就是指实际运行的实例,可以理解为镜像是java的类,容器就是new出来的对象。 仓库:…