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

Linux 内存分配流程及 kmalloc 解析

手把手教你分析 Linux 启动流程 上一次咱们分析了 Linux 的启动流程和初始化流程,今天主要分析一下内存方面的初始化和常见的内存分配方式。...2、slab 分配器基于字节来分配,特别适用于需要频繁分配几十个字节的结构体,我们经常使用的 kmalloc 就是基于 slab 分配器。...其中最常用的就是 malloc 和 kmalloc,区别在于一个在用户空间,一个在内核空间,并且 kmalloc 的使用需要注意竞争,需要指明 flag 。...前两个最常用,GFP_KERNEL 代表在使用 kmalloc 分配内存时,如果内存准备不足,会等待,也就是会睡眠。...2、有的人可能知道 Linux 有一个 bootmem 分配器,这个是在Linux初始化过程中的一个临时分配器,他会在 setup_arch 函数中初始化,然后在 mm_init 中关掉,只是在伙伴系统出现之前的临时使用

2.5K10

深度解读 Linux 内核级通用内存池 —— kmalloc 体系

[] 数组中定义的内存块尺寸非常的多,但实际上 kmalloc 体系所支持的内存块尺寸与 slab allocator 体系的实现有关,在 Linux 内核中 slab allocator 体系的实现分为三种...kmalloc 体系所能支持的内存块尺寸范围由 KMALLOC_SHIFT_LOW 和 KMALLOC_SHIFT_HIGH 决定,它们被定义在 /include/linux/slab.h 文件中: #...image.png kmalloc 内存池中的内存来源类型定义在 /include/linux/slab.h 文件中: enum kmalloc_cache_type { // 规定 kmalloc...二维数组中,位于文件:/include/linux/slab.h 中。...关于 alloc_pages 函数的详细内容,感兴趣的同学可以回看下笔者之前的文章 《深入理解 Linux 物理内存分配全链路实现》。

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

kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)

他们定义在tools/virtio/linux/kernel.h?v=4.7, line 46 这两个函数返回一个指向内存块的指针, 其内存块至少要有size大小. 所分配的内存区在物理上是连续的....v=4.7, line 46 tools/virtio/linux/kernel.h?v=4.7, line 52 tools/virtio/linux/kernel.h?...v=4.7, line 60 include/linux/slab.h, line 466 include/linux/slab.h?v=4.7, line 620 mm/slob.c?...v=4.7, line 3853 3 分配掩码(gfp_mask标志) 3.1 分配掩码 前述所有函数中强制使用的mask参数,到底是什么语义? 我们知道Linux将内存划分为内存域....v=4.7, line 12~374, 共计26个掩码信息, 因此后面__GFP_BITS_SHIFT = 26. 3.2 掩码分类 Linux中这些掩码标志gfp_mask分为3种类型 : 类型 描述

6.3K21

Linux之vmstat命令

要深入了解linux内存运行机制,需要知道下面提到的几个方面: 首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面...其次,linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux...vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V]...默认单位为K(1024 bytes) -V:显示vmstat版本信息。...因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。

50520

Linux之vmstat命令

要深入了解linux内存运行机制,需要知道下面提到的几个方面: 首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面...其次,linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux...vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V]...默认单位为K(1024 bytes) -V:显示vmstat版本信息。...因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。

59010

Linux之vmstat命令

要深入了解linux内存运行机制,需要知道下面提到的几个方面: 首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面...其次,linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux...vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V]...默认单位为K(1024 bytes) -V:显示vmstat版本信息。...因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。

56000

一天一个 Linux 命令(40):vmstat 命令

wide output -t, --timestamp show timestamp -h, --help display this help and exit -V,...默认单位为K(1024 bytes) -V 显示vmstat版本信息 delay:刷新时间间隔。如果不指定,只显示一条结果。 count:刷新次数。...因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。...要深入了解Linux内存运行机制,需要知道下面提到的几个方面: 首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面...其次,Linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,Linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux

32610

7 款可替代 top 命令的工具!(二)

,今天我再来给大家推荐 7 款可替代 top 命令的工具,看完这两篇替代品的文章相信能让你对 Linux 操作系统下一个小小的命令大开眼界。...2.1 ctop 参数选项 -a:只显示活动的容器 -f:设置初始过滤字符串 -h:显示帮助对话框 -i:反转默认颜色 -r:反向容器排序顺序 -s:选择容器排序字段 -v:输出版本信息并退出 三、iftop...iotop 可以在 Debian、Ubuntu、Fedora、CentOS 7/8、RHEL 7/8、其他 Linux 发行版的操作系统上运行。...n--delay=n:每 n 秒更新一次显示的信息,默认是每 3 秒 -o --once:显示一次后退出 -s S --sort=S:指定排序标准(如下)进行排序 -h--help:显示帮助信息 -V-...-version:显示程序版本 排序标准: a:按活动对象的数量排序 b:按每个 slab 的对象排序 c:按缓存大小排序 l:按 slabs 排序 v:按活跃 slabs 数量排序 n:按名称排序 o

1.2K10

Linux-v10.0 笔记(一)

8、中国大陆的Linux发行版 红旗Linux(RedflagLinux) ,冲浪Linux(Xteam Linux) ,蓝点Linux , GNU/Linux,OpenDesktop等等 。...通过sudo可以提高普通用户的操作权限 使用者权限:普通用户 语法如下: sudo -V sudo -h sudo -l sudo -v sudo -k sudo -s sudo -H sudo...[ -b ] [ -p prompt ] [ -u username/#uid] -s sudo command 参数说明: -V 显示版本编号 -h 会显示版本编号及指令的使用方式说明 -l 显示出自己...(执行 sudo 的使用者)的权限 -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码 -k 将会强迫使用者在下一次执行...我们通过root用户进入(如下图),上接上面的例子 我们的aaa文件的属主和属组都属于itcast(如下图) 我们现在通过chgrp命令将文件aaa的属组更改成root(其他也可以) chgrp -v

1.2K50

Linux】system V 消息队列 | system V 信号量(简单赘述)

@TOC 这两部分主要是了解即可,为后面学习做铺垫 1 . system V 消息队列(了解) ---- 为了让两个进程间通信 创建一个队列queue 进程A可以通过消息队列的系统调用接口,把自己的数据块链入队列中...这个队列就是一种共享资源 进程A想要读取数据时,只需要在队列中读取不是自己的数据 接口 创建消息队列 , 输入 man msgget 指令 key值含义与msgflg选项 不懂具体可以看 :system v...每一个消息队列都有自己的结构体对象,对应的结构体对象包含当前消息队列的属性 查看消息队列 输入 ipcs -q 指令 删除消息队列 ipcs -q msqid值 即可删除 2.system V...进入自己的临界区,访问自己的临界资源 离开就要释放信号量资源,即count++ ,只要计数器进行了增加,就表示对应的资源进行了归还 ---- 进入临界区前申请信号量(P操作),退出临界区前释放信号量(V操作

14220
领券