Linux内存管理 | 一、内存管理的由来及思想

这篇具有很好参考价值的文章主要介绍了Linux内存管理 | 一、内存管理的由来及思想。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言
《中庸》有:“九层之台,起于垒土” 之说,那么对于我们搞技术的人,同样如此!
对于Linux内存管理,你可以说没有留意过,但是它存在于我们日常开发的方方面面,你所打开的文件,你所创建的变量,你所运行的程序,无不以此为基础,它可以说是操作系统的基石;只是底层被封装的太好了,以至于我们在做开发的过程中,不需要关心的太多,哪有什么岁月静好,只是有人在负重前行罢了。
虽然日常开发中涉及的比较少,但是作为一个合格的Linux开发者,搞懂内存管理,又显得至关重要,同时也会对嵌入式开发大有脾益,今天我们就来详细聊聊内存管理的那点事。
该方面的文章,网上也有很多写的非常不错,但是100个人有100种理解方式,并且不同的人,基础不同,理解能力也不同,所以我写这系列的文章,也更有了意义。
2、内存管理的由来
为什么要有这个概念呢?
  • 首先,内存管理,管理的是个什么东西?
管理的其实是我们的物理内存,也就是我们的RAM空间,在电脑上,表现为我们安装的内存条,有的人装个4G的、8G的、甚至64G的,这些就是实打实的物理空间大小,也就是我们的实际的硬件资源。
 
 
 
 
 
  • 为什么要进行管理?
做嵌入式的都知道,像我们刚开始玩的C51单片机、STM32单片机,我们将程序烧录到Flash中后,开机启动后,然后CPU会将Flash程序加载到RAM中,也就是我们的物理内存,随后我们的所有操作都是基于这一个物理内存所进行的。
 
 
 
 
 
那么此时
  1. 我们想再次运行一个一模一样的程序怎么办?
  2. 即使运行了,那两个程序同时操作了同一个变量,值被错误修改了怎么办?
这些就是Linux内存管理要做的事情。
顺便介绍一下 我的圈子:高级工程师聚集地,期待大家的加入。
3、Linux内存管理思想
为了解决上面的一些问题,Linux采用虚拟内存管理技术。
  1. Linux操作系统抽象出来一个虚拟地址空间的概念,供上层用户使用,这么做的目的是为了让多个用户进程,都以为自己独享了内存空间。
  2. 而虚拟地址空间与物理地址空间的对应关系,就交给了一个MMU(Memory Managerment Unit)的家伙来管理,其主要负责将虚拟内存空间映射到真实的物理地址空间。
 
 
 
添加图片注释,不超过 140 字(可选)
 
这么做的主要目的在于:
  1. 让每个进程都拥有相同大小的虚拟地址空间
  2. 避免用户直接访问物理内存,导致系统崩溃
这样,我们同时执行多个进程,虽然看起来虚拟地址操作都是相同的,但是通过MMU之后,就被映射到了不同的物理地址空间,这样就解决了以上的问题。
4、总结
熟悉了内存管理由来以及其思想,我们可以看出,操作系统的内存管理,主要分为以下几个方面:
  1. 虚拟内存空间管理:我们抽象出来的虚拟地址空间,该怎么使用,该怎么管理?
  2. 物理内存空间管理:虚拟地址映射到物理内存空间后,该如何管理,如何分配?
  3. 如何映射:虚拟内存如何映射到物理内存,是怎么操作的,映射方法有哪些?
下面我们来一一详细探究。

文章来源地址https://www.toymoban.com/news/detail-711097.html

