物理地址映射是什么

合集下载

地址映射

地址映射

地址映射飞思卡尔MC9S12系列单片机地址影射以及分页问题对于用MCU的人来说,不一定要明白HCS12(x) memory map的机制和联系。

因为如果没有系统地学习操作系统和编译原理之类的课程,确实有些难度。

并且,对于DG128 XS128这样的MCU,默认的emory分配方式已经够用了。

从这个意义上讲,搞清楚memory map似乎不必要。

但是,你有没有RAM不够用的情况?有没有想定义变量到FLASH ROM的情况?有没有因为欲提高寻址效率而定义变量到非分页区的情况?有没有写EEPROM但没写成功的情况?飞思的memory非常灵活,通过地址映射来提高效率是芯片制造商的一惯作风(当然,首先这个CPU要有这种寻址和内存映射转换机制),但是,纵观HCS12(x) memory map的东西,真是做到极限了。

用我以前的话讲是,用有限的资源获得无限的好处了。

看看DG128,64K的逻辑空间,映射之后RAM EEPROM FALSH ROM,都可以充分发挥作用,而且扩展FLASH也方便。

而XS128更高级一筹,有专门的MMC管理HCS12(x) memory map。

我大体上了解这两个片子的HCS12(x) memory map,因此就此谈谈理解和看法,如有错误,请大家不吝指出首先,说说6个概念。

1memory map 地址映射,不要理解成内存映射,内存是RAM。

2 为什么要映射?因为CPU的寻址是对物理地址操作,但是单片机的RESET之后只有相对地址。

相对地址,我理解为是一块一块的,不是连断的。

相对地址,顾名思义,是个相对的,没有映射之前,CPU是找不到他的,也用不了相对地址的数据。

粘一句百度上的解释:为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。

3 RAM,这个不多说,是存变量和栈的东西,高速,掉电即失。

4 EEPROM,这个是一种特别的FLASH。

linux中的IO端口映射和IO内存映射

linux中的IO端口映射和IO内存映射

linux中的IO端口映射和IO内存映射CPU地址空间(一)地址的概念1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。

物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存、BIOS等)。

在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。

物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32 bits地址线的x86处理器中,物理地址空间是2的32次方,即4GB,但物理RAM一般不能上到4GB,因为还有一部分要给总线用(总线上还挂着别的许多设备)。

在PC机中,一般是把低端物理地址给RAM用,高端物理地址给总线用。

2)总线地址:总线的地址线或在地址周期上产生的信号。

外设使用的是总线地址,CPU 使用的是物理地址。

物理地址与总线地址之间的关系由系统的设计决定的。

在x86平台上,物理地址就是总线地址,这是因为它们共享相同的地址空间——这句话有点难理解,详见下面的“独立编址”。

在其他平台上,可能需要转换/映射。

比如:CPU需要访问物理地址是0xfa000的单元,那么在x86平台上,会产生一个PCI总线上对0xfa000地址的访问。

因为物理地址和总线地址相同,所以凭眼睛看是不能确定这个地址是用在哪儿的,它或者在内存中,或者是某个卡上的存储单元,甚至可能这个地址上没有对应的存储器。

3)虚拟地址:现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要MMU(Memory Management Unit)的支持。

MMU通常是CPU的一部分,如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(物理内存)接收,这称为物理地址(Physical Address),如果处理器启用了MMU,CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address),而MMU将这个地址翻译成另一个地址发到CPU芯。

计算机网络原理IP地址与物理地址的映射

计算机网络原理IP地址与物理地址的映射

计算机网络原理IP地址与物理地址的映射计算机网络原理IP地址与物理地址的映射实现从IP地址到物理地址的映射是非常重要的,任何一次从IP层以上(包括IP层)发起的数据传输都使用IP地址,一旦使用IP地址,必然涉及这种映射,否则物理网络便本不能识别地址信息,无法进行数据传输。

IP地址到物理地址映射有表格方式和非表格方式两种方式。

表格方式是事先在各主机中建立一张IP地址,物理地址映射表。

这种方式很简单,但是映射表需要人工建立及人工维护,由于人的速度太慢,因此该方式不适应大规模和长距离网络或映射关系变化频繁的网络。

非表格方式采用全自动技术,地址映射完全由机器自动完成。

根据物理地址类型的不同,非表格方式又分为两种,即直接映射和动态联编。

直接映射。

物理地址可以分为固定物理地址和可自由配置的物理地址两类,对于可自由配置的物理地址,经过特意配置后,可以将它编入IP地址码中,这样,物理地址的解析就变得非常简单,即将它从IP地址的主机号部分取出来便是。

