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

《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.mzph.cn/news/191522.shtml

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

相关文章

嵌入式WIFI芯片通过lwip获取心知天气实时天气信息(包含完整代码)

一、天气API 1. 心知天气的产品简介 HyperData 是心知天气的高精度气象数据产品,通过标准的 Restful API 接口,提供标准化的数据访问。无论是 APP、智能硬件还是企业级系统都可以轻松接入心知的精细化天气数据。 HyperData API V4版是当前的最新…

要致富 先撸树——判断循环语句(六)

引子 什么?万年丕更的作者更新了? 没错!而且我们不当标题党,我决定把《我的世界》串进文章里。 什么?你不玩《我的世界》? 木有关系 本专栏文章主要在讲c语言的语法点和知识,保证让不玩《我…

Azure Machine Learning - 在 Azure 门户中创建AI搜索技能组

你将了解 Azure AI 搜索中的技能组如何通过添加光学字符识别 (OCR)、图像分析、语言检测、文本翻译和实体识别,在搜索索引中创建可搜索文本的内容。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff…

Python程序员入门指南:就业前景

文章目录 标题Python程序员入门指南:就业前景Python 就业数据Python的就业前景SWOT分析法Python 就业分析 标题 Python程序员入门指南:就业前景 Python是一种流行的编程语言,它具有简洁、易读和灵活的特点。Python可以用于多种领域&#xff…

ganache部署智能合约报错VM Exception while processing transaction: invalid opcode

这是因为编译的字节码不正确,ganache和remix编译时需要选择相同的evm version 如下图所示: remix: ganache: 确保两者都选择london或者其他evm,只要确保EVM一致就可以正确编译并部署, 不会再出现VM Exception while processing…

分享一个国内可用的免费GPT4-AI提问AI绘画网站工具

一、前言 ChatGPT GPT4.0,Midjourney绘画,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而,GPT-4对普…

LangChain 18 LangSmith监控评估Agent并创建对应的数据库

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…

SSM框架(五):Maven进阶

文章目录 一、分模块开发1.1 分模块开发的意义1.2 步骤 二、依赖管理2.1 依赖传递2.2 可选依赖和排除依赖 三、继承与聚合3.1 聚合3.2 继承3.3 聚合和继承区别 四、属性4.1 pom文件的依赖使用属性4.2 资源文件使用属性 五、多环境开发六、跳过测试七、私服7.1 下载与使用7.2 私…

文件操作-IO

文件操作-IO 1.认识文件1.什么是文件2.文件路径 2.java中操作文件2.1 File类的用法 3.InputStream和OutputStream的用法 1.认识文件 1.什么是文件 文件是计算机系统中用来存储数据的基本单位。它是一种用于持久性存储数据的命名、有序的数据集合.计算机系统通过文件系统来组织…

gitlab高级功能之容器镜像仓库

今天给大家介绍一个gitlab的高级功能 - Container Registry,该功能可以实现docker镜像的仓库功能,将gitlab上的代码仓的代码通过docker构建后并推入到容器仓库中,好处就是无需再额外部署一套docker仓库。 文章目录 1. 参考文档2. Container R…

Linux 进程(三)

Linux进程状态的查看: 这是Linux内核源代码对于进程状态的定义: R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。 S睡眠状态(sleeping): 意味着进程在…

openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性

文章目录 openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性138.1 操作步骤 openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性 数据库事务一致性通过逻辑时钟保证,与操作系统时间无关,但是系统时间不一致会导致…

18487.1 - 2015 电动汽车充电系统标准 第1部分 关键点梳理

一、部分知识介绍 1、连接方式 使用电缆和连接器将电动汽车接入电网(电源)的方法。 1.1、连接方式A 1.2、连接方式B 1.3、连接方式C 2、电动汽车控电设备 2.1、按照输出电压分类 1)交流 单相 220V,三相 380V. 2&#xff09…

【超全】React学习笔记 下:路由与Redux状态管理

React学习笔记 React系列笔记学习 上篇笔记地址:【超全】React学习笔记 上:基础使用与脚手架 中篇笔记地址:【超全】React学习笔记 中:进阶语法与原理机制 React路由概念与理解使用 1. 引入 React路由是构建单页面应用(SPA, Sin…

CSS 选择器优先级,!important 也会被覆盖?

目录 1,重要性2,专用性3,源代码顺序 CSS 属性值的计算过程中。其中第2步层叠冲突只是简单说明了下,这篇文章来详细介绍。 层叠冲突更广泛的被称为 CSS选择器优先级计算。 为什么叫层叠冲突,可以理解为 CSS 是 Cascadi…

基于 Python+flask 构建态势感知系统(附完整源码)

一、开发 一个基于linux的态势感知系统,基于python和flask框架开发,项目文件目录如下: admin -核心算法 charts -图表生成 model -类 app.py -主文件 config.py -配置文件 install.py -安装文件 二、安装 1、配置 数据库密码默认设…

redis单机版本安装

redis单机版本安装 1.redis单机版源码编译安装搭建(4.0示例) redis下载地址 https://redis.io/download redis源码编译 #!/bin/sh yum install -y wget gcc gcc-c make tar openssl openssl-devel cmakecd /usr/local/src wget http://download.redis.io/releases/redis-4…

华为杯研究生数学建模优秀参考论文(优秀论文参考2004-2022年)

一、背景介绍 中国研究生数学建模竞赛是一项面向在校研究生进行数学建模应用研究的学术竞赛活动,是广大在校研究生提高建立数学模型和运用互联网信息技术解决实际问题能力,培养科研创新精神和团队合作意识的大平台,大赛赞助单位为华为技术有限…

什么是Daily Scrum?

Daily Scrum(每日站会),Scrum Master要确保这个会在每天都会开。这个会的目的就是检查正在做的东西和方式是否有利于完成Sprint目的,并及时做出必要的调整。 每日站会一般只开15分钟,为了让事情更简单些,这…

无线物理层安全学习

文章目录 3.17到3.203.85到3.88 3.17到3.20 3.85到3.88