iis服务器助手广告
返回顶部
首页 > 资讯 > 操作系统 >Linux内存寻址是什么
  • 560
分享到

Linux内存寻址是什么

2023-06-27 21:06:10 560人浏览 薄情痞子
摘要

本篇内容介绍了“linux内存寻址是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!早期的程序都是直接运行在物理地址上,也就是说这个程序所

本篇内容介绍了“linux内存寻址是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

早期的程序都是直接运行在物理地址上,也就是说这个程序所需要的空间不超过该机器的物理内存就不会有问题,但实际场景中都是多任务,多进程的,这种物理地址reserved给各个进程是不靠谱的。

举个栗子:假如有3个程序a,b,c,a需要10M,b需要100M,c需要20M,总内存就120M,按照之前的分配方式,前10M给a,10M-110M给b,系统还剩10M,但是c需要20M,显然剩下的内存是不够c用的。怎么办?

Linux内存寻址是什么

为什么要内存管理:

1.效率问题

可能你会想到当c程序跑的时候把b程序数据写到磁盘上,等运行b的时候再数据从磁盘写回来,先不说无法满足b,c程序并行跑的需求,就连频繁的io操作带来的耗时问题也是无法接收的。

2.进程地址隔离问题

除了效率问题,reserved给进程的空间如果需要被别的进程访问会出现崩溃。比如a进程访问的空间是前10M,但是a程序中有一段代码访问10-110M的话就有可能导致b程序的崩溃,所以进程的地址空间需要彼此隔离。

3.重定位问题

现实场景中不可能是单任务在分好的内存中运行,当多任务并行跑的情况下在动态申请释放内存的时候有可能申请到其它进程里的地址,这时候需要重定位到新的地址。

内存管理无非就是想办法解决上面三个问题,如何提高内存的使用效率?如何使进程的地址空间隔离?如何解决程序运行时的重定位问题?

内存管理如何从虚拟地址映射到物理地址:

内存管理从虚拟地址映射到物理地址的过程也就是解决上面3个问题的过程。内存管理用分段机制和分页机制分别解决了上面的3个问题,大概过程如下图:

Linux内存寻址是什么

分段机制:

只要程序分了段,把整个段平移到任何位置后,段内的地址相对段基址是不变的,无论段基址是多少,只要给出段内偏移地址,cpu就能访问到正确的指令。于是加载用户程序时,只要将整个段的内容复制到新的位置,再将段基址寄存器中的地址改成该地址,程序便可准确地运行,因为程序中用的是段内偏移地址,相对新的段基址,该偏移地址处的内容内容还是一样的。

可以看出分段机制解决了进程间隔离和重定位的问题。这个动作是在硬件里做的,但是有的硬件是没有分段机制的,作为跨平台的linux就用了具有更通用性的分页机制来解决线性地址到虚拟地址到物理地址的转换。

分页机制:

linux为了兼容32位和64位,通常采用四级页表,页全局目录,页上级目录,页中间目录,页表:

Linux内存寻址是什么

这里不详细解释linux是如何通过四级页表来做线性地址(虚拟地址)到物理地址的转化。

进程在切换的时候就是根据task_struct找到mm_struct里的pgd字段,取得新进程的页全局目录,然后填充到CR3寄存器,就完成了页的切换。

动手看下mmu分页寻址的过程:

上代码:

Linux内存寻址是什么Linux内存寻址是什么Linux内存寻址是什么Linux内存寻址是什么Linux内存寻址是什么

可以看出虚拟地址ffff99b488d48000对应的物理地址是80000000c8d48000。这个过程也是mmu的过程。

“Linux内存寻址是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Linux内存寻址是什么

