Linux 内核管理类
【Linux 内核】Linux 内核源码几个重要的入口源文件及函数介绍 ( 系统初始化 | 内存管理 | 虚拟文件系统 | 网络管理 )
文章目录一、系统初始化二、内存管理三、虚拟文件系统四、网络管理一、系统初始化系统初始化 的入口源码是 " linux-5.6.18\init\ " 目录下的 main.c 源文件 ;二、内存管理内存管理 的源码在 " linux-5.6.18\mm\ " 目录下 ;内存管理模块源码中 , 核心类是 " linux-5.6.18\mm\memory.
日期 2023-06-12 10:48:40【Linux 内核】进程管理 task_struct 结构体 ② ( state 字段 | stack 字段 | pid 字段 | tgid 字段 | pid_links 字段 )
文章目录一、task_struct 结构体字段分析1、state 字段2、stack 字段3、pid字段4、tgid 字段5、pid_links 字段在 Linux 内核 中 , " 进程控制块 " 是通过 task_struct 结构体 进行描述的 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct 结构体的 ;task_struc
日期 2023-06-12 10:48:40【Linux 内核】进程管理 - 进程优先级 ② ( prio 调度优先级 | static_prio 静态优先级 | normal_prio 正常优先级 | rt_priority 实时优先级 )
文章目录一、进程优先级相关字段1、prio 字段 ( 调度优先级 )2、static_prio 字段 ( 静态优先级 )3、normal_prio 字段 ( 正常优先级 )4、rt_priority 字段 ( 实时优先级 )二、三种进程的四种优先级总结一、进程优先级相关字段在 linux-5.6.18\include\linux\sched.h 头文件中 task_struct " 进程
日期 2023-06-12 10:48:40【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
文章目录一、RCU 机制二、RCU 机制的优势与弊端三、RCU 机制的链表应用场景一、RCU 机制RCU , 英文全称是 " Read-Copy-Update “ , 对应的中文名称是 ” 读取-拷贝-更新 “ , 这是 Linux 内核中的 ” 同步机制 " ;Linux 内核中还有其它同步机制 , 如 " 原子操作 " , " 读写信号量 &q
日期 2023-06-12 10:48:40【Linux 内核 内存管理】RCU 机制 ② ( RCU 机制适用场景 | RCU 机制特点 | 使用 RCU 机制保护链表 )
文章目录一、RCU 机制适用场景二、RCU 机制特点三、使用 RCU 机制保护链表一、RCU 机制适用场景在上一篇博客 【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 ) 中 , 分析了 RCU 机制的优势与弊端 ;优势 : RCU 的优势是 " 读者 " ( 读取共享数据的线程 ) 不需要承担
日期 2023-06-12 10:48:40【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )
文章目录一、Linux 系统 动态分配堆内存 方式二、brk 系统调用 动态分配堆内存一、Linux 系统 动态分配堆内存 方式Linux 系统中 , 提供了 2 种方式 进行 " 动态分配堆内存 " 操作 ;① brk 系统调用 : 该方式本质是 设置 " 进程数据段 “ 的 结束地址 , 将该 ” 结束地址 " 向 高或低 移动 , 实现堆内存的 扩张或
日期 2023-06-12 10:48:40【Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )
文章目录一、虚拟地址空间布局架构二、用户虚拟地址空间划分一、虚拟地址空间布局架构在 64 位的 Linux 操作系统中 , " ARM64 架构 " 并 不支持 64 位的虚拟地址 , 最大只支持 48 位的虚拟地址 , 64 位地址太大 , 并不需要那么大的内存空间 ;" ARM64 架构 " 中 , Linux 系统的 " 内核虚拟地址 “ 与
日期 2023-06-12 10:48:40【Linux 内核 内存管理】虚拟地址空间布局架构 ④ ( 内存描述符 mm_struct 结构体成员分析 | hiwater_rss | start_code | start_brk )
文章目录一、mm_struct 结构体成员分析1、hiwater_rss 成员2、hiwater_vm 成员3、total_vm 成员4、locked_vm 成员5、start_code、end_code、 start_data、 end_data 成员6、start_brk、 brk、 start_stack 成员7、arg_start、 arg_end、env_start、 env_end 成
日期 2023-06-12 10:48:40【Linux 内核 内存管理】虚拟地址空间布局架构 ⑥ ( mm_struct 结构体源码 | vm_area_struct 结构体源码 )
文章目录一、mm_struct 结构体源码二、vm_area_struct 结构体源码一、mm_struct 结构体源码mm_struct 结构体 , 定义在 Linux 内核源码的 linux-4.12\include\linux\mm_types.h#359 位置 ;mm_struct 结构体中的 mmap 成员就是 vm_area_struct 结构体 类型的 , 该成员描述 "
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )
文章目录一、vm_area_struct 结构体成员分析1、shared 成员2、anon_vma_chain 成员3、anon_vma 成员二、vm_area_struct 结构体完整源码在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存映射相关数据结构 ⑤ ( vm_area_struct 结构体成员分析 | vm_pgoff 成员 | vm_file 成员 | vm_private_data )
文章目录一、vm_area_struct 结构体成员分析1、vm_pgoff 成员2、vm_file 成员3、vm_private_data 成员二、vm_area_struct 结构体完整源码在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理系统调用 ③ ( mmap 创建内存映射原理 | 分配虚拟内存页 | 物理地址与虚拟地址进行映射 | 并分配物理内存页 | mmap 库函数与内核系统调用函数 )
文章目录一、mmap 创建内存映射原理 ( 分配虚拟内存页 | 物理地址与虚拟地址进行映射 | 产生缺页异常并分配物理内存页 )1、分配虚拟内存页2、物理地址与虚拟地址进行映射3、产生缺页异常并分配物理内存页二、mmap 库函数与 mmap 内核系统调用函数一、mmap 创建内存映射原理 ( 分配虚拟内存页 | 物理地址与虚拟地址进行映射 | 产生缺页异常并分配物理内存页 )1、分配虚拟内存页分配
日期 2023-06-12 10:48:40【Linux 内核 内存管理】内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 )
文章目录一、mmap 创建内存映射代码示例1、fopen 打开或创建文件2、lseek 设置文件大小3、mmap 函数使用4、munmap 删除内存映射二、完整代码示例一、mmap 创建内存映射代码示例1、fopen 打开或创建文件使用 fopen 函数 , 打开一个文件 , 此时文件可能不存在 , 需要创建文件 ; // 打开文件 fd = open(argv[1], O_CREA
日期 2023-06-12 10:48:40【Linux 内核 内存管理】mmap 系统调用源码分析 ① ( mmap 与 mmap2 系统调用 | Linux 内核中的 mmap 系统调用源码 )
文章目录一、mmap 与 mmap2 系统调用二、Linux 内核中的 mmap 系统调用源码一、mmap 与 mmap2 系统调用mmap 创建 " 内存映射 " 的 系统调用 有 2 种实现 , mmap 和 mmap2 ;2 者区别是 :mmap 偏移单位是 " 字节 " ,mmap2 偏移单位是 " 页 " ,但是在 arm 64
日期 2023-06-12 10:48:40【Linux 内核 内存管理】mmap 系统调用源码分析 ③ ( vm_mmap_pgoff 函数执行流程 | vm_mmap_pgoff 函数源码 )
文章目录一、vm_mmap_pgoff 函数执行流程二、vm_mmap_pgoff 函数源码调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff 函数 , 继续向下执行 ;在 sys_mmap_pgoff 系统调用函数
日期 2023-06-12 10:48:40【Linux 内核 内存管理】munmap 系统调用源码分析 ① ( munmap 系统调用函数执行流程 | munmap 函数源码 | vm_munmap 函数源码 )
文章目录一、munmap 系统调用函数执行流程二、munmap 系统调用函数源码三、vm_munmap 函数源码一、munmap 系统调用函数执行流程munmap 系统调用函数 的作用是 " 删除内存映射 " , 该函数有 2 个参数 , 分别是 unsigned long addr 和 size_t, len , 前者是 内存映射 的 起始地址 , 后者是 内存映射 的 长度
日期 2023-06-12 10:48:40【Linux 内核 内存管理】munmap 系统调用源码分析 ② ( do_munmap 函数执行流程 | do_munmap 函数源码 )
文章目录一、do_munmap 函数执行流程二、do_munmap 函数源码munmap 系统调用函数 调用了 vm_munmap 函数 , 在 vm_munmap 函数 中 , 又调用了 do_munmap 函数 , do_munmap 函数 是 删除 内存映射 的 核心函数 ;一、do_munmap 函数执行流程do_munmap 函数执行流程 :根据 unsigned long start
日期 2023-06-12 10:48:40【Linux 内核 内存管理】物理内存组织结构 ⑤ ( 内存区域 zone 类型简介 | 内存区域类型zone_type 枚举源码分析 | zone_type 枚举源码 )
文章目录一、内存区域 zone 类型简介二、内存区域类型 zone_type 枚举源码分析1、ZONE_DMA 直接内存访问区域2、ZONE_DMA32 内存区域3、ZONE_NORMAL 普通内存区域4、ZONE_HIGHMEM 高端内存区域5、ZONE_MOVABLE 可移动区域6、ZONE_DEVICE 设备区域三、zone_type 枚举源码内存管理系统 3级结构 :① 内存节点 Node
日期 2023-06-12 10:48:40【Linux 内核 内存管理】引导内存分配器 bootmem ① ( 引导内存分配器 bootmem 工作机制 | 引导内存分配器 bootmem 的描述 bootmem_data 结构体 )
文章目录一、引导内存分配器 bootmem 简介1、引导内存分配器 bootmem 引入2、引导内存分配器 bootmem 工作机制二、引导内存分配器 bootmem 描述 bootmem_data 结构体一、引导内存分配器 bootmem 简介1、引导内存分配器 bootmem 引入Linux 内核 初始化 时 , 需要进行内存分配 , 启动阶段的 内存分配 与 运行时的 内存分配 机制不同 ;
日期 2023-06-12 10:48:40【Linux 内核 内存管理】引导内存分配器 bootmem ③ ( bootmem 引导内存分配器算法 | 低端内存映射 | 内存记录位图 | 最先适配算法 | 内存分配记录 | 内存操作函数 )
文章目录一、bootmem 引导内存分配器算法1、低端内存映射2、内存记录位图3、最先适配算法4、内存分配记录二、bootmem 引导内存分配器 内存操作 函数 ( alloc_bootmem | free_bootmem )一、bootmem 引导内存分配器算法bootmem 引导内存分配器算法 ;1、低端内存映射低端内存映射 : 内核启动过程中 , 将 " 低端内存 " 交
日期 2023-06-12 10:48:40【Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )
文章目录一、memblock_region 内存块区域二、memblock_region 结构体成员分析1、base 成员2、size 成员3、flags 成员4、nid 成员三、memblock 分配器标志枚举1、MEMBLOCK_NONE2、MEMBLOCK_HOTPLUG3、MEMBLOCK_MIRROR4、MEMBLOCK_NOMAP一、memblock_region 内存块区域membl
日期 2023-06-12 10:48:40【Linux 内核 内存管理】memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )
文章目录一、memblock 分配器编程接口二、memblock_add 函数原型分析三、memblock_add 函数源码一、memblock 分配器编程接口memblock 分配器提供了如下编程接口 :① 添加内存 : memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ;② 删除内存 : memblock_rem
日期 2023-06-12 10:48:40【Linux 内核 内存管理】memblock 分配器编程接口 ④ ( memblock_alloc 函数 | memblock_alloc_base 函数 )
文章目录一、memblock_alloc 函数分析二、memblock_alloc_base 函数分析三、__memblock_alloc_base 函数分析四、memblock_alloc_base_nid 函数分析五、memblock_alloc_range_nid 函数分析memblock 分配器提供了如下编程接口 :① 添加内存 : memblock_add 函数 , 将 内存块区域 添加
日期 2023-06-12 10:48:40【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )
文章目录一、free_area 空闲区域结构体源码分析二、分配标志位三、GFP_ZONE_TABLE 标志位区域类型映射表四、分配标志位对应的内存区域类型一、free_area 空闲区域结构体源码分析上一篇博客 【Linux 内核 内存管理】分区伙伴分配器 ① ( 分区伙伴分配器源码数据结构 | free_area 空闲区域数组 | MAX_ORDER 宏定义 | 空闲区域的页最大阶数 ) 中 ,
日期 2023-06-12 10:48:40【Linux 内核 内存管理】分区伙伴分配器 ③ ( 备用内存区域列表 | ZONELIST_FALLBACK 枚举 | zoneref 结构体 | 备用内存区域借用物理页规则 )
文章目录一、备用内存区域列表二、ZONELIST_FALLBACK、ZONELIST_NOFALLBACK 枚举三、zoneref 结构体四、备用内存区域借用物理页规则一、备用内存区域列表假如 首选 内存节点 或 内存区域 不能满足 内存分配请求 ,就需要从 " 备用内存区域 " 借用 物理页 进行 内存分配 , 该操作需要遵守如下算法规则 ;" 内存节点 "
日期 2023-06-12 10:48:40【Linux 内核 内存管理】分区伙伴分配器 ⑦ ( z->watermark[WMARK_MIN] 最低水位计算 | min_free_kbytes 初始化 )
文章目录一、z->watermark[WMARK_MIN] 最低水位计算二、min_free_kbytes 初始化过程三、最低水位计算过程四、nr_free_buffer_pages 函数原型五、nr_free_zone_pages 函数原型一、z->watermark[WMARK_MIN] 最低水位计算在 内存区域 的水位控制机制 中 , 在 内存区域 zone 结构体中的 wate
日期 2023-06-12 10:48:40【Linux 内核 内存管理】物理分配页 ⑨ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | retry 标号代码分析 )
文章目录一、retry 标号代码分析二、retry 标号完整代码在 【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 ) 博客中 , 分析了 __alloc_pages_nodemask 函数分配物理页流程如下 :首先 , 根据 gfp_t gfp_mask 分配标志位
日期 2023-06-12 10:48:40管理Linux内核:精准程序管理之道(linux内核程序)
Linux内核是操作系统的核心,它提供核心平台的服务,管理着硬件设备的访问,并处理所有的系统调用。在企业计算环境中,Linux内核的可靠性、稳定性、可用性和安全性越来越重要。就像大型企业的心脏,Linux内核的管理是有效率的,以确保可靠的运行。 管理Linux内核的首要任务是预防问题,提高系统的可靠性、稳定性和可用性。有时候,Linux内核可能会出现潜在的异常。为了避免这种情况,应采取一些措施
日期 2023-06-12 10:48:40Linux内核管理:拥抱新技术的未来(linux内核管理)
Linux内核管理是指Linux内核的管理和控制,也称为系统核心管理。Linux系统在操作系统的管理中起着重要的作用,它是建立在多用户,多任务和多虚拟机系统上的一个完整的基础架构。Linux内核管理将用户界面和应用程序作为用户接口,使管理任务更加容易。 Linux内核管理不仅用于管理本地服务器,而且可以用于管理分布式多服务器系统,以确保高效的资源运行。由于Linux的安全性、性能和可扩展性,它
日期 2023-06-12 10:48:40Linux内核管理风格
Original: Documentation/process/management-style.rst Translator: Alex Shi alex.shi@linux.alibaba.com 内核社区管理是一个很独特很有挑战性的事情, 各系统维护者拥有很大的权利,却又无法命令和管理社区参与者; 一边不停的拒绝人们各种功能提交,一边却希望开发者留在自己的领域继续贡献力量。这篇文章向您揭
日期 2023-06-12 10:48:40探究Linux内核堆管理机制(linux内核堆)
Linux内核作为一种开源的操作系统,它拥有丰富的功能和灵活的特性。在其内核中,堆管理机制是一项重要的内容。堆管理机制可以帮助Linux系统管理内存,使进程能够有效地分配和释放内存,从而让Linux内核得以执行。 Linux系统提供了两种内存管理模型:slab分配器和堆管理机制;slab分配器是一种简单的内存管理方案,它将内存分割成固定大小的缓存块,缓存块的总数由预定义的常量决定;而堆管理机制
日期 2023-06-12 10:48:40