这种方式就是直接映射。

直接映射直截了当,但适用范围有限,当IP地址中主机号部分容纳不下物理地址时,这种方式就会失去作用。

另外,像以太网这样的物理网络,其物理地址是固定的,一旦网络接口更换,物理地址随之改变,采用直接映射也会有问题。

动态联编。

像以太网这样的物理网络具备广播能力。

针对这种具备广播能力、物理地址固定的网络,TCP/IP设计了一种巧妙的动态联编方式进行地址解析,并制定了相应标准,这就是ARP。

动态联编ARP的原理是,在广播型网络上,一台计算机A欲解析另一台计算机B 的IP地址BP,计算机A首先广播一个ARP请求文,请求IP地址为BP的计算机回答其物理地址。

网上所有主机都将收到该ARP请求,但只有B识别出自己的IP地址,并做出应答,向A发回一个ARP响应,回答自己的IP地址。

这种解析方式就是动态联编。

为提高效率,ARP使用了高速缓存技术(caching),在每台使用ARP的主机中,都保留了一个专用的内存区(即高速缓存),存放最近获得的IP地址-物理地址联编。

物理地址的含义

物理地址的含义

物理地址的含义物理地址是什么?物理地址的含义是什么? 小编整理了物理地址的相关资料,下面大家跟着小编一起去了解一下吧。

物理地址的含义MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。

IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32 位的,而MAC地址则是48位的。

MAC 地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08: 00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。

只要你不去更改自己的MAC地址,那么你的MAC地址在世界是惟一。

静态IP:在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址,称为IP地址。

通过IP地址就可以访问到每一台主机。

IP地址由4部分数字组成,每部分数字对应于8位二进制数字,各部分之间用小数点分开。

如某一台主机的IP地址为:211.152.65.112 ,Internet IP地址由NIC(Internet Network Information Center)统一负责全球地址的规划、管理;同时由Inter NIC、APNIC、RIPE三大网络信息中心具体负责美国及其它地区的IP地址分配。

固定IP:固定IP地址是长期固定分配给一台计算机使用的IP 地址,一般是特殊的服务器才拥有固定IP地址。

动态IP:因为IP地址资源非常短缺,通过电话拨号上网或普通宽带上网用户一般不具备固定IP地址,而是由ISP动态分配暂时的一个IP地址。

普通人一般不需要去了解动态IP地址,这些都是计算机系统自动完成的。

公有地址(Public address)由Inter NIC(Internet Network Information Center 因特网信息中心)负责。

逻辑地址、线性地址、物理地址和虚拟地址理解

逻辑地址、线性地址、物理地址和虚拟地址理解

逻辑地址(Logical Address)是指由程式产生的和段相关的偏移地址部分。

例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。

只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。

应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。

应用程式员虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。

线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层。

程式代码会产生逻辑地址,或说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。

如果启用了分页机制,那么线性地址能再经变换以产生一个物理地址。

若没有启用分页机制,那么线性地址直接就是物理地址。

Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。

物理地址(Physical Address)是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。

如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。

如果没有启用分页机制,那么线性地址就直接成为物理地址了。

虚拟内存(Virtual Memory)是指计算机呈现出要比实际拥有的内存大得多的内存量。

因此他允许程式员编制并运行比实际系统拥有的内存大得多的程式。

这使得许多大型项目也能够在具有有限内存资源的系统上实现。

一个非常恰当的比喻是:你不必非常长的轨道就能让一列火车从上海开到北京。

你只需要足够长的铁轨(比如说3公里)就能完成这个任务。

采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。

虚拟内存与物理内存的地址映射解析

虚拟内存与物理内存的地址映射解析

在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。

一早期的内存分配机制在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。

当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。

那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存的呢?下面通过实例来说明当时的内存分配方法:某台计算机总的内存大小是128M,现在同时运行两个程序A和B,A需占用内存10M,B需占用内存110。

计算机在给程序分配内存时会采取这样的方法:先将内存中的前10M分配给程序A,接着再从内存中剩余的118M中划分出110M分配给程序B。

这种分配方法可以保证程序A和程序B都能运行,但是这种简单的内存分配策略问题很多。

图一早期的内存分配方法问题1:进程地址空间不隔离。

由于程序都是直接访问物理内存,所以恶意程序可以随意修改别的进程的内存数据,以达到破坏的目的。

有些非恶意的,但是有bug的程序也可能不小心修改了其它程序的内存数据,就会导致其它程序的运行出现异常。

这种情况对用户来说是无法容忍的,因为用户希望使用计算机的时候,其中一个任务失败了,至少不能影响其它的任务。

问题2:内存使用效率低。

