0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux操作系统知识讲解:走进Linux 内存使用场景

如意 来源:Linux学习 作者:佚名 2020-08-28 11:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

内存使用场景

out of memory 的时代过去了吗?no,内存再充足也不可任性使用。

1、内存的使用场景

page 管理

slab(kmalloc、内存池)

用户态内存使用(malloc、relloc 文件映射、共享内存)

程序的内存 map(栈、堆、code、data)

内核和用户态的数据传递(copy_from_user、copy_to_user)

内存映射(硬件寄存器、保留内存)

DMA 内存

2、用户态内存分配函数

alloca 是向栈申请内存,因此无需释放

malloc 所分配的内存空间未被初始化,使用 malloc() 函数的程序开始时(内存空间还没有被重新分配) 能正常运行,但经过一段时间后(内存空间已被重新分配) 可能会出现问题

calloc 会将所分配的内存空间中的每一位都初始化为零

realloc 扩展现有内存空间大小

a) 如果当前连续内存块足够 realloc 的话,只是将 p 所指向的空间扩大,并返回 p 的指针地址。这个时候 q 和 p 指向的地址是一样的

b) 如果当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p 指向的内容 copy 到 q,返回 q。并将 p 所指向的内存空间删除

3、内核态内存分配函数

函数分配原理最大内存其他_get_free_pages直接对页框进行操作4MB适用于分配较大量的连续物理内存kmem_cache_alloc基于 slab 机制实现128KB适合需要频繁申请释放相同大小内存块时使用kmalloc基于 kmem_cache_alloc 实现128KB最常见的分配方式,需要小于页框大小的内存时可以使用vmalloc建立非连续物理内存到虚拟地址的映射物理不连续,适合需要大内存,但是对地址连续性没有要求的场合dma_alloc_coherent基于_alloc_pages 实现4MB适用于 DMA 操作ioremap实现已知物理地址到虚拟地址的映射适用于物理地址已知的场合,如设备驱动alloc_bootmem在启动 kernel 时,预留一段内存,内核看不见小于物理内存大小,内存管理要求较高

4、malloc 申请内存

调用 malloc 函数时,它沿 free_chuck_list 连接表寻找一个大到足以满足用户请求所需要的内存块

Linux操作系统知识讲解:走进Linux 内存使用场景

free_chuck_list 连接表的主要工作是维护一个空闲的堆空间缓冲区链表

如果空间缓冲区链表没有找到对应的节点,需要通过系统调用 sys_brk 延伸进程的栈空间

Linux操作系统知识讲解:走进Linux 内存使用场景

5、缺页异常

通过 get_free_pages 申请一个或多个物理页面

换算 addr 在进程 pdg 映射中所在的 pte 地址

将 addr 对应的 pte 设置为物理页面的首地址

系统调用:Brk—申请内存小于等于 128kb,do_map—申请内存大于 128kb

Linux操作系统知识讲解:走进Linux 内存使用场景

6、用户进程访问内存分析

用户态进程独占虚拟地址空间,两个进程的虚拟地址可相同

在访问用户态虚拟地址空间时,如果没有映射物理地址,通过系统调用发出缺页异常

缺页异常陷入内核,分配物理地址空间,与用户态虚拟地址建立映射

Linux操作系统知识讲解:走进Linux 内存使用场景

7、共享内存

1) 原理

它允许多个不相关的进程去访问同一部分逻辑内存

两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案

两个运行中的进程共享数据,是进程间通信的高效方法,可有效减少数据拷贝的次数

Linux操作系统知识讲解:走进Linux 内存使用场景

2) shm 接口

shmget 创建共享内存

shmat 启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间

