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
    +关注

    关注

    87

    文章

    11303

    浏览量

    209439
  • 内存
    +关注

    关注

    8

    文章

    3024

    浏览量

    74035
  • 操作系统
    +关注

    关注

    37

    文章

    6818

    浏览量

    123325
  • DNA
    DNA
    +关注

    关注

    0

    文章

    243

    浏览量

    31034
收藏 人收藏

    评论

    相关推荐

    deepin操作系统介绍

    希望从自己的能力和对桌面操作系统的理解,能给 Linux 的用户与开发者更多的选择。我们也相信 deepin 能够得到更多用户的认可与喜爱,成为开源世界的最佳选择。  一、 deepin 操作系统 先说
    的头像 发表于 12-23 09:08 223次阅读
    deepin<b class='flag-5'>操作系统</b>介绍

    Linux下如何管理虚拟内存 使用虚拟内存时的常见问题

    Linux系统中,虚拟内存管理是操作系统内核的一个重要功能,负责管理物理内存和磁盘上的交换空间。以下是对
    的头像 发表于 12-04 09:19 385次阅读

    linux是实时系统还是分时操作系统

    大家平时玩单片机基本上对于µC/OS、FreeRTOS、ThreadX这些操作系统非常熟悉了,他们都属于实时操作系统(RTOS),在工业领域比较广泛;然而对于linux这样的基于时间片划分的非实时
    的头像 发表于 11-11 11:43 458次阅读

    嵌入式 Linux 操作系统配置

    随着物联网(IoT)和智能设备的快速发展,嵌入式系统在各个领域扮演着越来越重要的角色。Linux因其开源、灵活和稳定的特性,成为嵌入式系统的首选操作系统。 1. 硬件选择 在配置嵌入式
    的头像 发表于 11-06 10:22 365次阅读

    linux操作系统安装步骤 linux操作系统的特点及组成

    Linux操作系统安装步骤 Linux操作系统是一种开源的操作系统,它以其稳定性、安全性和灵活性而闻名。以下是安装
    的头像 发表于 10-21 11:24 541次阅读

    嵌入式linux开发板怎么操作

    嵌入式Linux开发板是一种基于Linux操作系统的嵌入式系统开发平台。它通常包括一个处理器、内存、存储器、输入/输出接口等硬件组件,以及一
    的头像 发表于 09-02 09:09 385次阅读

    Linux操作系统份额创历史新高,逼近4.5%里程碑

    在最新的全球操作系统市场份额报告中,市调机构StatCounter于8月27日发布了令人瞩目的数据:2024年7月,Linux系统实现了历史性的飞跃,其市场份额首次逼近4.5%的关口,达到了4.44%的新高。这一成就标志着
    的头像 发表于 08-27 17:05 849次阅读

    RTOS与Linux有什么区别

    RTOS(Real-Time Operating System,实时操作系统)与Linux是两种在不同应用场景下发挥重要作用的操作系统,它们在设计理念、功能特性、应
    的头像 发表于 08-20 16:05 3544次阅读

    工业实时操作系统对比:鸿道Intewell跟rt-linux有啥区别

    Intewell和RT-Linux是两种不同的实时操作系统(RTOS),它们具有各自独特的特点和优势。以下是Intewell操作系统的一些关键特性,以及与RT-Linux的比较:
    的头像 发表于 07-03 10:00 525次阅读
    工业实时<b class='flag-5'>操作系统</b>对比:鸿道Intewell跟rt-<b class='flag-5'>linux</b>有啥区别

    研华工控机用什么系统?Windows与Linux操作系统的较量

    两大主流操作系统,各自具有独特的优势和应用场景。本文将帮助你更好地理解它们的特点,并做出明智的选择。下面就随苏州研讯电子科技有限公司一起来看看吧。 Windows系统 提到Windows系统
    的头像 发表于 06-14 14:38 696次阅读
    研华工控机用什么<b class='flag-5'>系统</b>?Windows与<b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>的较量

    AURIX3G可以使用Linux操作系统吗?

    即使在 AURIX3G 中,也可以使用 Linux 操作系统吗?
    发表于 05-22 07:12

    服务器操作系统有几种?

    操作系统细分化有许多,下边给大伙儿详细介绍的是至少的这种:CentOS 1、CentOS 5.6 2、CentOS 6.4 在Linux网络服务器电脑操作系统下,CentOS是应用场景
    发表于 03-29 16:59

    Linux操作系统上的射频测试模式应用指南

    电子发烧友网站提供《Linux操作系统上的射频测试模式应用指南.pdf》资料免费下载
    发表于 02-19 09:39 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>上的射频测试模式应用指南

    linux和windows的区别 linux系统一般用来干嘛

    Linux和Windows是两种不同的操作系统,有着不同的设计理念和用途。本文将对Linux和Windows的区别进行详细分析,并介绍Linux系统
    的头像 发表于 02-05 14:06 961次阅读

    Linux操作系统中如何按下PCIe的复位键

    Linux操作系统中,看如何按下PCIe的复位键
    的头像 发表于 01-20 09:31 1579次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>中如何按下PCIe的复位键