- 论坛徽章:
- 0
|
回复 5# amarant
>assume: x86, 2.6.3x, 物理内存1G,
>则由896+8M开始的一块128M的物理内存,linux称为high_memory.
>那么这一块128M内存,是不是由内核和进程共享的?
>这段物理内存最终是被谁用并不确定,内核和进程都可能用它。
>即内核通过vmalloc()可以分配到这块物理内存,
>而进程在向内核请求分配内存时也有可能分配到这块物理内存?
>嗯
>还是说内核是"排它"性的,仅仅由vmalloc()使用?
我猜还有其他可以用。
如果只能是vmalloc分配并使用,那么即使建立映射后,进程岂不是总要执行系统调用变成内核权限才能访问高端物理地址?(vmap可以再次映射已分配的高端物理页,但是返回的地址还是在线性地址内)
ioremap的用法不清楚,也许ioremap可以映射通过vmalloc获得的高端物理地址到用户地址空间,也许是能直接映射高端物理地址。
>再assume: x86, 2.6.3x物理内存512m
>此时没有high_memory.这种情况下内核的vmalloc()在哪部分的物理内存中
>那么就不存在物理内存的high_memory。这时候,分配得到的页还是ZONE_NORMAL或者ZONE_DMA的页。
此时就没有页描述来对应high_memory。
vmalloc建立映射时,被映射的高端物理地址是通过alloc_page分配的,而且参数是GFP_KERNEL | GFP_HIGHMEM,现在没有highmen,于是使用通用的GFP_KERNEL,GFP_KERNEL
应该是优先分配在NORMAL区域,然后是DMA区域。 |
|