shmdt 将共享内存从当前进程中分离
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11893

    浏览量

    220211
  • 内存
    +关注

    关注

    9

    文章

    3271

    浏览量

    76680
  • 操作系统
    +关注

    关注

    37

    文章

    7473

    浏览量

    129875
  • DNA
    DNA
    +关注

    关注

    0

    文章

    244

    浏览量

    32189
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    系统讲解Linux目录结构

    /system/ 这些路径是什么意思?为什么配置文件在 /etc 而不是 /conf?/proc 里的数字都是什么?磁盘已经填满了,/var/log 里的日志能不能删?这篇文章从运维工程师的实际工作出发,系统讲解 Linux
    的头像 发表于 05-28 16:49 252次阅读

    RV1126B 评估板 Linux 系统操作与配置详解

    本文为创龙科技RV1126B 评估板 Linux 系统使用指南,涵盖启动方式、系统信息查询、内存 /eMMC 分区、开关机、用户管理、时间配置与静态 IP/DNS 设置等全
    的头像 发表于 05-20 11:05 114次阅读
    RV1126B 评估板 <b class='flag-5'>Linux</b> <b class='flag-5'>系统</b><b class='flag-5'>操作</b>与配置详解

    Linux内核参数sysctl.conf的工作原理和正确用法

    Linux 内核参数(kernel parameters)是操作系统运行时行为的控制开关,覆盖了内存管理、进程调度、网络协议栈、文件系统、虚拟内存
    的头像 发表于 05-18 16:21 160次阅读

    Linux内核三大核心模块深度解析:调度、内存与I/O

    Linux内核作为操作系统的核心,其进程调度、内存管理和文件I/O三大模块共同决定了系统的性能与稳定性。无论是多核服务器的高并发处理,还是嵌入式设备的资源受限
    的头像 发表于 03-12 09:00 374次阅读
    <b class='flag-5'>Linux</b>内核三大核心模块深度解析:调度、<b class='flag-5'>内存</b>与I/O

    Linux内核伙伴系统内存申请函数详解:从原理到实战

    Linux 内核中,内存管理是整个系统稳定运行的基石,而伙伴系统(Buddy System) 作为内核物理内存分配的核心机制,更是驱动开
    的头像 发表于 02-10 16:58 3808次阅读
    <b class='flag-5'>Linux</b>内核伙伴<b class='flag-5'>系统</b><b class='flag-5'>内存</b>申请函数详解:从原理到实战

    【「Linux 设备驱动开发(第 2 版)」阅读体验】+读深入理解Linux内核内存分配

    最近这段时间内存条、硬盘的价格飞涨,随着AI产品的兴起,大数据模型的应用,对硬件存储要求的更高。这节阅读有关Linux内存管理方面的知识Linu
    发表于 01-16 20:05

    Linux 已够强,国产操作系统为何仍要坚持?

    在中国做技术的人,或多或少都有过这样的疑问: “Linux 都这么成熟、这么好用了,国产操作系统还有必要搞吗?” 这不是少数人的困惑,而是整个行业几十年来反复讨论的问题。 但如果你深入工业、能源
    的头像 发表于 12-25 16:11 554次阅读

    解析Linux的进程、线程和协程

    一、基础概念 进程(Process) 进程是计算机中运行的程序的实例,它是操作系统中最基本的执行单元之一。每个进程都有自己的独立内存空间、系统资源和代码执行流。这意味着一个进程的崩溃通常不会
    发表于 12-22 11:00

    Linux驱动开发的必备知识

    内核基础知识: 1、熟悉 Linux 内核的架构、模块系统、进程管理、内存管理等。 了解内核的编译和加载过程。 2、C编程技能: 精通 C 语言编程,包括指针
    发表于 12-04 07:58

    EV10AS180A模数转换器支持哪些操作系统

    与这些硬件接口进行交互,从而实现对EV10AS180A的控制和数据读取。系统集成与应用场景:在将EV10AS180A集成到具体系统中时,用户可能会根据系统需求选择合适的
    发表于 11-18 09:18

    【书籍评测活动NO.67】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    数据结构、指针处理和内存分配;然后是掌握Linux系统的命令行操作,能够搭建开发环境。软件/硬件要求操作系统要求一台计算机,要求具有良好的网
    发表于 11-17 17:52

    单片机的操作系统

    RTX ‌:ARM官方推荐,与CMSIS-RTOS标准兼容,支持时间片轮转调度,适合汽车电子等硬实时任务。 ‌ ‌ 都江堰操作系统(djyos) ‌:事件驱动型内核,适用于高并发场景。 ‌ 选择时需结合硬件资源(如CPU类型、内存
    发表于 11-14 06:18

    请问如何在e203中安装linux操作系统

    本人用的板子是Xilinx的XC7A100TFGG484-2L,编译软件是vivado2017.4。目前比特流已经成功生成,我已经把其固化进了板子中。现在的我想在我固化后的板子里面装一个linux操作系统,应该如何做?
    发表于 11-07 07:32

    Jtti Linux操作系统最常见的10大优势

    Linux操作系统的十大优势 Linux操作系统作为一种开源、自由的系统,已经广泛应用于个人计算机、服务器、嵌入式设备等多个领域。它的多样化
    的头像 发表于 11-06 15:32 546次阅读

    鸿道Intewell实时操作系统有哪些应用场景

    鸿道Intewell工业操作系统作为一款国产实时操作系统(RTOS),在工业领域因其高实时性、高可靠性和强定制化能力,被广泛应用于对系统响应速度和稳定性要求苛刻的场景。以下是其典型应
    的头像 发表于 06-26 10:15 1009次阅读