本文链接: https://www.lsjlt.com/news/313687.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux内存寻址是什么
    本篇内容介绍了“Linux内存寻址是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!早期的程序都是直接运行在物理地址上,也就是说这个程序所...
    99+
    2023-06-27
  • Linux的内存寻址方式是什么
    这篇文章主要讲解了“Linux的内存寻址方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux的内存寻址方式是什么”吧!为什么要内存管理:早期的程序都是直接运行在物理地址上,也就...
    99+
    2023-06-15
  • Linux内存管理和寻址的概念是什么
    本篇内容主要讲解“Linux内存管理和寻址的概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux内存管理和寻址的概念是什么”吧!1.概念内存管理模式段式:内存分为了多段,每段都是连...
    99+
    2023-06-21
  • Linux内存寻址的分段机制原理是什么
    这篇文章主要介绍“Linux内存寻址的分段机制原理是什么”,在日常操作中,相信很多人在Linux内存寻址的分段机制原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux内存寻址的分段机制原理是什么...
    99+
    2023-06-12
  • Linux系统内存寻址的分页机制是什么
    这篇文章主要讲解了“Linux系统内存寻址的分页机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统内存寻址的分页机制是什么”吧!分页机制在段机制之后进行,以完成线性&am...
    99+
    2023-06-12
  • Linux虚拟内存是什么
    这篇“Linux虚拟内存是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux虚拟内存是什么”文章吧。虚拟内存由来毋...
    99+
    2023-06-27
  • Linux虚拟内存地址怎么转化成物理内存地址
    这篇文章主要讲解了“Linux虚拟内存地址怎么转化成物理内存地址”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux虚拟内存地址怎么转化成物理内存地址”吧!背景现代手机这种SOC(sys...
    99+
    2023-06-16
  • linux中虚拟内存是什么
    这篇文章主要为大家展示了“linux中虚拟内存是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中虚拟内存是什么”这篇文章吧。1. 讨论虚拟内存前的热身我们需要知道的是计算机对内存分...
    99+
    2023-06-15
  • Linux内存、Swap、Cache、Buffer是什么
    今天小编给大家分享一下Linux内存、Swap、Cache、Buffer是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-06-28
  • Linux内存映射指的是什么
    Linux内存映射指的是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 内存映射就是用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修...
    99+
    2023-06-28
  • Linux中的大内存页是什么
    本篇内容主要讲解“Linux中的大内存页是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux中的大内存页是什么”吧!Linux 中的“大内存页”是个什么玩意?“大内存页”有助于 Lin...
    99+
    2023-06-16
  • linux的虚拟内存机制是什么
    这篇“linux的虚拟内存机制是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux的虚拟内存机制是什么”文章吧。l...
    99+
    2023-07-01
  • linux物理内存的概念是什么
    这篇文章主要介绍“linux物理内存的概念是什么”,在日常操作中,相信很多人在linux物理内存的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux物理内存的...
    99+
    2023-03-02
    linux
  • Linux内存的分配和释放是什么
    本文小编为大家详细介绍“Linux内存的分配和释放是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux内存的分配和释放是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。了解内存分配机制(共享映射与请...
    99+
    2023-06-16
  • Linux内存buffer和cache的区别是什么
    这篇文章主要介绍“Linux内存buffer和cache的区别是什么”,在日常操作中,相信很多人在Linux内存buffer和cache的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux内存...
    99+
    2023-06-16
  • Linux进程共享内存的方法是什么
    这篇文章主要讲解了“Linux进程共享内存的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux进程共享内存的方法是什么”吧!共享内存 IPC 原理共享内存进程间通信机制主要用...
    99+
    2023-06-28
  • linux查看内存大小的命令是什么
    本篇内容介绍了“linux查看内存大小的命令是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-02-02
    linux
  • linux 0.0.0.0地址指的是什么
    本文小编为大家详细介绍“linux 0.0.0.0地址指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux 0.0.0.0地址指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2023-03-09
    linux
  • Linux是怎么管理内存的
    本篇内容介绍了“Linux是怎么管理内存的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基本概念每个 Linux 进程都会有地址空间,这些地...
    99+
    2023-06-15
  • JavaScript内存泄漏和内存溢出是什么
    本篇内容主要讲解“JavaScript内存泄漏和内存溢出是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript内存泄漏和内存溢出是什么”吧! ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作