【随笔】linux内存管理概览和线程内核栈

本文概述了Linux内存管理的核心概念,包括虚拟内存、内存映射和物理内存。详细讨论了进程PCB、页表映射、物理内存结构以及内核栈在32位和64位系统上的差异。还介绍了缺页异常的处理流程,涉及do_page_fault、do_anonymous_page和do_swap_page等。最后提到了内存回收策略和OOM杀手机制。
摘要由CSDN通过智能技术生成

一、内存管理学什么

Linux内存管理的三个大点:

  1. 虚拟内存(体现对内存的需求)
  2. 内存映射(虚拟内存映射物理内存)
  3. 物理内存(页面的供应)

 

二、知识点

  • 进程PCB:task_struct
  • 虚拟内存结构:task_struct -> mm_struct -> vm_area_struct
  • 页表映射:mm_struct -> pgd、分段、分页、多级页表、pte(page table entry)
  • 物理内存结构:mem_map、pglist_data、zone、free_area_struct、page
  • 物理内存管理:buddy、slab、kswap、watermark、LRU、active & inactive page
    • /proc/sys/vm/min_free_kbytes:调整回收内存的阈值,可以通过/proc/zoneinfo查看high、low、min的阈值,min_free_kbytes主要是用来设置min阈值,通过min阈值来设置low和hight
    • /proc/sys/vm/swappniess:调整内存回收时回收匿名页的积极程度,或者说调整内存回收时回收匿名页和file-backed page的倾向
  • 页内型:anno page和file-backed page
  • 交换区:swap_info_struct、swap cache、swap_entry
  • 内核栈:void * stack&thread_info、32bit和64bit系统上的差异
  • 缺页异常:do_page_fault(do_falut, do_anonymous_page, do_swap_page)+pte+swap_entry
  • OOM:oom-killer和几个选项(panic_on_oom、oom_kill_allocating_task、/proc/pid/oom_score_adj)

 

三、概览

3.1 一般流程

要贯穿Linux整个内存管理的逻辑,起点是进程PCB,即task_struct(创建进程的时候,load_elf_binary会根据可执行文件的ELF格式把程序加载到内存并做好VMA的映射,此时每个进程的内核栈在32bit系统上会默认会分配8KB内存,在64bit系统上会分配16kb内存,内核栈kernel stacks详情见下文3.2),其中的mm_struct&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值