校正内存划分说明.

Signed-off-by: lion.chan <cy187lion@sina.com>
This commit is contained in:
lion.chan 2022-04-24 22:40:11 +08:00
parent 64849f5a8b
commit 8761d8b2b6
2 changed files with 4 additions and 0 deletions

View File

@ -86,6 +86,8 @@ Linux 保留内核空间最顶部 FIXADDR_TOP4GB 的区域作为保留区,
1. 每个 CPU 占用一块空间. 1. 每个 CPU 占用一块空间.
2. 在每个 CPU 占用的那块空间中,又分为多个小空间,每个小空间大小是 1 个 page每个小空间用于一个目的这些目的定义在 kmap_types.h 中的 km_type 中。 2. 在每个 CPU 占用的那块空间中,又分为多个小空间,每个小空间大小是 1 个 page每个小空间用于一个目的这些目的定义在 kmap_types.h 中的 km_type 中。
通过 kmap_atomic() 可实现固定内存的临时映射。该函数可以用在中断处理函数和可延迟函数的内部,从不阻塞。
### 永久内存映射区 ### 永久内存映射区
接下来,如果系统配置了永久内存映射区,则位于固定内存映射区之下的就是一段永久内存映射区,其范围为 PKMAP_BASEFIXADDR_START定义如下 接下来,如果系统配置了永久内存映射区,则位于固定内存映射区之下的就是一段永久内存映射区,其范围为 PKMAP_BASEFIXADDR_START定义如下
@ -103,6 +105,8 @@ Linux 保留内核空间最顶部 FIXADDR_TOP4GB 的区域作为保留区,
通常情况下,这个空间是 4M 大小,因此仅仅需要一个页表即可,内核通过 pkmap_page_table 来寻找这个页表。通过 kmap(),可以把一个 page 映射到这个空间来。由于这个空间是 4M 大小,最多能同时映射 1024 个 page。因此对于不使用的的 page及应该时从这个空间释放掉也就是解除映射关系通过 kunmap() ,可以把一个 page 对应的线性地址从这个空间释放出来。 通常情况下,这个空间是 4M 大小,因此仅仅需要一个页表即可,内核通过 pkmap_page_table 来寻找这个页表。通过 kmap(),可以把一个 page 映射到这个空间来。由于这个空间是 4M 大小,最多能同时映射 1024 个 page。因此对于不使用的的 page及应该时从这个空间释放掉也就是解除映射关系通过 kunmap() ,可以把一个 page 对应的线性地址从这个空间释放出来。
可用 alloc_pages() 函数获得永久内存映射。
### 动态内存映射区 ### 动态内存映射区
在物理区和高端映射区之间为动态内存映射区VMALLOC_STARTVMALLOC_END用于 vmalloc() 函数它的前部与直接映射区有一个隔离带后部与高端映射区也有一个隔离带vmalloc() 区域定义如下: 在物理区和高端映射区之间为动态内存映射区VMALLOC_STARTVMALLOC_END用于 vmalloc() 函数它的前部与直接映射区有一个隔离带后部与高端映射区也有一个隔离带vmalloc() 区域定义如下:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 71 KiB