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…...
【C语言基础】那些你可能不知道的C语言“潜规则”
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
android framework之Applicataion启动流程分析(三)
现在再回顾一下Application的启动流程,总的来说,虽然进程的发起是由ATMS服务发起的,但是进程的启动还是由AMS负责,所以需要调用AMS的startProcess()接口完成进程启动流程,AMS要处理的事情很多,它将事务交给…...
使用Scrapy框架集成Selenium实现高效爬虫
引言: 在网络爬虫的开发中,有时候我们需要处理一些JavaScript动态生成的内容或进行一些复杂的操作,这时候传统的基于请求和响应的爬虫框架就显得力不从心了。为了解决这个问题,我们可以使用Scrapy框架集成Selenium来实现高效的爬…...
Maven 和 Gradle 官方文档及相关资料的网址集合
文章目录 官方MavenGradle 笔者MavenGradle 官方 Maven Maven 仓库依赖包官方查询通道:https://mvnrepository.com/ Maven 插件官方文档:https://maven.apache.org/plugins/ 安卓依赖包官方查询通道*:https://maven.google.com/web/ Gra…...
docker概念、安装与卸载
第一章 docker概念 Docker 是一个开源的应用容器引擎。 Docker 诞生于2013年初,基于 Go 语言实现,dotCloud 公司出品,后改名为 Docker Inc。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发…...
elasticsearch访问9200端口 提示需要登陆
项目场景: 提示:这里简述项目相关背景: elasticsearch访问9200端口 提示需要登陆 问题描述 提示:这里描述项目中遇到的问题: 在E:\elasticsearch-8.9.1-windows-x86_64\elasticsearch-8.9.1\bin目录下输入命令 ela…...
【深度学习】 Python 和 NumPy 系列教程(一):Python基本数据类型:1、数字(整数、浮点数)及相关运算;2、布尔值
目录 一、前言 二、实验环境 三、Python基本数据类型 1. 数字 a. 整数(int) b. 浮点数(float) c. 运算 运算符 增强操作符 代码整合 d. 运算中的类型转换 e. 运算函数abs、max、min、int、float 2. 布尔值(…...
无swing,高级javaSE毕业之贪吃蛇游戏(含模块构建,多线程监听服务)
JavaSE,无框架实现贪吃蛇 文章目录 JavaSE,无框架实现贪吃蛇1.整体思考2.可能的难点思考2.1 如何表示游戏界面2.2 如何渲染游戏界面2.3 如何让游戏动起来2.4 蛇如何移动 3.流程图制作4.模块划分5.模块完善5.0常量优化5.1监听键盘服务i.输入存储ii.键盘监…...
HDD-FAT32 ZIP-FAT32 HDD-FAT16 ZIP-FAT16 HDD-NTFS
FAT32、FAT16指的是分区格式, FAT16单个文件最大2G FAT32单个文件最大4G NTFS单个文件大于4G HDD是硬盘启动 ZIP是软盘启动 U盘选HDD HDD-NTFS...
王道数据结构编程题 二叉树
二叉树定义 以下为本文解题代码的二叉树定义。 struct TreeNode {int val;TreeNode* left, *right;TreeNode(int val 0, TreeNode* left nullptr, TreeNode* right nullptr): val(val), left(left), right(right) {} };非递归后序遍历 题目描述 编写后序遍历二叉树的非递…...
网站简介 更改/八零云自助建站免费建站平台
if($category->user_id ! auth()->id()){throw new ModelNotFoundException();}...
html5手机网站/开发外包网站
一、算法实现 冒泡排序的时间复杂度为O(n^2),其实现代码如下: int bubble_sort(int *array, int num) {int i0, j0, idx0, max0;for(idx1; idx<num; idx){array[0] array[1]; /* array[0]为交换空间 */max num-idx1;for(j2…...
太原seo网站建设/自助建站网站哪个好
此为记录下我自己的爬虫学习过程。 利用url包抓取网页 import urllib.request #url包 def main(): url "http://www.douban.com/" response urllib.request.urlopen(url) #请求 html response.read() #获取 html html.decode("utf-8") #解码 print(htm…...
中贸网做的网站/湘潭营销型网站建设
修改表结构 --修改数据表 ALTER TABLE 表名 SQL代码的书写不考虑顺序,但是批量执行代码需要要考虑好先执行哪些,后执行哪些 在修改数据表结构时,必须要明确:修改的字段中是否存在数据,例如:如果需要更改…...
网站服务器租赁合同/百度搜索引擎介绍
根据三个坐标点以及三个坐标点的半径( x1 , y1 ) , d1 , ( x2 , y2 ) , d2 , ( x3 , y3 ) , d3,即可求得三个点的交点 ( x0 , y0 ) 。 通过勾股定理可得出: Math.power((x1 - x0), 2) Math.power((y1 - y0), 2) Math.power(d1, 2);Math.power((x2 - x…...
兰州市七里河建设局网站/网站推广方案模板
点击“蓝字”关注我们如果你是一个嵌入式工程师,那么入门的第1个例子很可能就是 - 呼吸灯。那在本次视频中,赛灵思嵌入式工程师张超将和大家一起,用最简单的例子展示如何使用Xilinx Zynq Ultra Scale MPSoC器件,在搭载Linux操作系…...