Linux内核分析与应用2-内存寻址
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看
留此记录,蜻蜓点水,可作抛砖引玉
2.1 内存寻址
数据连续存储和选择读取思想,是目前我们使用的几乎所有机器运行背后的灵魂
计算机体系结构中的核心问题之一,就是如何有效地进行内存寻址; 内存寻址技术,从某种程度上代表了计算机技术.
"段"的引入:
段描述了一块有限的内存区域,区域的起始位置存在专门的寄存器,也就是段寄存器中.
"保护模式"的引入:
访问内存时不能直接从段寄存器中获得段的起始地址,而需经过额外的转化或检查
"黄金时代":
Linux内核中的C和汇编语言
-
用的GNU的扩展C -
汇编语言用的是AT&T的汇编格式与Intel的汇编格式稍有差异
在C语言中,也可以嵌入汇编语言,叫做GCC嵌入式汇编
2.2 段机制
将虚地址转换为线性地址
使用readelf和objdump解析目标文件[2]
MMU: 内存管理单元,和CPU是在一起的.MMU把虚地址转化成物理地址,送给存储器.
(Intel)I386的体系结构[3]
2.3 分页机制
分页在分段之后进行,其作用是完成从线性地址到物理地址的转换
必须在保护模式下才能启动分页功能
在32位系统上一般默认为4K大小,也可以是2MB或4MB
64位系统上,可以是4KB,8KB,最大可以是256MB
分页使得每个进程可以拥有自己独立的虚拟地址空间
(更多可参考 为什么 Linux 默认页大小是 4KB[4])
两级页表:
Linux四级分页模式
I386体系结构(下)[5]
2.4 动手实践-将虚拟地址转换成物理地址
页全局目录
所有的进程都共享一个内核页表
最新的CPU已经支持五级页表
64位系统中已经不再用"高级内存"
mknod命令[6]
章节测试:
<1>.操作系统启动时,处理器处于保护模式 (错)
<2>.X86中段的描述包含基地址和界限 (错)
<3>.Intel8086的寻址范围是1MB,80386的寻址范围是 4GB (对)
<4>.分页机制是在保护模式下开启的。 (对)
<5>.在保护模式下,段的大小可以达到4GB (对)
<6>. CR3寄存器存放页目录基地址 (对)
<7>.x86的保护模式就是来保护操作系统的 (错)
<8>. 分页的原理使得每个进程可以拥有自己独立的虚拟内存空间 (对)
<9>. 分Linux之所以巧妙地绕过段机制,主要是因为将段的基址设为0,即偏移量等于线性地址 (对)
<10>. 在x86中,启用分页机制是通过启用保护允许位PE而达到的 (错)
x86 保护模式 + 分页管理机制[7]
开启分页机制———《x86汇编语言:从实模式到保护模式》读书笔记44[8]
<11>. 链接以后形成的地址空间是虚拟地址空间。 (对)
<12>. 虚拟地址是程序访问存储器所使用的逻辑地址 ;线性地址是逻辑地址到物理地址变换之间的中间层;物理地址是每一个字节单元的一个唯一的存储器地址 (对)
<13>. CPU访问的是虚拟地址。(对)
<14>. 80x86的控制寄存机器主要用于分段机制 (错)
<15>. 80x86的分段机制是必选的,分页机制是可选的 (对)
但是现实情况不是的,操作系统大多都用了分页机制
<16>. 保护模式提供了四个特权级,Linux使用了其中的2个,0级对应内核态,2级对应用户态 (错)
“段被分为了4个特权级,分别为0-3级,有时候我们也叫做ring0-ring3,其中,数值越小特权级越高
核心代码和数据所在的段的特权级都比较高,一般在ring0,而用户程序所在的段的特权级较低,一般在ring3。当低特权级的任务试图在未被允许的情况下访问高特权级的段时,将会产生常规保护错误。
而处理器是如何区分所在段的特权级,进而对其进行保护的呢?这就不得不提到CPL、DPL和RPL三者了。但是在开始之前,我们需要先了解一下一致代码段和非一致代码段。
保护模式特权级概述[9]
操作系统-保护模式中的特权级[10]
<17>. 页面大小是由操作系统设计者确定的 (错)
<18>. 页面高速缓存是一种硬件机制,专门用来支持地址转换的 (对)
与程序员相关的CPU缓存知识[11]
<19>. intel的保护模式是在80386处理器中首次出现的 (错)
<20>. 页目录存放在( )中。 D
A.CR0
B.CR1
C.CR2
D.CR3
“控制寄存器(Control Register)(CR0~CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。
CR0中含有控制处理器操作模式和状态的系统控制标志;
CR1保留不用;
CR2含有导致页错误的线性地址;
CR3中含有页目录表物理内存基地址,因此该寄存器也被称为页目录基地址寄存器PDBR(Page-Directory Base address Register)。
控制寄存器 CR*[12]
控制寄存器[13]
<21>. 一个32位虚拟地址被分为a、b、c三个域,其中a、b用于一个2级页表系统,c为页内偏移地址,则页面数为( )。D
A. a+b
B. a×b
C. 2a×b
D. 2a+b
<22>. 以下( )处理器不是冯诺伊曼体系(普林斯顿体系)结构 C(属于哈佛体系)
A. Intel X86
B. AMD
C. ARM
D. MIPS
<23>. 如下缩写,( )是中断描述符表 B
A. GDT
B. IDT
C. LDT
D. RPL
中断描述符表[14]
中断机制和中断描述符表、中断和异常的处理[15]
<23>. “段:偏移量”的形式描述的是( ) B
A. 物理地址
B. 虚拟地址
C. 线性地址
D. 段地址
虚拟地址转换与段分割[16]
参考资料
Linux 内核分析与应用: https://next.xuetangx.com/course/XIYOU08091001441/1516763
[2]使用readelf和objdump解析目标文件: https://www.jianshu.com/p/863b279c941e
[3](Intel)I386的体系结构: http://wwww.kerneltravel.net/journal/ii/part1.htm
[4]为什么 Linux 默认页大小是 4KB: https://draveness.me/whys-the-design-linux-default-page/
[5]I386体系结构(下): http://wwww.kerneltravel.net/journal/ii/part2.htm
[6]mknod命令: https://blog.csdn.net/a1010256340/article/details/83088870
[7]x86 保护模式 + 分页管理机制: https://www.cnblogs.com/dongguolei/p/7865381.html
[8]开启分页机制———《x86汇编语言:从实模式到保护模式》读书笔记44: https://blog.csdn.net/longintchar/article/details/52198391
[9]保护模式特权级概述: https://www.cnblogs.com/tcctw/p/11332551.html
[10]操作系统-保护模式中的特权级: https://blog.51cto.com/13475106/2462286
[11]与程序员相关的CPU缓存知识: https://coolshell.cn/articles/20793.html
[12]控制寄存器 CR*: https://www.cnblogs.com/coderCaoyu/p/3616055.html
[13]控制寄存器: https://baike.baidu.com/item/%E6%8E%A7%E5%88%B6%E5%AF%84%E5%AD%98%E5%99%A8/9335215
[14]中断描述符表: https://baike.baidu.com/item/%E4%B8%AD%E6%96%AD%E6%8F%8F%E8%BF%B0%E7%AC%A6%E8%A1%A8
[15]中断机制和中断描述符表、中断和异常的处理: https://blog.csdn.net/jnu_simba/article/details/11722703
[16]虚拟地址转换与段分割: https://zhuanlan.zhihu.com/p/56172609
本文由 mdnice 多平台发布
相关文章:
Linux内核分析与应用2-内存寻址
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看 留此记录,蜻蜓点水,可作抛砖引玉 2.1 内存寻址 数据连续存储和选择读取思想,是目前我们使用的几乎所有机器运行背后的灵魂 计算机体系结构中的核心问题之一,就是如…...
苍穹外卖 day12 Echats 营业台数据可视化整合
苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系…...
代码随想录算法训练营day45|70. 爬楼梯(进阶版)|322. 零钱兑换|279.完全平方数
70. 爬楼梯(进阶版) 一步一个台阶,两个台阶,三个台阶,…,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢? 1阶,2阶,… m阶就是物品,楼顶就是背包。 每一阶可以重复使用&#…...
数据结构和算法(3):列表
列表是一种线性数据结构,它允许在其中存储多个元素,并且可以动态地添加或删除元素。 循秩访问 可通过重载下标操作符,实现寻秩访问 template <typename T> // assert: 0 < r < size T List<T>::operator[](Rank r) cons…...
使用playright自动下载vscode已安装插件
import os import re import subprocess import traceback from playwright.sync_api import Playwright, sync_playwright, expect# 执行CMD命令 cmd_command "code --list-extensions" # 获取已安装扩展列表 process subprocess.Popen(cmd_command, stdoutsubpr…...
单片机语言实例:2、点亮数码管的多种方法
一、共阳数码管静态显示 程序实例1: #include<reg52.h> //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义void main (void) {P10xc0; //二进制 为 1100 0000 参考数码管排列,//可以得出0对应的段点…...
C#学习 - 初识类与名称空间
类(class)& 名称空间(namespace) 类是最基础的 C# 类型,是一个数据结构,是构成程序的主体 名称空间以树型结构组织类 using System; //前面的using就是引用名称空间 //相当于C语言的 #include <..…...
Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储
Ajax介绍 Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下,通过在后台与服务器进行数据交换,实时更新网页的一部分。Ajax的主要特点包括: 异步通…...
JavaScript的面向对象
一、认识对象 1.概述 对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合…...
MybatisPlus 核心功能 条件构造器 自定义SQL Service接口 静态工具
MybatisPlus 快速入门 常见注解 配置_软工菜鸡的博客-CSDN博客 2.核心功能 刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 2.1.条件构造器 除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此…...
TSN时间敏感网络
目录 时间敏感网络介绍 子协议介绍 时间同步 IEEE802.1AS 调度和流量整形 IEEE802.1Q IEEE802.1Qbv IEEE802.1cr IEEE802.1Qbu IEEE802.1Qch IEEE802.1Qav IEEE802.1Qcc 纠错机制与安全 IEEE802.1Qci IEEE802.1CB IEEE802.1Qca 参考 时间敏感网络介绍 TSN(Tim…...
【2023年数学建模国赛】C题解题思路
第一问 要求分析分析蔬菜各品类及单品销售量的分布规律及相互关系。该问题可以拆分成三个角度进行剖析。 1)各种类蔬菜的销售量分布、蔬菜种类与销售量之间的关系;2)各种类蔬菜的销售量的月份分布、各种类蔬菜销售量与月份之间的相关关系&a…...
5分钟 将“.py”文件转为“.pyd”文件
代码: from distutils.core import setup from distutils.extension import Extension from Cython.Build import cythonize import osfile_list os.listdir("./") extensions [] for file in file_list:if file.endswith(".py") and file !…...
python 入门到精通(一)
文章目录 1.使用pycharm进行第一个程序的编写2.python基础语法篇2.1 常用的值类型2.2 注释2.3 变量2.4 数据类型2.5 数据类型转换2.6 什么是标识符2.7 运算符2.8 字符串扩展2.8.1 字符串拼接2.8.2 字符串格式化2.8.3 格式化的精度控制2.8.4 字符串格式化 - 快速写法2.8.5 字符串…...
AJAX (Asynchronous JavaScript And XML)异步的JavaScript 和 XML
1、概念 Asynchronous JavaScript And XML 异步的JavaScript 和 XML异步和同步:客户端和服务器端相互通信的基础上 同步:客户端必须等待服务端的响应。在等待的期间客户端不能做其他操作。异步:客户端不需要等待服务器端的响应。在服务器…...
华为云云耀云服务器L实例评测|安装Java8环境 配置环境变量 spring项目部署 【!】存在问题未解决
目录 引出安装JDK8环境查看是否有默认jar上传Linux版本的jar包解压压缩包配置环境变量 上传jar包以及运行问题上传Jar包运行控制台开放端口访问失败—见问题记录关闭Jar的方式1.进程kill -92.ctrl c退出 问题记录:【!】未解决各种方式查看端口情况联系工程师最后排查…...
安卓多渠道打包(五)360加固walle多渠道打包
背景: 1、360加固宝,签名收費了,脚本上传加固也针对特定帐号才可实现。 内容 本文将会分享安卓项目中,使用360加固,再用walle签名,产出多渠道加固包的全流程。 环境 win10 jdk11 as2022 gradle7.5 最…...
Jmeter 实现 mqtt 协议压力测试
1. 下载jmeter,解压 https://jmeter.apache.org/download_jmeter.cgi 以 5.4.3 为例,下载地址: https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip linux下解压: unzip apache-jmeter-5.4.3.zip 2. 下载m…...
蓝桥杯官网练习题(凑算式)
类似填空题: ①算式900: https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501 ②九宫幻方③七星填数④幻方填空:https:/…...
机器学习实战-系列教程5:手撕线性回归4之非线性回归(项目实战、原理解读、源码解读)
🌈🌈🌈机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 手撕线性回归1之线性回归类的实现 手撕线性回归2之单特征线性回归 手撕线性回归3之多特征线性回归 手撕线性回归4之非线性回归 1…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