在A和B都运行的情况下,如果用户又运行了程序C,而程序C需要20M大小的内存才能运行,而此时系统只剩下8M的空间可供使用,所以此时系统必须在已运行的程序中选择一个将该程序的数据暂时拷贝到硬盘上,释放出部分空间来供程序C使用,然后再将程序C的数据全部装入内存中运行。

可以想象得到,在这个过程中,有大量的数据在装入装出,导致效率十分低下。

问题3:程序运行的地址不确定。

当内存中的剩余空间可以满足程序C的要求后,操作系统会在剩余空间中随机分配一段连续的20M 大小的空间给程序C使用,因为是随机分配的,所以程序运行的地址是不确定的。

存储器管理-无答案

存储器管理-无答案

存储器管理一、填空题1.常用的内存管理方法有①、②、③、④、⑤。

2.作业的地址空间指的是①,地址空间中的地址称为②。

内存地址的集合为③,它的地址称为④。

3.在存储器的管理中,常用的方式来摆脱主存容量的限制。

4.虚拟存储器的容量是由计算机系统的①和②确定的。

5.分区式分配可分为①和②。

6.固定分区,一般采用①重定位法;可变分区,一般采用②重定位法。

7.可变分区的主存分配算法有①、②和③。

8.实现虚拟存储技术,需要有一定的物质基础,其一是①,其二是②,其三是③9.对换技术也是一种在多道环境下用于的方法之一。

10.在分区式的管理中,各用户进程和作业所要求的内存容量要受到的限制,可以使用覆盖和交换技术来扩充内存。

11.在页式存储管理中,内存的物理地址空间被划分成大小相等的①,进程的虚拟地址空间被划分成相应的若干②。

12.页式管理中,页式虚地址与内存物理地址的映射是由①和②完成的。

13.在页式管理中,页表一般驻留在①的某个固定区域,取一个数据或指令至少要访问②次内存。

14.请求页式管理是一种①页式管理,它的②与静态页式管理相同,也是通过查找③来完成的,但是静态页式管理要求作业或进程在④全部装入⑤。

15.页式虚拟存储管理中,页表中“标志位”的作用是,一般系统的页表中还设置有“改变位”,其作用是判断某页是否在内存中被改变。

16.在请求页式管理中,当硬件地址变换机构发现所需的页不在①时,产生②中断信号,由③作出相应的处理。

17.置换(淘汰)算法是当系统发生缺页时,在内存中没有①时被调用的,它的目的是选出一个被②的页面。

如果内存中有足够的③存放所调入的页,则不必使用④。

18.在页式管理中,“主存分配表”的作用是①,它是整个系统②。

“主存分配表”可采用③方法。

19.在段式管理中,分配内存是以①为单位,每段分配一个②区。

由于各段长度③,所以这些存储区的大小不一,而且同一进程的各段之间不要求④。

20.在段式管理中,每个段是一个有意义的①,所以段的②和③更有意义,同时也容易实现。

地址映射

地址映射

ARM简介及编程1.ARM简介(摘录)ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。

技术具有性能高、成本低和能耗省的特点。

适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。

ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。

利用这种合伙关系,ARM 很快成为许多全球性RISC标准的缔造者。

目前,总共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。

至于软件系统的合伙人,则包括微软、升阳和MRI等一系列知名公司。

ARM架构是面向低预算市场设计的第一款RISC微处理器。

2.产品介绍ARM提供一系列内核、体系扩展、微处理器和系统芯片方案。

由于所有产品均采用一个通用的软件体系,所以相同的软件可在所有产品中运行(理论上如此)。

典型的产品如下。

①CPU内核--ARM7:小型、快速、低能耗、集成式RISC内核,用于移动通信。

-- ARM7TDMI(Thumb):这是公司授权用户最多的一项产品,将ARM7指令集同Thumb扩展组合在一起,以减少内存容量和系统成本。

同时,它还利用嵌入式ICE调试技术来简化系统设计,并用一个DSP增强扩展来改迚性能。

该产品的典型用途是数字蜂窝电话和硬盘驱动器。

--ARM9TDMI:采用5阶段管道化ARM9内核,同时配备Thumb扩展、调试和Harvard总线。

在生产工艺相同的情况下,性能可达ARM7TDMI的两倍之多。

常用于连网和顶置盒。

②体系扩展-- Thumb:以16位系统的成本,提供32位RISC性能,特别注意的是它所需的内存容量非常小。

③嵌入式ICE调试由于集成了类似于ICE的CPU内核调试技术,所以原型设计和系统芯片的调试得到了极大的简化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

