Linux物理地址到虚拟地址的映射

server/2025/1/15 8:31:29/

相关理论:

        Linux中用户空间是无法直操作寄存器的,需要先将寄存器对应的物理地址通过转换成虚拟地址然后在进行操作。

        高性能处理器一般会提供一个内存管理单元(MMU),该单元辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射,内存访问权限保护和cache缓存控制等硬件支持。

        MMU具有虚拟地址和物理地址转换、内存访问权限等功能。这将使得Linux操作系统能单独的为系统的每一个用户进程分配独立的内存空间,并保证用户空间,不能访问内核空间地址。为操作系统的虚拟内存管理模块提供硬件基础。上层应用看到的内存都是虚拟内存,应用就不能直接访问硬件,所以这样就保证了系统安全。

        对于包含MMU的处理器,Linux系统提供了复杂的存储管理系统,使得进程访问的内存达到了4G。在Linux系统中,进程的4GB内存空间被分成了两个部分——用户空间与内核空间

        每个进程的用户空间都是完全独立、互不相干的,用户进程各自有不同的页表。而内核空间是由内核 负责映射,它并不会跟着进程改变,是固定的。内核空间的虚拟地址到物理地址映射是被所有进程共享的, 内核的虚拟空间独立于其他程序。
在Linux中,内核给我们提供了相关的函数:
        函数定义在内核源码目录 include/asm-generic/io.h
函数
static inline void __iomem * ioremap (phys_addr_t offset, size_t size)
参数<offset>需要映射的物理地址的起始地址
参数<size>映射多大的内存空间(字节数)
返回值
成功返回虚拟地址的首地址失败返回 NULL
功能
把物理地址转换成虚拟地址

函数
static inline void iounmap (void __iomem *addr)
参数<addr>
要取消映射的虚拟地址的首地址
功能
释放掉 ioremap 映射的地址

注意:物理地址只能被映射一次,多次映射会失败。如何查看:

cat /proc/iomem


http://www.ppmy.cn/server/158179.html

相关文章

网工考试——数据链路层、网络层、传输层

1、纠错和检错 基本概念&#xff1a;一个帧包含m个数据位&#xff08;报文&#xff09;和r个冗余位&#xff08;校验位&#xff09;&#xff0c;假设帧的总长度为n&#xff0c;则有nmr&#xff0c;包含数据和校验位的n位单元通常称为n位码字 海明码距&#xff1a;是两个码字中…

区块链-不可篡改

为什么区块链是不可纂改&#xff1f; 密码学哈希函数&#xff1a;每个区块都包含一个唯一的哈希值&#xff0c;这个哈希值是根据该区块内的所有交易数据以及其他信息&#xff08;如前一个区块的哈希值&#xff09;计算出来的。如果区块内的任何信息被更改&#xff0c;即使只是一…

口碑很好的国产LDO芯片,有哪些?

在几乎任何一个电路设计中&#xff0c;都可能会使用LDO&#xff08;低压差线性稳压器&#xff09;这个器件。 虽然LDO不是什么高性能的IC&#xff0c;但LDO芯片市场竞争异常激烈。最近几年&#xff0c;诞生了越来越多的精品国产LDO&#xff0c;让人看得眼花缭乱。 业内人士曾经…

【ROS2】URDF模型文件中Xacro宏语言详解

1、简介 URDF(Unified Robot Description Format)是ROS中用于描述机器人模型的一种XML文件格式; 而Xacro则是为了优化URDF文件的编写过程而引入的一种XML宏语言; Xacro提高了URDF文件的可读性和复用性,可以在URDF文件中使用变量、数学运算和宏定义等功能; 比如:连杆、关…

《软硬协同优化,解锁鸿蒙系统AI应用性能新高度》

在当今数字化时代&#xff0c;鸿蒙系统与人工智能的融合正逐渐成为科技领域的热门话题。如何通过软件和硬件协同优化&#xff0c;进一步提升鸿蒙系统中AI应用的整体性能&#xff0c;成为了开发者和技术爱好者们关注的焦点。 鸿蒙系统与AI应用的融合现状 鸿蒙系统以其独特的微…

python初体验: 处理excel数据

一. data.xlsx 二.python代码 import pandas as pd# 读取 Excel 文件 df pd.read_excel(./data.xlsx, sheet_nameSheet1, usecols[Name, Age, City])# 查看数据 print(df.head())# 筛选数据 df_filtered df[df[Age] > 30]# 添加新列 df_filtered[Salary] df_filtered[Ag…

windows 下npm 使用 n 切换node版本

windows 下npm 使用 n 切换node版本 下载使用查看当前的版本 下载 npm install -g n --force遇到问题注意点&#xff1a; 如果单纯的使用npm install -g n &#xff0c;没有加上–force 会报错【[npm]安装n模块报错notsup Unsupported platform】 使用 查看当前的版本 n -V…

git去除.idea

文章目录 目录结构1、创建.gitignore2、将.gitignore文件上传到远程仓库3、删除git的.idea文件4、同步到远程仓库 目录结构 |-.idea |-main.py1、创建.gitignore 目录结构 |-.idea |-main.py |-.gitignore.gitignore内容 /.idea/*2、将.gitignore文件上传到远程仓库 git p…