IA32的三种地址 逻辑地址:机器语言指令仍用这种地址指定一个操作数的地址或一条指令的地址。 这种寻址方式在Intel的分段结构中表现得尤为具体,它使得MS-DOS或Windows程序员把程序分为若干段。每个逻辑地址都由一个段和偏移量组成。 线性地址:线性地址是一个32位的无符号整数,可以表达高达2 ...
分类:
其他好文 时间:
2017-05-20 01:06:18
阅读次数:
242
http://blog.xiaohansong.com/2015/10/05/Linux内存寻址之分页机制/ 在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程。下面,我们就来看看更加重要和复杂的分页机制。 分页机制在段机制之后进行,以完成线性—物理地址的转 ...
分类:
系统相关 时间:
2017-05-20 01:05:44
阅读次数:
233
连接上篇博文,先说说存储器组织 FLASH,RAM,FAMC,AHB到APB的桥(片上外设)被组织在同一个4GB的线性地址空间内 可以访问的存储器空间被分成8个主要块即为BLock0~7,每块512MB。 (1)存储器映射 存储器本身不具有地址信息,其地址由芯片厂商或用户分配,这个分配地址的过程就叫 ...
分类:
其他好文 时间:
2017-05-17 18:25:55
阅读次数:
255
一、mmap()mmap()函数是用来将设备内存线性地址映射到用户地址空间。(1)首先映射基地址,再通过偏移地址寻址;(2)unsigned char *map_cru_base=(unsigned char * )mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRIT ...
分类:
其他好文 时间:
2017-05-15 16:24:22
阅读次数:
357
本博文引自我的知乎回答:Linux线性地址,逻辑地址和虚拟地址的关系?为了防止歧义,以下术语都用英文。部分术语不做解释了,不然答案就太长了。以下讲解都是以代码段为例在Intel平台下,逻辑地址(logicaladdress)是selector:offset这种形式,selector是CS寄存器的值,offset是..
分类:
系统相关 时间:
2017-05-03 23:59:26
阅读次数:
400
逻辑地址:是由程序产生与段相关的偏移部分,如:逻辑地址 = &变量的地址-该变量的段基地址 线性地址:线性地址=段基地址+变量相对于段基地址的偏移部分,如果内存不分页或层,那么线性地址就相当于物理地址 逻辑地址(logical address) Intel为了兼容,将远古时代的段式内存管理方式保留了 ...
分类:
其他好文 时间:
2017-05-01 09:54:05
阅读次数:
320
虚拟地址当然是跟物理地址是映射关系,物理地址就是实实在在的硬件地址, 为了更好的管理内存, 系统使用线性地址空间. 这个是系统跟进程都共享的先行地址空间.虚拟地址 分为两部分.为什么? 原因很简单. 虚拟地址是相对于进程来说的.每个进程只懂得自己的虚拟地址空间,但是进程与OS还有其他进程以及各种外部 ...
分类:
其他好文 时间:
2017-02-07 01:14:04
阅读次数:
152
在上一篇博文里,我们已经看到Linux如何有效地利用80x86的分段和分页硬件单元把逻辑地址转换为线性地址,在由线性地址转换到物理地址。那么我们的应用程序如何使用这些逻辑地址,整个内存的地址布局又是怎样的?打一个比方,内存就像一座城市,而居住在这个城市里的市民就像是各个进程,一个市民吃喝拉撒睡,当然 ...
分类:
系统相关 时间:
2017-01-16 10:52:25
阅读次数:
248
分页机制是实现虚拟存储的关键,位于线性地址与物理地址之间,当系统内存实际上被分成很多凌乱的块时,它可以建立一个大而连续的内存空间的映象,好让程序不用操心和管理这些分散的内存块。分页机制增强了分段机制的性能。本篇文章为大家带来了内存分页的基本原理,两级页表如何发挥强大的内存管理功能。 ...
分类:
其他好文 时间:
2017-01-09 00:33:34
阅读次数:
204
4个断点寄存器DR0~DR3用来设置断点的线性地址。 DR6为状态寄存器,DR7为控制寄存器。 DR4和DR5保留。当CR4.DE==1时,访问DR4和DR5产生#UD异常;IF CR4.DE==0,访问DR4和DR5将是对DR6和DR7的访问。 下面这张表非常清楚: |-------------- ...
分类:
其他好文 时间:
2017-01-07 13:59:56
阅读次数:
276