QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 849|回复: 1

内核中的内存管理的问题

[复制链接]
发表于 2004-7-20 16:07:51 | 显示全部楼层 |阅读模式
在内核中,有一个这样的宏
#define __pa(x)  (...)

我想问一下,linux采用的是页式内存管理的,那么线性地址是不是要经过页式映射才能得到物理地址呢? 怎么凭一个宏就简单的得到了物理地址了,那么程序员是不是很容易的从线性地址就知道它在内存中的位置,从而可以修改它?

是不是这是在内核中,是系统空间,不是用户空间,程序员要访问会被拒绝?


还有 ,在 情景分析一书中 ,有这么一段

static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk, unsigned cpu)
{
  ......
  asm volatile("movl %0, %%cr3": :"r" (__pa(next->pgd)))
  ......
}

  我们以前曾用这行代码说明__pa()的用途,这里将下一个进程的页面目录pgd的物理地址装入寄存器%%cr3,页即CR3。细心的读者可能会问:这样,在这一行以前和以后CR3的值不一样,也就是使用不同的页面目录,不会使程序的执行不能连续吗?答案是,这是在内核中。不管什么进程,一旦进入内核就进入了系统空间,都有相同的页面映射,所以不会有问题。

我要问的是:
        上面的嵌入的汇编代码也是用到了__pa(x)宏,好象没有经过页式映射。还有,上面提到的   

        系统空间都有相同的页面映射

到底是什么意思(这也说明内核也有页面映射),是不是一定的线性地址就有一定的物理地址?

请高手指教!
 楼主| 发表于 2004-7-21 11:01:53 | 显示全部楼层
怎么回事,怎么没有人回帖啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 08:47 , Processed in 0.080739 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表