首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构源码分析 | zone 结构源码 )

文章目录 一、内存区域 zone 简介 二、zone 结构源码分析 1、watermark 成员 2、lowmem_reserve 成员 3、zone_pgdat 成员 4、pageset 成员 5...内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 内存页 Page , Linux 内核中 , 使用 上述 3 级结构 描述 和 管理 " 物理内存 "...; 一、内存区域 zone 简介 ---- " 内存节点 " 是内存管理的 最顶层结构 , " 内存节点 " 再向下划分 , 就是 " 内存区域 " zone , " 内存区域 " 在 Linux 内核中使用...struct zone 结构类型进行描述 , zone 枚举定义在 Linux 内核源码的 linux-4.12\include\linux\mmzone.h#350 位置 ; 每个 " 内存区域..." , 都使用 1 个 zone 结构 描述 ; 二、zone 结构源码分析 ---- 1、watermark 成员 watermark 表示 " 页分配器 " 使用的 水线 ; /* zone

4.5K30

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需的特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用

23.4K32
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

    文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...不同版本的 Linux 内核 区别 : 系统调用 : 其系统调用是相同的 , 新的版本可能会增加新的系统调用 ; 设备文件 : 各内核版本的设备文件都是相同的 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

    21.3K30

    Linux 内核】进程管理 task_struct 结构 ① ( task_struct 结构引入 | task_struct 代码示例 )

    文章目录 一、task_struct 结构 二、task_struct 结构代码示例 一、task_struct 结构 ---- 在 Linux 操作系统 中 , 进程 作为 调度的实体 , 需要将其抽象为..." 进程控制块 " , 英文全称 " Progress Control Block " , 简称 PCB ; 在 Linux 内核 中 , " 进程控制块 " 是通过 task_struct 结构...进行描述的 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct 结构的 ; task_struct 结构linux-5.6.18\include\linux...\sched.h 头文件中定义 , 第 629 ~ 1300 行就是 struct task_struct 结构定义的代码 ; 二、task_struct 结构代码示例 ---- struct..._*, siglock protected: */ unsigned long jobctl; /* Used for emulating ABI behavior of previous Linux

    3.4K30

    驱动开发:内核遍历进程VAD结构

    在上一篇文章《驱动开发:内核中实现Dump进程转储》中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descriptor即虚拟地址描述符...每一个进程都有自己单独的VAD结构树,这个结构通常在EPROCESS结构里面里面,在内核调试模式下使用dt _EPROCESS可得到如下信息。...图片VAD结构是如何被添加的?通常情况下系统调用VirtualAllocate等申请一段堆内存时,则会在VAD树上增加一个结点_MMVAD结构,需要说明的是栈并不受VAD的管理。..._EPROCESS +0x078 u4 : +0x080 FileObject : Ptr64 _FILE_OBJECT结构...图片既然手动可以遍历出来,那么自动化也并不难,首先定义头文件vad.h同样这是微软定义,如果想要的到最新的,自己下载WinDBG调试内核输入命令。

    67710

    2.1 Windows驱动开发:内核链表与结构

    在Windows内核中,为了实现高效的数据结构操作,通常会使用链表和结构相结合的方式进行数据存储和操作。...内核提供了一个专门用于链表操作的数据结构LIST_ENTRY,可以用来描述一个链表中的每一个节点。使用链表来存储结构时,需要在结构中嵌入一个LIST_ENTRY类型的成员变量,用来连接相邻的节点。...当我们在内核中调用OutputDebugString函数输出信息时,可以通过DbgView查看输出结果,我们手动上述代码后将可以在DbgView中看到输出的进程信息,如下图所示;如果需要在内核模式中返回一个结构...,可以通过定义一个结构指针作为函数参数,将结构指针作为函数返回值来实现。...返回结构,则可以这样来写代码。

    28920

    驱动开发:内核中的链表与结构

    Windows内核中是无法使用vector容器等数据结构的,当我们需要保存一个结构数组时,就需要使用内核中提供的专用链表结构LIST_ENTRY通过一些列链表操作函数对结构进行装入弹出等操作,如下代码是本人总结的内核中使用链表存储多个结构的通用案例...首先实现一个枚举用户进程功能,将枚举到的进程存储到链表结构体内。...DWORD Pid;UCHAR ProcessName[2048];DWORD Handle;LIST_ENTRY ListEntry;}ProcessList;// 根据进程ID返回进程EPROCESS结构失败返回...PsLookupProcessByProcessId(Pid, &eprocess);if (NT_SUCCESS(Status)){return eprocess;}return NULL;}// 内核链表操作...GetAllProcess();Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;}运行后将可以在DbgView中看到输出的进程信息:图片如果需要返回一个结构

    44120

    Linux 内核 内存管理】Linux 内核堆内存管理 ③ ( CPU 计数器瓶颈 | per-CPU 计数器 | Linux 内核 percpu_counter 结构源码 )

    文章目录 一、CPU 计数器瓶颈 二、per-CPU 计数器及 percpu_counter 结构源码 一、CPU 计数器瓶颈 ---- 如果 操作系统 中有 多个 CPU , 假设只有一个 CPU...正在访问计数器 , 其它 CPU 需要等待计数器释放 , 才能访问 CPU 计数器 , 这里 CPU 计数器会出现瓶颈 , 影响系统性能 ; 二、per-CPU 计数器及 percpu_counter 结构源码...---- Linux 内核中 , 引入了 " per-CPU 计数器 “ , 用于加速 ” SMP 系统 " 的计数器操作 ; " per-CPU 计数器 " 在 Linux 内核中被定义为 percpu_counter...结构 , 该 结构 定义在 Linux 内核源码 的 linux-5.6.18\include\linux\percpu_counter.h#20 中 ; raw_spinlock_t lock...-5.6.18\include\linux\percpu_counter.h#20

    1.1K10

    Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构 | mm_struct 结构中的 start_brk、brk 成员 )

    文章目录 一、堆内存管理 二、内存描述符 mm_struct 结构 三、mm_struct 结构中的 start_brk、brk 成员 一、堆内存管理 ---- Linux 操作系统中的 " 堆内存...内核实现 , 开发者 不知道 堆的管理细节 , 只通过 " 系统调用 " 调用相关函数 ; " brk 系统调用 " 负责 扩展 和 收缩 堆内存 ; 在 " 内存描述符结构 " mm_struct...结构 ---- mm_struct 结构 定义在 Linux 内核源码 include\linux\mm_types.h#375 源码中 ; mm_struct 结构 源码 : struct mm_struct...-5.6.18\include\linux\mm_types.h#375 三、mm_struct 结构中的 start_brk、brk 成员 ---- mm_struct 结构中的 start_brk...、brk 成员 , 分别是 " 堆内存 " 在 " 虚拟地址空间 " 的 开始 和 结束 地址 , 其定义在 Linux 内核源码的 linux-5.6.18\include\linux\mm_types.h

    90131

    4.6 Windows驱动开发:内核遍历进程VAD结构

    那么这个VAD结构在哪里呢? 每一个进程都有自己单独的VAD结构树,这个结构通常在EPROCESS结构里面里面,在内核调试模式下使用dt _EPROCESS可得到如下信息。...在内核调试模式下,使用 dt _EPROCESS 命令可以显示出该结构的定义和各个字段的信息。其中与 VAD 结构树相关的字段为 VadRoot 和 VadHint。...VadRoot 字段指向一个 MM_AVL_TABLE 结构,该结构包含了一个平衡二叉树,用于存储该进程的虚拟地址空间描述符节点。...在这个过程中,内核会在当前进程的 VAD 树中创建一个新的 MMVAD 结构,用于描述这个新分配的虚拟地址空间的起始地址、大小、保护属性等信息。...同时,内核会将这个 MMVAD 结构插入到当前进程的 VAD 树中,并通过平衡二叉树的方式来维护这个树的结构,使得树的查询和插入操作都能够以 O(log n) 的时间复杂度完成。

    57590

    Linux并发(task_struct结构

    Linux下的进程也好,线程也罢,在内核中统统都以任务(task)的面目示人,他们用一样的内核数据结构来表示。...拓展: 内核中用一个非常大的结构来表达进程或者线程(统称任务task),下面是这个结构的掠影: ?...如果没什么意外,这个结构可能是这个宇宙中最大的单个变量了,一个结构就有好几k那么大,想想他包含了一个进程的所有信息,这么庞大也不足为怪了。...LINUX内核代码纷繁复杂,千头万绪,这个结构是系统进程在执行过程中所有涉及的方方面面的缩影,包括系统内存管理子系统、进程调度子系统、虚拟文件系统等等,以这个所谓的PCB为切入点,是一个很好的研究内核的窗口...总之,当一个程序文件被执行的时候,内核将会产生这么一个结构,来承载所有该活动实体日后运行时所需要的所有资源,随着进程的运行,各种资源被分配和释放,是一个动态的过程。

    1.3K20

    Linux 内核】调度器 ② ( sched_class 调度类结构源码 | 源码路径 linux-5.6.18kernelschedsched.h )

    文章目录 一、调度器 二、sched_class 调度类结构 一、调度器 ---- 上一篇博客 【Linux 内核】调度器 ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级...| 抢占式调度器 | Linux 进程状态 | Linux 内核进程状态 ) 介绍了 " 调度器 " 概念 , Linux 内核的 " 进程调度 " 是按照 设计好的调度算法 安排的 , 该算法对应的功能模块..." 抢占式调度器 " 概念 : 如果 " 调度器 " 支持 " 就绪状态 " 与 " 运行状态 " 之间可以相互转换 , 则该调度器称为 " 抢占式调度器 " ; 二、sched_class 调度类结构...---- Linux 内核源码 linux-5.6.18\kernel\sched\sched.h 中 , 定义的 struct sched_class 调度类结构 , 就是 " 调度器 " 对应的类...; struct sched_class 调度类结构源码如下 : struct sched_class { const struct sched_class *next; #ifdef CONFIG_UCLAMP_TASK

    62330

    Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构 | 内存节点描述 | 内存节点 pglist_data 结构 | pglist_data 结构源码 )

    文章目录 一、内存节点描述 二、内存节点 pglist_data 结构 三、pglist_data 结构源码 内存管理系统 3 级结构 : ① 节点 Node , ② 区域 Zone , ③ 页...Page , Linux 内核中 , 使用 上述 3 级结构 描述 和 管理 " 物理内存 " ; 一、内存节点描述 ---- Linux 内核中 , 内存节点 ( Node ) 是 " 内存管理...在 不连续内存 的 NUMA 架构中 , 根据 " 物理地址是否连续 " 划分 " 内存节点 " , 每个 物理地址连续 的内存块 是一个 " 内存节点 " ; 二、内存节点 pglist_data 结构...---- Linux 内核中 , 使用 pglist_data 结构 描述 " 内存节点 " , 该结构定义在 Linux 内核源码中的 linux-4.12\include\linux\mmzone.h...---- Linux 内核中 , 使用 pglist_data 结构 描述 " 内存节点 " , 该结构定义在 Linux 内核源码中的 linux-4.12\include\linux\mmzone.h

    1.8K10

    Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct 结构成员分析 | vm_ops 成员 | vm_operations_struct 结构成员分析 )

    文章目录 一、vm_area_struct 结构成员分析 1、vm_ops 成员 二、vm_operations_struct 结构成员分析 1、open 函数指针 2、close 函数指针 3...四、vm_operations_struct 结构完整源码 在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构成员分析 | vm_start |...【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 ) 中..., 分析了 vm_area_struct 结构中的 vm_mm vm_page_prot vm_flags 成员作用 ; 在博客 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct...*vm_ops; 二、vm_operations_struct 结构成员分析 ---- vm_operations_struct 结构 定义在 Linux 内核源码的 linux-4.12\include

    1.8K30
    领券