linux 内存管理 , 我们感知三类内存管理
系统内存管理 A
内核线程内存管理 A
用户进程内存管理
内核态 A
用户态 B
这几种应该分为两类 , A B
A 类共用一个内存( 虚拟和物理)
B 类每个进程有一个内存( 虚拟和物理)
另外,我们知道在硬件上 内存是 物理内存
但在 linux 里面, 内存 除了物理内存 还包括 swap空间代表的空间( 这里是将硬盘当作内存)
A
系统启动的时候, 会打印如下的信息
[ 09 : 52 : 32 ] Memory: 243936 K/ 262144 K available ( 5120 K kernel code, 6569 K rwdata, 736 K rodata, 1024 K init, 2134 K bss, 18208 K reserved, 0 K cma- reserved)
[ 09 : 52 : 32 ] Virtual kernel memory layout:
[ 09 : 52 : 32 ] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 09 : 52 : 32 ] DTCM : 0xfffe8000 - 0xfffec000 ( 16 kB)
[ 09 : 52 : 32 ] ITCM : 0xfffe0000 - 0xfffe4000 ( 16 kB)
[ 09 : 52 : 32 ] fixmap : 0xffc80000 - 0xfff00000 ( 2560 kB)
[ 09 : 52 : 32 ] vmalloc : 0xd0800000 - 0xff800000 ( 752 MB)
[ 09 : 52 : 32 ] lowmem : 0xc0000000 - 0xd0000000 ( 256 MB)
[ 09 : 52 : 32 ] . text : 0xc0008000 - 0xc0600000 ( 6112 kB)
[ 09 : 52 : 32 ] . init : 0xc0700000 - 0xc0800000 ( 1024 kB)
[ 09 : 52 : 32 ] . data : 0xc0800000 - 0xc0e6a548 ( 6570 kB)
[ 09 : 52 : 32 ] . bss : 0xc0e6a548 - 0xc108013c ( 2135 kB)
对于一个进程来说
. code . rodata . data . bss . stack . heap 是我们要关心的
一个内核线程的 这些段 在哪里
. code : c000 8000 以上 ( 例如 c0111314处为sys_fork)
. stack : 对应的 thread_info + 8 KB 下面
对于一个进程来说
. code . rodata . data . bss . stack . heap 是我们要关心的
一个内核线程的 这些段 在哪里
. code : c000 8000 以上 ( 例如 c0111314处为sys_fork)
. stack : 对应的 thread_info + 8 KB 下面
B
对于一个进程来说
. code . rodata . data . bss . stack . heap 是我们要关心的
一个用户进程用户态的 这些段 在哪里
. code : 0001 0000 左右
. stack : bece 0000 左右
知识点应该是 VMA
free 命令 的分析
xxxx@lenovo: ~ $ free - m
total used free shared buff/ cache available
Mem: 7884 1842 3759 140 2282 5601
Swap: 3905 0 3905
可以看到, 总的内存分为两块
1. 物理内存 Mem
2. swap硬盘 Swap
Mem 上分类
1. total : linux运行时可管理的物理内存的总大小,( 经内核参数 mem= xxx,和 memblock_reserve 后) 的 内存大小,不等于 实际物理内存的总大小
2.u sed : 已经使用的大小,经 alloc_page 申请的大小
3. shared : 共享内存大小,主要用于进程间通信
4. buff/ cache : buff即buffers, 用来给块设备做缓存。cache即page cache,用来给打开的文件做缓存。
5.f ree : 未被分配的物理内存大小
6. available : 当内存短缺时,系统可以回收 buff/ cache 中的 可回收部分
Swap上分类
1. total : 应该是swap分区的大小
2.u sed : 应该是实际物理内存 置换到 swap分区的大小 , 当 此值大于0 ,表示内存紧张
3.f ree : free = total - used