为什么中断向量表重映射到高地址

2023-10-28 20:09

本文主要是介绍为什么中断向量表重映射到高地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么中断向量表重映射到高地址(转)  2013-04-13 09:51:33

分类: LINUX

原文地址:对ARM中MMU映射过程的理解(转) 作者:nuaagcj

http://blog.chinaunix.net/u1/58780/showart_458039.html

MMU给我感觉是个很复杂的东西,网上看了一些资料,勉强知道了一些表面的东西。它有两个作用:1、把虚拟地址映射到物理地址;2、对内存访问提供控制机制。

我主要记录下我对映射表变换的理解。

在ARM中,MMU另外提供了一张映射表(MVA),用于程序虚拟地址(VA)到物理地址(PA)的映射。MVA称为变换后的VA。在程序运行时,CPU只看到VA,而MMU和cache们只看到PA和MVA。应该说,在进程运行切换过程中,映射关系是动态变化的,因为不同进程和内存之间需要不同的映射关系,就需要不断的重做映射表,这个代价是很大的。所以,有必要让映射表中需要更新的内容很少,以减少性能开支,这就出现了“变换后的”VA,即MVA,如果VA<32M,需要使用进程标识号PID(通过读CP15的C13获得)来转换为MVA。

VA与MVA的转换方法如下(这是硬件自动完成的):

if(VA < 32M)
    MVA = VA | (PID<<25);   
//VA<32M,即PID*0x02000000作为该进程起始地址
else
    MVA = VA;               //VA>=32M

如:假设两个进程1、2运行时的VA都是0-32M,则他们的MVA分别是0x02000000-0x03ffffff、0x04000000-0x05ffffff,这样进程切换就省事多了,不必进行重建页表等工作。

    但是,这同时带来了中断跳转的问题。当发生异常时,需要跳到0x0位置的异常向量表,这个0x0应该是VA,且小于32M,如果开启了MMU,就会被转换为MVA,而不同的PID产生不同的MVA,这就导致异常向量表的地址不统一了。所以,Linux采取了将0x0位置的向量表映射到高地址0xffff0000处,就没有上述的问题了,看了半天原来是这么回事。。。

    接下来,就是MVA如何映射PA的工作。s3c2410的datasheet中说到4中映射方案,其中最方便的是段(section)操作,具体见《s3c2410 MMU》的后半文。

这篇关于为什么中断向量表重映射到高地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295635

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu