<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(2)》(18)

news2025/9/20 22:25:42

《Linux操作系统原理分析之linux存储管理(1)》(17)

  • 6 Linux存储管理
    • 6.2 选段符与段描述符
      • 6.2.1 选段符
      • 6.2.2 段描述符
      • 6.2.3 分段机制的存储保护
    • 6.3 80x86 的分页机制
      • 6.3.180x86 的分页机制
      • 6.3.2 分页机制的地址转换
      • 6.3.3 页表目录与页表表项
      • 6.3.4 分页机制的存储保护
      • 6.3.5 快表 TLB

6 Linux存储管理

6.2 选段符与段描述符

6.2.1 选段符

选段符的作用:确定所选的段描述符在段描述符表中的位置。
选段符由 3 个部分组成,如下所示:
其中:
在这里插入图片描述

👉RPL(Reques Privilege Level):请求特权级,即访问者的特权级,分为 0、1、2、3 四级,0 级最高,3 级最低。Linux 中仅使用其中两个级别:0 级为内核级,3 为用户级。
👉TI(Table Indictor):描述符表的种类。0 为访问全局描述符表 GDT,1 为访问局部描述符表LDT。
👉INDEX:索引值。指出段描述符在描述符表中的偏移量。INDEX 13 位,则可以最大可描述 8K 个段。

如何确定描述符在描述符表中的偏移地址?
INDEX 是描述索引表的索引值,实际上是描述符在描述符表中的序号。每个描述符的长度为8B,所以描述符相对于表基地址的偏移地址实际是:INDEX 乘以 8。而实际该值并不需要计算,只要将 INDEX 的值左移 3 位,低地址部分 3 位补 0,形成的 16 位地址就是偏移地址。

6.2.2 段描述符

在 80x86 线性地址空间中,所有的段根据它们所存放的内容可以分为两类:

👉常规段:存放代码、数据、堆栈的段,无论是用户的还是系统的。
👉系统段:存放系统管理用的各种数据结构,如进程状态段 TSS、中断矢量表、系统调用表等。相应地,段描述符也有两种:常规段描述符、系统段描述符。本书中只介绍常规段描述符。

64 位常规段描述符主要分为以下四个部分:
在这里插入图片描述

1.段基址:32 位(分布在段描述符 16~39 位和 56 ~63 位)指出段在线性地址空间的起始地址。
2.段限:20 位(分布在段描述符 0~ 15 位和 48~51 位)段限加 1 是段的长度。
3.访问属性:8 位(40~47 位)定义了段的类型、操作属性及保护特性。
4.辅助特性:4 位(52~55 位)定义了段的其他属性。

访问属性
在这里插入图片描述

访问属性含义
P(present)存在位。
DPL(Descriptor privilege Level)段的访问特权级。它是段本身的访问特权分为 0、1、2、3 四级,0 级最高,3 级最低。Linux 中仅使用其中两个级别:0 级为内核级,3 为用户级。
S(Segment)段种类。0:系统段,1:常规段。
E(Executive)执行位。表示段的类型:0 表示数据段;1 表示代码段。
C/ED相容性/扩展位。
代码段(S=1,E=1)中,C=1 表示在满足一定条件下段可以执行。C=0 表示段不能执行;
数据段(S=1,E=0)中,对堆栈段而言:ED =1 表示向上扩展堆栈。ED =0 表示向下扩展堆栈。
R/W读写位。
代码段(S=1,E=1)中,R/W =1 表示可读可执行。R/W =0 表示不可读但可执行;
数据段(S=1,E=0)中,R/W =1 表示可读可写。R/W =1 表示可读禁止写。
A访问位。A=0 表示该段尚未被访问;A=1 表示该段已被访问过。

辅助特性:

辅助特性含义
G(granularity)粒度,指段的单位长度,G=1 表示段长度以页面(4K)为单位,在常规段描述符中 G=1;G=0 表示段长度以字节为单位,在系统段描述符中 G=0。
D操作长度,只用于代码段描述符中,D=1 位 32 位代码段,D=0 为 16 位代码段。
R系统保留(值为 0)
U可以由 os 系统程序员自行定义使用,linux 未用。

6.2.3 分段机制的存储保护

1.地址越界保护
其实 GDT、LDT 中的段限就是用于地址越界保护。
2.存取控制保护
存取控制保护从两个方面来保证信息安全:

👉设置对存储区域的访问权限
RPL:规定访问者的访问权限;
DPL:规定段本身的访问权限;
访问者的访问权限必须段本身的访问权限时,才能访问段。
👉设置对存储区域的操作权限
通过段描述符中 R/W 实现。

6.3 80x86 的分页机制

6.3.180x86 的分页机制

80x86 中,逻辑页面大小为 4KB。

80x86 中采用两级页表:简单描述就是:每个页表占用一个物理页面(4KB),每个页表项占 4B,则每个页表 1K 个表项。因此一张页表可以覆盖 1K*4K=4M 的地址空间。建立进程时,系统根据进程逻辑
在这里插入图片描述
页面的数目提供不同张数的页表,这样不同尺寸的进程就可以使用不同张数的页表。但是此时必须为每个进程建立一个页表目录,记录该进程的各个页表的存储位置。所以需要使用两级页表。

因为 80x86 中页表目录中的表项也占用 4B,所以每个页面可以记录 1K 个页表项,所以采用两级页表可以覆盖 1k1K4K=4G 的地址空间。也就是能覆盖最大容量的线性地址空间。

采用二级页表的好处:覆盖更大容量的线性地址空间、节省空间(因为如果采用一级页表,为了满足最大容量 4G 的需要,必须为 4G 空间中的每个页建立页表项。)

6.3.2 分页机制的地址转换

1.地址结构
在这里插入图片描述

2.地址转换
图中:

👉CR3 控制寄存器:记录页表目录在物理内存中的起始地址。该寄存器是一个 32 位寄存器,它的低 12 位总是 0,这样可以保证页表目录在物理地址空间总是按页面对齐的。
👉页表目录域和页表域中记录的都是查找项的索引值,即序号,因每个表项为 4B,所以需要乘 4,得到表项中的偏移地址。

6.3.3 页表目录与页表表项

在这里插入图片描述

1.指针。页表目录中:是页表指针,指向某一页表。
页表中:是页面指针,指向某一物理页面。
实际上它们分别是页表或物理页面起始地址的高 20 位,该地址的低 12 位总为 0,这就保证了页
表和物理页面在物理地址空间总是按页面对齐的,即它们总是位于 4K 页面的边界上。
2.AVL:供操作系统自行定义使用。
3.D:修改位(仅对页表表项有意义)
4.A:访问位。
5.U/S:访问权限,表示页表或页面本身的访问权限。U/S=1 是用户级,U/S=0 是系统级。
6.W/R:读/写保护位,操作限制。1 表示允许读写;0 表示只读
7.P:存在位。
8.表项中 0 的位域保留以备扩充。

6.3.4 分页机制的存储保护

从两方面进行:
👉地址越界保护。访问到的页表项为 0 时,地址越界。(可以参见徐德民 p194 195 的例题)
👉存取控制保护。U/S 和 W/R

6.3.5 快表 TLB

从上述的分页机制可以看出,采用两级页表,需要访问 3 次内存。为此 80x86 中也引进了快表。它放在处理器芯片中的高速缓存中,称为转换旁视缓冲存储器 TLB(Translation Look-aside Buffers)。其中存放32 个最近使用的页表项(页面地址)。

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

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

相关文章

uni-app 微信小程序 电子签名及签名图片翻转显示功能

文章目录 1. 需求背景2. 开始撸2.1 点击 重写 进入签名页面(上图一)2.2 书写签名,点击确认返回,及图片翻转显示(上图二,三) 3. 图片进行翻转,返回翻转后的图片 1. 需求背景 接的一个…

结构体||联合体

1.结构体 1.1实际生活中一些东西往往有多个元素组成。如一名学生有身高、体重、名字、学号等。这时候就需要用到结构体。 结构体是一些值的结合,这些值被称为成员变量。结构体的每个成员可以是不同类型的变量,如:标量、数组、指针、甚至是其…

锐捷EWEB网管系统 RCE漏洞复现

0x01 产品简介 锐捷网管系统是由北京锐捷数据时代科技有限公司开发的新一代基于云的网络管理软件,以“数据时代创新网管与信息安全”为口号,定位于终端安全、IT运营及企业服务化管理统一解决方案。 0x02 漏洞概述 Ruijie-EWEB 网管系统 flwo.control.ph…

MATLAB实战 | S函数的设计与应用

