Turbo8332467
驱动牛犊
驱动牛犊
  • 注册日期2004-05-19
  • 最后登录2007-01-30
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1518回复:5

关于线性地址与物理地址的问题

楼主#
更多 发布于:2004-06-06 17:59
  开发基于AMCC5933的PCI驱动,5933文档中说明使用DMA方式传输数据时,起始地址寄存器存放的应该是内存的物理地址。我想问一下,在VC里用malloc或new函数返回的指针是逻辑地址还是物理地址。如果是逻辑地址的话怎么样才能把它转成物理地址?
Turbo8332467
驱动牛犊
驱动牛犊
  • 注册日期2004-05-19
  • 最后登录2007-01-30
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-10 22:19
那就是说编程者不用管指针对应的物理地址是什么,只要把这个指针直接赋给寄存器就可以,是这样吗?
walkonthesky
驱动中牛
驱动中牛
  • 注册日期2003-11-26
  • 最后登录2012-11-06
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-07 15:50
由CPU完成逻辑地址到物理地址的转化
0x 1111 1111 1111 1111 1111 1111 1111 1111
   |----------||----------| |------------|
    页目录地址 页目录项地址  物理内存地址

总共寻址2^32=4G
其中,页目录含2^10个目录
每个目录含2^10个目录项
每个目录项含2^12个物理内存地址

  
[img]http://www.driverdevelop.com/forum/upload/walkonthesky/2004-07-08_2004-07-07_b847.gif[/img]
Turbo8332467
驱动牛犊
驱动牛犊
  • 注册日期2004-05-19
  • 最后登录2007-01-30
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-07 13:26
    不好意思,我是新手,能不能再讲详细点。是不是要自己编程来实现转换,还是有专门的函数,或者直接把malloc返回的指针赋给那个起始地址寄存器?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2004-06-07 12:27
可以把物理地址影射为线性地址来操作
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
blue215
驱动牛犊
驱动牛犊
  • 注册日期2004-01-05
  • 最后登录2005-01-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-06 20:49
malloc和new返回的应该是逻辑地址,因为都是在堆上分配的内存.
怎么转换成物理地址的话,我想操作系统的虚-实地址转换会完成这个功能吧.
游客

返回顶部