Linux内核分析(二) 段页式分析
80386CPU 页式存储管理机制
关于80386段式管理,也是Linux内核采用的段式管理部分已在硬件平台分析给出了详细分析(段式存储管理)。 接着我们详细分析建立在段机制上的 80386CPU 页式内存管理机制。分析页机制之前我们先了解为什么我们需要页机制。在之前我们的段式存储管理,解决了安全问题,但是还有很多不能解决问题,这些问题会影响存储,以及指令执行的效率。具体说,80386的段式内存管理机制,是将指令中结合段寄存器使用的32位逻辑地址(转换)成同样式32位的物理地址。但是段式存储管理机制的灵活性和效率都比较差。例如“段”式可变长度的,这给内存和硬盘交换带来了麻烦。而页机制就很好的解决了这些麻烦,页机制中,逻辑地址连续性并不会和实际物理地址连续对应,其次一页的大小固定为4K,细化内存管理的粒度,方便内存的换入换出。在只有段机制下,逻辑地址(虚拟地址)经过段部件产生的线性地址被直接当做物理地址,而有了页机制后,经过段部件的线性地址还要经过页部件的映射为实际的物理地址。如同所示:
如上图,如果我们开启页机制,那么原先选择子和偏移经过段部件形成的32位线性地址不再是物理地址,而是成为页部件的输入。因此段部件输出的32位的线性地址会有新的解释。如下同所示:
数据结构代码表示:
typedef struct{unsigned int dir:10; //用作页面表目录的下标,该目录项指向一个页表unsigned int page:10; //用作具体页面表中的下标,该表项指向一个物理页面unsigned int offset:12; //在4K字节物理页面内的偏移量 }//32位线性地址(段部件的输出,页部件的输入):后面为字段所占位数
其中页目录dir有1024个项,每个项占4字节,因此共4K字节,刚好一个页大小,每个项指向一个页面表。一个页面表含1024个物理页面基址,每项占4字节,因此共4K字节,也刚好一个页大小。页内偏移offset用与一个物理页内的寻址。
类似GDTR和LDTR,又增加了一个新的寄存器CR3寄存器作为指向当前页目录的指针存放的寄存器。具体
线性地址到物理地址的映射过程为:
①从CR3取得页目录的基地址。
②以线性地址中的dir位段为下标,在目录中取得相应页面的基地址。
③以线性地址中的page位段为下标,在所得的页面表中取得相应的页面描述项。
④将页面描述项中给出的页面基地址与线性地址中的offset位相加得到物理地址。
具体图示如下:
我们可以看到,目录项和页表项都是对应一个4K页面,即地址为4K整数倍,因此4字节,32位地址的后12位是空出来的,而实际被用来当作一些属性位。
例如目录项的结构为:
数据结构代码表示:
typedef struct{unsigned int ptba:20; //页表基址的高20位unsigned int avail:3; //供系统程序员使用unsigned int g:1; //global 全局性页面unsigned int ps:1; //页面大小,0表示4K字节unsigned int reserved:1; //保留,永远是0unsigned int a:1; //accessed,已被访问过unsigned int pcd:1; //关闭(不使用)缓冲存储器unsigned int pwt:1; //write Through,用于缓冲寄存器unsigned int u_s:1; //为0表示系统(或超级)权限,为1表示用户权限unsigned int r_w:1; //只读或可写unsigned int p:1; //为0时表示相应的页面不存在 }//页目录项
以上为80386的页式存储管理,我们是以二级页表为例子做的分析。而Linux对与页式管理的机制与其类似,只是在具体的实现上不同。
转载于:https://www.cnblogs.com/HonkerYblogs/p/10385662.html
Linux内核分析(二) 段页式分析相关推荐
- OS- -请求分页系统、请求分段系统和请求段页式系统(二)
OS- -请求分页系统.请求分段系统和请求段页式系统(二) 文章目录 OS- -请求分页系统.请求分段系统和请求段页式系统(二) 一.基本分段存储管理方式 1.分段系统的组成: 2.段表 3.查找过程 ...
- 【学习笔记】第三章——内存 III(分段存储、段页式存储、分段和分页对比)
文章目录 一. 分段存储 1) 概念 2)段表 二. 分段 VS 分页 1)对比 2)优缺点分析 三. 段页式存储 1)定义 2)逻辑地址结构 一. 分段存储 1) 概念 离散,每段从0开始编址,每个 ...
- Linux内核之旅/张凯捷——系统调用分析(2)
在<系统调用分析(1)>Linux内核之旅/张凯捷--系统调用分析(1)中,首先介绍了系统调用的概念,并对早期通过软中断(int 80)来进行系统调用的相关过程进行了分析,最后分析和介绍了 ...
- Linux 操作系统原理 — 内存 — 页式管理、段式管理与段页式管理
目录 文章目录 目录 前文列表 页式管理 快表 多级页表 基于页表的虚实地址转换原理 应用 TLB 快表提升虚实地址转换速度 页式虚拟存储器工作的全过程 缺页中断 为什么 Linux 默认页大小是 4 ...
- linux 内核连接跟踪,Linux内核连接跟踪锁的优化分析(1)
Linux内核连接跟踪锁的优化分析(1) 作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 微博:weibo.com/glinuxer ...
- 详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系
进程状态之间的关系: 1.分段式内存管理: 分段:进程地址空间按照逻辑关系将自身划分为若干个段,每个段都有自己的段名,从0开始编址. 内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各 ...
- 笔记:深入理解Linux内核(二)
笔记:深入理解Linux内核(二) 二零二一年十月二十四日 文章目录 笔记:深入理解Linux内核(二) 第二章:内存寻址 内存地址 硬件中的分段 段选择符和段选择器 段描述符 快速访问段描述符 分段 ...
- 三十四、段页式管理方式
一.知识总览 二.分页.分段的优缺点分析 分页管理: 优点:内存空间利用率高,不会产生外部碎片,只会有少量的页内碎片. 缺点:不方便按照逻辑模块实现信息的共享和保护 分段管理: 优点:很方便按照逻辑模 ...
- 12 操作系统第三章 内存管理 非连续分配管理方式 基本分页存储管理 基本分段存储管理 段页式存储管理
文章目录 1 基本分页存储管理 1.1 什么是分页存储 1.2 重要的数据结构--页表 1.3 基本地址变换机构 1.4 具有快表的地址变换机构 1.4.1 什么是快表(TLB) 1.4.2 引入快表 ...
最新文章
- 【机器学习基础】相当全面的时间序列基础教程总结
- Maven的scope详解
- 前端学习(2465):ajax发送请求
- java io之图片存取
- Redis之简单动态字符串sds
- 树莓派智能小车python_人工智能-树莓派小车(1)——DuerOS语音唤醒
- 又一篇Centos7下的asp.net core部署教程
- Guava: Joiner
- Nanopore sequencing and assembly of a human genome with ultra-long reads
- kotlinx.serialization处理Json解析
- 广联达报错access_广联达软件报错问题汇总和解决方案.doc
- 汇编实现吃豆子小程序
- SQL Server“对象名无效”报错的解决方法
- 项目开发过程中遇到的问题和解决方法
- 锁升级过程(偏向锁/轻量级锁/重量级锁)
- HTML学习笔记_常用标签的使用及注意事项
- QT Desinger设计程序主界面 PyUIC生成.py
- 在Windows上使用Cygwin源码安装tig
- A Survey for Image Quality Assessment(综述)
- 用js javascript 创建网页快捷方式
热门文章
- linux whois工具,CentOS如何安装whois命令
- 用lisp编写串口助手源代码_实战用python来写个串口助手--界面篇
- 3D溜溜网站用的是php吗_浩辰3D软件中全面的阵列特征你会用吗?快来看看吧
- Laravel 5.5 的错误异常处理机制以及应用实例
- Java详解:作为一个码农终于把MySQL日记看懂了
- 【408预推免复习】计算机组成原理之控制单元的功能和控制单元的设计
- 【操作系统】考研の页面置换算法例子(看不懂你来打我~!)
- 【Deep Learning笔记】用Inception-V3模型进行图像分类
- matlab读取h5文件
- easyexcel写入数据为空_如何解决Redis缓存和MySQL数据一致性的问题?