内存管理与进程调度

本文详细介绍了Linux操作系统的内存管理和进程调度。在内存管理方面,涉及内核如何通过alloc_pages、kmalloc、vmalloc等分配物理和逻辑内存,以及如何处理内外碎片问题。用户进程通过malloc和free进行内存申请和释放,并阐述了brk和mmap的使用场景。在进程调度部分,讲解了内核栈、进程描述符、调度规则,如实时进程优先、CFS算法,并描述了调度框架和虚拟运行时间的概念。最后,文章提到了进程切换的开销和不同场景下的切换策略。
摘要由CSDN通过智能技术生成

一、内存管理

1、内核

    使用alloc_pages申请物理页帧

    使用kmalloc申请专用/通用内存块、vmalloc申请物理不连续,逻辑相连内存

    使用kmap建立高端地址映射

    外碎片:空闲内存零散分布,无法满足大内存需求(伙伴系统解决)

    内碎片:申请一块内存真正使用的只有小部分(slab,通用内存块解决)

2、用户进程

1)申请内存

    使用malloc动态分配,分配的内存并不是立即调入,而是拥有该内存的访问权,等到真正访问时,引发缺页异常调入

malloc为glibc库函数,实际使用brk/mmap系统调用

    申请内存<128k时,调用brk,简单移动堆指针

    >128时调用mmap进行内存映射  边界值可通过mallopt进行设定

    free一段内存并不是马上还给os,通过malloc依次分配A、B、C三块内存,free A,堆指针无法收缩,保留A供下次调用malloc时使用;free B C(B+C 超过 128k)此时才收缩堆指针,将C这段内存还给os

2)访问内存

    cpu引用一个虚拟地址,TLB命中,直接得到物理地址

    未命中,通过cr3寄存器存放全局目录地址,一层层索引+偏移得到物理地址

    将物理地址发送给高速缓存,缓存命中直接得到对应数据,未命中则继续访问下级缓存或直接访问内存

3、内核与用户空间的数据传递

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值