物理地址映射是什么
物理地址映射方法
一般情况下,linux系统中,进程的4gb内存空间被划分成为两个部分------用户空间和内核空间,大小分别为0~3g,3~4g。

用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核空间。

每个进程的用户空间都是完全独立、互不相干的,用户进程各自有不同的页表。

而内核空间是由内核负责映射,它并不会跟着进程改变,是固定的。

内核空间地址有自己对应的页表,内核的虚拟空间独立于其他程序。

3~4g之间的内核空间中,从低地址到高地址依次为:物理内存映射区—隔离带—vmalloc虚拟内存分配区—隔离带—高端内存映射区—专用页面映射区—保留区。

【内核空间内存动态申请】
主要包括三个函数:kmalloc(), __get_free_pages, vmalloc。

kmalloc(), __get_free_pages申请的内存位于物理地址映射区,而且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏移,因此存在较简单的转换关系。

而vmalloc申请的内存位于vmalloc虚拟内存分配区(这些区都是以线性地址为度量),它在虚拟内存空间给出一块连续的内存区,实质上,这片连续的虚拟内存在物理内存中并不一定连续,而vmalloc申请的虚
拟内存和物理内存之间也没有简单的换算关系。

因为vmalloc申请的在虚拟内存空间连续的内存区在物理内存中并不一定连续,可以想象为了完成vmalloc,新的页表需要被建立,因此,知识调用vmalloc来分配少量内存是不妥的。

一般来讲,kmalloc用来分配小于128k的内存,而更大的内存块需要用vmalloc来实现。

【虚拟地址与物理地址关系】
对于内核物理内存映射区的虚拟内存(用kmalloc(), __get_free_pages申请的),使用virt_to_phys()和phys_to_virt()来实现物理地址和内核虚拟地址之间的互相转换。

它实际上,仅仅做了3g的地址移位。

上述方法适用于常规内存(内核物理内存映射区),高端内存的虚拟地址与物理地址之间不存在如此简单的换算关系。

因为它涉及到了分离物理页的页表控制机制。

【ioremap】
在arm中,设备的寄存器或者存储块的这部分空间属于内存空间的一部分,我们称之为io内存。

在内核中访问io内存之前,我们只有io内存的物理地址,这样是无法通过软件直接访问的,需要首先用ioremap()函数将设备所处的物理地址映射到内核虚拟地址空间(3gb~4gb)。

然后,才能根据映射所得到的内核虚拟地址范围,通过访问指令访问这些io内存资源。

在将i/o内存资源的物理地址映射成核心虚地址后,理论上讲我们就可以象读写ram那样直接读写i/o内存资源了。

为了保
证驱动程序的跨平台的可移植性,我们应该使用linux中特定的函数来访问i/o内存资源,而不应该通过指向核心虚地址的指针来访问。

【mmap】
用mmap映射一个设备,意味着使用户空间的一段地址关联到设备内存上,这使得只要程序在分配的地址范围内进行读取或者写入,实际上就是对设备的访问。

这种数据传输是直接的,不需要用到内核空间作为数据转移的中间站。

remap_page_range函数的功能是构造用于映射一段物理地址的新页表,实现了内核空间与用户空间的映射。

在内核驱动程序的初始化阶段,通过ioremap()将物理地址映射到内核虚拟空间;在驱动程序的mmap系统调用中,使用remap_page_range()将该块rom映射到用户虚拟空间。

这样内核空间和用户空间都能访问这段被映射后的虚拟地址。

ioremap:
进程空间ç内核空间çio内存
其中,后面两个指的是同一段物理内存区域,只是一个为虚拟地址,一个为物理地址。

进程空间和内核空间对应着不同的物理地址,它们之间的数据传递,是实际的数据的拷贝。

mmap:
进程空间çio内存
其中,进程空间mmap得到的那段虚拟地址跟io内存对应着同一段物理地址。

这个过程没有额外的数据中转,读写都直接针对硬件的物理地址进行。

一般来讲,小数据量的传输用ioremap()就足够了,
【io内存的一般访问方法】
1. 首先是调用request_mem_region()申请资源,即告诉内核,本驱动正在使用这段物理内存,其他驱动不得访问它们。

在设备驱动模块加载或open()函数中进行。

2. 接着讲寄存器地址通过ioremap()映射到内核空间虚拟地址,之后就可以通过linux设备访问编程接口访问这些设备的寄存器了。

在设备驱动初始化、write(),read(),ioctl()函数中进行。

3. 访问完成之后,应对ioremap()申请的虚拟地址进行释放,并释放release_mem_region()申请的io内存资源。

在设备驱动模块卸载或release()函数中进行。

相关文档
最新文档