到了这里,关于Linux内存管理 | 一、内存管理的由来及思想的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java面向对象思想以及原理以及内存图解

    面向过程 :面向过程是将解决问题的思路转为一个个方法。 面向对象 :面向对象则是编写一个对象,将这些思路封装成一个个对象方法,后续调用这个对象解决问题,相对面向过程而言,这种思路更符合人的思维并且更易扩展、复用、维护。 面向对象和面向过程性能差距:人们

    2024年02月04日
    浏览(34)
  • Linux shell编程学习笔记46:awk命令的由来、功能、格式、选项说明、版权、版本

    在编写Linux Shell脚本的过程中,我们经常要对Linux命令执行的结果进行分析和提取,Linux也在文本分析和提取这方面提供了不少的命令。比如我们之前研究过的cut命令。 Linux shell编程学习笔记43:cut命令 https://blog.csdn.net/Purpleendurer/article/details/135730679?spm=1001.2014.3001.5501 除了cut命

    2024年04月24日
    浏览(58)
  • linux 内存管理

    一个虚拟内存系统, 意味着用户程序见到的地址不直接对应于硬件使用 的物理地址. 虚拟内存引入了一个间接层, 它允许了许多好事情. 有了虚拟内存, 系统重 运行的程序可以分配远多于物理上可用的内存; 确实, 即便一个单个进程可拥有一个虚拟 地址空间大于系统的物理内存

    2024年01月21日
    浏览(18)
  • Linux 内存管理 pt.1

    哈喽大家好,我是咸鱼   今天我们来学习一下 Linux 操作系统核心之一:内存   跟 CPU 一样,内存也是操作系统最核心的功能之一,内存主要用来存储系统和程序的指令、数据、缓存等   关于内存的学习,我会尽量以通俗易懂的方式且分成多篇文章去讲解   那么今天在 pt.1

    2024年02月01日
    浏览(23)
  • 深入理解Linux虚拟内存管理

    Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序 Linux设备驱动开发详解 深入理解Linux虚拟内存管理(一) 深入理解Linux虚拟内存管理(二) 深入理解Linux虚拟内存管理(三) 深入理解Linux虚拟内存管理(四) 深入理解Linux虚拟内存管理(五) 深入理解Linux虚拟内存

    2024年02月06日
    浏览(41)
  • Linux 内存管理 pt.2

    哈喽大家好我是咸鱼,在《Linux 内存管理 pt.1》中我们学习了什么是物理内存、虚拟内存,了解了内存映射、缺页异常等内容 那么今天我们来接着学习 Linux 内存管理中的多级页表和大页 在《Linux 内存管理 pt.1》中我们知道了内核为每个进程都维护了一张页表,这张页表用来记

    2024年02月02日
    浏览(23)
  • Linux 内存管理 pt.3

    哈喽大家好,我是咸鱼 在《Linux 内存管理 pt.2》中我们学习了多级页表和大页,我们知道了由于历史遗留的问题,Linux 的页通常为 4KB 这样就会导致一个页表里面会有特别多页,为了解决这个问题,Linux 提供了两种解决方案——多级页表和大页 那么今天继续我们的 Linux 内存管

    2024年02月05日
    浏览(19)
  • 从 malloc 分配大块内存失败 来简看 linux 内存管理

    应用进程 malloc 返回了null,但是观察到的os 的free内存还有较大的余量 ,很奇怪为什么会这样? 不可能是oom导致的(当然也没有 os 的oom 日志),free还有余量,系统也没有cgroup的应用隔离。 我们linux上使用的库函数 malloc 基本都是用glibc库实现的malloc函数(当然如果binary 链接

    2024年02月08日
    浏览(40)
  • 深入理解Linux虚拟内存管理(六)

    Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序 Linux设备驱动开发详解 深入理解Linux虚拟内存管理(一) 深入理解Linux虚拟内存管理(二) 深入理解Linux虚拟内存管理(三) 深入理解Linux虚拟内存管理(四) 深入理解Linux虚拟内存管理(五) 深入理解Linux虚拟内存

    2024年02月08日
    浏览(37)
  • 深入理解Linux内核——内存管理(1)

    提要:本系列文章主要参考 MIT 6.828课程 以及两本书籍 《深入理解Linux内核》 《深入Linux内核架构》 对Linux内核内容进行总结。 内存管理的实现覆盖了多个领域: 内存中的物理内存页的管理 分配大块内存的伙伴系统 分配较小内存的slab、slub、slob分配器 分配非连续内存块的

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包