S函数用于开发新的Simulink通用功能模块,是一种对模块库进行扩展的工具。S函数可以采用MATLAB语言、C、C、FORTRAN、Ada等语言编写。在S函数中使用文本方式输入公式、方程,非常适合复杂动态系统的数学描述,并且在仿真过程中可以对仿真进行更精…

【代码】多种调度模式下的光储电站经济性最优 储能容量配置分析matlab/yalmip

程序名称:多种调度模式下的光储电站经济性最优储能容量配置分析 实现平台:matlab-yalmip-cplex/gurobi 代码简介:代码主要做的是一个光储电站经济最优储能容量配置的问题,对光储电站中储能的容量进行优化,以实现经济…

仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能

仿京东淘宝商品列表筛选组件:实现一个高效的侧边栏弹框筛选功能 一、引言 随着电子商务的快速发展,用户体验成为了竞争的关键因素。在众多的电商网站中,如京东和淘宝,商品列表筛选功能为用户提供了便捷的途径来找到心仪的商品。本…

策略模式与简单工厂模式:终结if-else混乱,让代码更清爽

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概4500多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…

STM32-GPIO

一、GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 可配置8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下:可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输…

Windows11系统下MemoryCompression导致内存占用率过高

. # 📑前言 本文主要是win11系统下CPU占用率过高如何下降的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日…

java学习part30callabel和线程池方式

140-多线程-线程的创建方式3、4:实现Callable与线程池_哔哩哔哩_bilibili 1.Callable 实现类 使用方式 返回值 2.线程池

[英语学习][5][Word Power Made Easy]的精读与翻译优化

[序言] 今日完成第18页的阅读, 发现大量的翻译错误以及不准确. 需要分两篇文章进行讲解. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨论与交流英语相关的内容. [原著英文与翻译版对照][第18页] Wh…

Lattice-Based Blind Signatures: Short, Efficient, and Round-Optimal

目录 摘要引言 Lattice-Based Blind Signatures: Short, Efficient, and Round-Optimal CCS 2023 摘要 我们提出了一种基于随机预言机启发式和标准格问题(环/模块SIS/LWE和NTRU)的2轮盲签名协议,签名大小为22KB。该协议是全面优化的&#xf…

Elasticsearch 的使用

一、简介 1.Shard(分片) 数据分散集群的架构模式,Elasticsearch 将一个 Index(索引)中的数据切为多个 Shard(分片),分布在不同服务器节点上。 默认每个索引会分配5个主分片和1个副本…

HarmonyOS开发工具安装

目录 下载与安装DevEco Studio DevEco Studio下载官网,点击下载 下载完成后,双击下载的“deveco-studio-xxxx.exe” 进入DevEco Studio安装向导 选择安装路径 如下安装选项界面勾选DevEco Studio后,单击“Next” 点击Install 安装完…

【云备份】业务处理

文章目录 1. 业务处理作用功能 2. 代码框架编写构造函数UpLoad ——文件上传请求ListShow —— 展示页面请求处理实现Download —— 下载请求的处理实现断点续传实现 1. 业务处理 作用 业务处理模块是对客户端的业务请求进行处理 功能 1.文件上传请求:备份客户端…

A--Z与a--z的ASCII码的差异

从z到A还有一些字符 应该改为str[i]>A&&str[i]<Z||str[i]>a&&str[i]<z;

什么是革命性技术eBPF?为什么可观测性领域都得用它

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享。 如果有一种技术可以监控和采集任何应用信息&#xff0c;支持任何语言&#xff0c;并且应用完全无感知&#xff0c;零侵入&#xff0c;想想是不是很激动&#xff0c;那么这个技术是什么…

基于SpringBoot蜗牛兼职网的设计与实现

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;蜗牛兼职网当然也不能排除在外。蜗牛兼职网是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c…

【Element-ui】Layout与Container组件

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Layout 布局1.1 基础布局1.2 分栏间隔1.3 混合布局1.4 分栏偏移1.5 对齐方式1.6 响应式布局1.7 el-col中的 push和pull 二、Container 布局容器2.1 Contain…

c语言常见面试题(持续更新)

八股文的意义在于&#xff0c;如果你真正理解这些八股&#xff0c;那么你的编程语言才达到了入门级别&#xff0c;如果你不懂&#xff0c;你绝对还没有入门编程语言&#xff0c;也就是说在接下来的工作中&#xff0c;受限于基础的薄弱&#xff0c;你的工作进展会非常的慢&#…