☰
vfs_caches_init 函数
2026/10/11 1:41:03 网站建设 项目流程

vfs_caches_init

  1. 以系统总物理内存页数(totalram_pages)为参数,根据内存大小动态调整各缓存的容量(即计算预留内存,调整可用页数)
  2. kmem_cache_create 函数,初始化全局变量names_cachep的slab缓存(可供 kmem_cache_zalloc / kmem_cache_free 使用的缓存对象)
  3. dcache_init 函数,初始化全局变量dentry_cache的slab缓存(可供 kmem_cache_zalloc / kmem_cache_free 使用的缓存对象)
  4. inode_init 函数,初始化全局变量inode_cachep的slab缓存(可供 kmem_cache_zalloc / kmem_cache_free 使用的缓存对象)
  5. files_init 函数,初始化全局变量filp_cachep的slab缓存(可供 kmem_cache_zalloc / kmem_cache_free 使用的缓存对象),计算并设置系统最大打开文件数
  6. mnt_init 函数,完成下列任务:

6.1通过 kmem_cache_create 函数,初始化全局变量mnt_cache的slab缓存(可供 kmem_cache_zalloc / kmem_cache_free 使用的缓存对象)
6.2通过alloc_large_system_hash函数,为全局变量mount_hashtable分配一块连续物理内存并初始化这块内存中的每个桶,使其成为一个空的链表头,为后续的mount插入和查找做好准备
6.3通过alloc_large_system_hash函数,为全局变量mountpoint_hashtable分配一块连续物理内存并初始化这块内存中的每个桶,使其成为一个空的链表头,为后续的mountpoint插入和查找做好准备
6.4通过kernfs_init()->kmem_cache_create 函数,初始化全局变量kernfs_node_cache的slab缓存(可供 kmem_cache_zalloc / kmem_cache_free 使用的缓存对象)
6.5通过sysfs_init()函数,将新的sysfs文件系统插入到全局链表 file_systems 中,并设置sysfs_root_kn=sysfs_root->kn
6.6通过 kobject_create_and_add 函数,创建/sys/fs目录(在新目录中不创建默认属性文件)
6.7通过 init_rootfs 函数,将新的rootfs和ramfs文件系统插入到全局链表 file_systems 中
6.8通过 init_mount_tree 函数,创建root(struct dentry)来代表rootfs 文件系统根目录(即VFS 根目录 /),并将当前进程(init_task,即 PID 0 的空闲进程)的工作目录设置为root

  1. 通过 bdev_cache_init 函数,初始化全局变量bdev_cachep的slab缓存,将新的bdev文件系统插入到全局链表file_systems中,最后创建一个dentry来代表bdev文件系统根目录(不挂载任何目录,用户空间不可见)
  2. 通过 chrdev_init 函数,初始化字符设备驱动的主设备号全局映射表cdev_map(structkobj_map)

vfs_caches_init函数


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询