TreeMind树图在线AI思维导图
当前位置:树图思维导图模板IT互联网互联网干货内核非连续思维导图

内核非连续思维导图

  收藏
  分享
免费下载
免费使用文件
U67362080 浏览量:42022-09-15 13:18:40
已被使用0次
查看详情内核非连续思维导图

Linux中有关内核非连续的思维导图,包括非连区的数据结构、创建一个非连续区的结构、分配非连续内存区等

树图思维导图提供 内核非连续思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 内核非连续思维导图  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:cf0a13b0ffd4326b7f0a90b85b77fd64

思维导图大纲

内核非连续思维导图思维导图模板大纲

非连续内存区

CPU 访问的都是虚拟内存

首先,非连续内存处于 3GB 到 4GB 之间,也就是处于内核空间

PAGE_OFFSET 为 3GB,high_memory 为保存物理地址最高值的变量

VMALLOC_START 为非连续区的的起始地址,定义于 include/i386/pgtable.h 中

在物理地址的末尾与第一个内存区之间插入了一个 8MB(VMALLOC_OFFSET)的区间

是一个安全区

是为了“捕获”对非连续区的非法访问

每个非连续内存区的大小都是 4096 的倍数

非连续区的数据结构

描述非连续区的数据结构为 struct vm_struct,定义于 include/linux/vmalloc.h 中

非连续区组成一个单链表,链表第一个元素的地址存放在变量 vmlist 中

Addr 域是内存区的起始地址

size 是内存区的大小加 4096(安全区的大小)

创建一个非连续区的结构

函数 get_vm_area()创建一个新的非连续区结构,其代码在 mm/vmalloc.c 中

在单链表中插入一个元素

调用了 kmalloc()和 kfree()函数

分别用来为 vm_struct 结构分配内存和释放所分配的内存

分配非连续内存区

vmalloc()函数给内核分配一个非连续的内存区

vmalloc()最终调用的是__vmalloc()函数,该函数的代码在 mm/vmalloc.c 中

函数主要参数

pgd_offset_k()宏导出这个内存区起始地址在页目录中的目录项

pmd_alloc()为新的内存区创建一个中间页目录

子主题 3alloc_area_pmd()为新的中间页目录分配所有相关的页表,并更新页的总目录

调用 pte_alloc_kernel()函数来分配一个新的页表,之后再调用 alloc_area_pte()

为页表项分配具体的物理页面

从 vmalloc_area_pages()函数可以看出,该函数实际建立起了非连续内存区到物

相关思维导图模板

执行函数思维导图思维导图

树图思维导图提供 执行函数思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 执行函数思维导图  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:6fa6d5a6f25276068bc7a36624cca0cb

程序执行思维导图思维导图

树图思维导图提供 程序执行思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 程序执行思维导图  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:b2c03df9afd131772df55f29fcbc1f0b