iis服务器助手广告
返回顶部
首页 > 资讯 > 操作系统 >Linux内存的分配和释放是什么
  • 291
分享到

Linux内存的分配和释放是什么

2023-06-16 11:06:36 291人浏览 安东尼
摘要

本文小编为大家详细介绍“linux内存的分配和释放是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux内存的分配和释放是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。了解内存分配机制(共享映射与请

本文小编为大家详细介绍“linux内存的分配和释放是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux内存的分配和释放是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

了解内存分配机制(共享映射与请求分页)

通过 pmap 命令,可以获取用户进程逻辑地址空间中映射的内存信息:

pmap -x $pid

其中 -x 表示获取详细信息。

下面是一个例子:

pmap -x $(pidof eMacs) |head -20

其中,“Address(地址)”指的进程的逻辑地址空间。

“Kbytes”列表示的是对应逻辑地址的容量,以Kb为单位

“RSS”列表示的是实际使用的物理内存容量,由于分页机制的存在,这个值一般要比”Kbytes”的值要少。

“Mapping”列为逻辑内存的映射方式,其中”[annon]“表示通过malloc函数来分配的堆空间(匿名内存),”[stack]“为进程的栈空间,这两种映射都是将物理内存映射到进程的逻辑内存上去。 而”emacs-25.3″,”libpixbufloader-svg.so”等文件名则表示它们执行的是文件映射,他们对应的是磁盘上的文件。当这些文件被读入高速缓存后,相应的内存空间被映射成进程的逻辑内存。

当出现多个程序共同使用相同的文件映射(共享库)时,它们可以共享磁盘高速缓存中的同一空间,从而节省物理内存的使用量,这种技术就是”共享映射”技术。

除了共享库外,进程的fork也使用了共享映射技术。 当父进程fork子进程时,Linux内核并不对内存中的内容进行实际上的复制,而是将映射到父进程逻辑地址空间内的那部分内容原封不动地共享映射到子进程的逻辑地址空间内。 但为了防止父进程和子进程的内存操作相互影响,Linux内核在进行共享映射时,相应的内存区域会暂时设置为写保护。 当某一方进程试图操作内存时,会引发只读异常。内核检测到这个异常后,会复制操作的这个内存页,从而使两个进程都可进行独立写入。 这种在写入时复制的机制叫做“写时复制(copy-on-write)”

另一方面,进程将可执行文件或共享库文件内容读入内存并映射到进程逻辑地址空间上时,并不会读入全部的文件内容,而是先标记”该文件的内容已经被映射到逻辑地址空间内”. 当进程访问逻辑地址空间时,由于不存在对应的物理内存,会引发换页错误的异常。内容检测到该异常后会将所需部分以内存页为单位读入内存中。 这种只读入所需内容的机制,叫做请求分页。

了解内存释放机制

当其他进程需要新的物理内存时,就涉及到如何将尚有数据残余的物理内存释放或换出来的问题了。

当需要新物理内存时,会优先释放Inactive(file)和Active(file)中记录的内存页,只需要将脏数据写入文件中再释放内存页即可。

而Inactive(anon)和Active(anon)内存页则需要将内容交换到物理磁盘上的swap中后再释放。 具体来说,Linux会在进程页表上做一个标记,标记出换出内存所对应的逻辑地址。 当进程访问该逻辑地址时,会产生相应物理内存不存在的异常,Linux内核检测到这个异常后,会再次将数据从swap中加载入空闲内存,并重新配置页表信息。

Linux内核使用两种机制来加快换出处理速度:

  • 一种是预读。

当某一个内存页需要换入时,Linux内核会将其后的几个内存页一起换入。因为进程连续访问多个内存页的可能性很大。预读的页数为内核参数 vm.page-cluster 决定为 2^vm.page-cluster.

  • 另一种是交换缓存。

即在换入某个内存页后,物理磁盘上交换空间中仍然保留原数据,这种状态的内存会记录在“交换缓存”的列表上。这样当需要再次换出记录在“交换缓存”上的内存页的数据时,就无需再次换入了。

每个进程的内存使用情况可以通过查看 /proc/进程ID/status 来查看

cat /proc/$(pidof emacs)/status
Name: emacs Umask:  0022 State:  S (sleeping) Tgid: 6769 Ngid: 0 Pid:  6769 PPid: 1 TracerPid:  0 Uid:  1000  1000  1000  1000 Gid:  1000  1000  1000  1000 FDSize: 64 Groups: 986 998 1000 NStgid: 6769 NSpid:  6769 NSpgid: 6769 NSsid:  6769 VmPeak:   567040 kB VmSize:   567040 kB VmLck:         0 kB VmPin:         0 kB VmHWM:    241176 kB VmRSS:    241176 kB RssAnon:    204544 kB RssFile:     36604 kB Rssshmem:       28 kB VmData:   231712 kB VmStk:      1596 kB VmExe:      2332 kB VmLib:     47832 kB VmPTE:      1008 kB VmSwap:        0 kB HugetlbPages:        0 kB CoreDumping:  0 Threads:  4 SigQ: 1/15456 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000004381000 SiGCgt: 00000001db816eff Capinh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: 0000003fffffffff CapAmb: 0000000000000000 NoNewPrivs: 0 Seccomp:  0 Cpus_allowed: 3 Cpus_allowed_list:  0-1 Mems_allowed: 1 Mems_allowed_list:  0 voluntary_ctxt_switches:  12951 nonvoluntary_ctxt_switches: 21641

其中比较有用的项有:

VmData

data段的大小

VmExe

text段的大小

VmHWM

当前物理内存使用量的***值

WmLck

用mlock定的内存大小

VmLib

共享库的使用量

VmPTE

页面表的大小

VmPeak

当前物理内存的***值

VmRSS

物理内存的实际使用量

VmSize

逻辑地址的大小

VmStk

堆栈的大小

VmSwap

交换空间的使用量

读到这里,这篇“Linux内存的分配和释放是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网操作系统频道。

--结束END--

本文标题: Linux内存的分配和释放是什么

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

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

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

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

下载Word文档
猜你喜欢
  • Linux内存的分配和释放是什么
    本文小编为大家详细介绍“Linux内存的分配和释放是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux内存的分配和释放是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。了解内存分配机制(共享映射与请...
    99+
    2023-06-16
  • C++ 内存管理:跟踪内存分配和释放
    c++++ 内存分配和释放跟踪工具:内存管理器 (例如 new 和 delete 运算符) 负责分配和释放内存。调试器提供内存泄漏检测功能。3.第三方工具库(如 valgrin...
    99+
    2024-05-01
    c++ 内存管理 linux
  • c语言内存分配与释放的方法是什么
    在C语言中,内存分配和释放主要有以下几种方法:1. 静态分配:使用静态变量或全局变量来分配内存。静态变量的内存在程序启动时就已经分配...
    99+
    2023-09-23
    c语言
  • 怎么释放linux的内存
    释放Linux的内存有以下几种方法: 重启系统:重启系统会释放所有占用的内存。 使用sync命令:sync命令会将文件系统缓...
    99+
    2023-10-27
    linux
  • Linux系统中的内存清理和释放的命令是什么
    这篇文章主要介绍“Linux系统中的内存清理和释放的命令是什么”,在日常操作中,相信很多人在Linux系统中的内存清理和释放的命令是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统中的内存清理...
    99+
    2023-06-13
  • Linux系统手动释放内存缓存的步骤是什么
    这篇文章将为大家详细讲解有关Linux系统手动释放内存缓存的步骤是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Linux释放内存的命令:syncecho 1 > /proc/sy...
    99+
    2023-06-05
  • linux释放缓存的命令是什么
    在Linux上释放缓存的命令是sync。 sync命令用于将系统缓存的数据写入磁盘,以确保数据的持久性。它会把所有未写入硬盘的缓存数...
    99+
    2024-02-29
    linux
  • Linux用户进程是怎么释放内存的
    这篇文章主要讲解了“Linux用户进程是怎么释放内存的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux用户进程是怎么释放内存的”吧!Linux用户进程是如何释放内存的 Linux进程...
    99+
    2023-06-13
  • linux系统怎么释放内存
    本篇内容介绍了“linux系统怎么释放内存”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!先看看内存使用状况[root@node1 ~]# f...
    99+
    2023-06-10
  • linux中怎么释放cache内存
    要释放cache内存,可以使用以下几种方法: 使用sync命令:sync命令可以将缓存中的数据写入硬盘,并释放相关的内存。可以在终...
    99+
    2024-03-12
    linux
  • 探索操作系统内存分配和释放的魅力,揭秘计算机资源的分配与释放
    1. 内存分配的基础知识 在计算机中,内存是存储程序和数据的区域。内存分配是指将内存空间分配给程序或数据使用的过程。内存释放是指将不再使用的内存空间归还给操作系统管理的过程。 内存分配和释放通常由操作系统中的内存管理模块负责。 2. 内存...
    99+
    2024-02-12
    操作系统 内存分配 释放 内存管理 计算机资源 管理
  • go语言内存申请和释放的方法是什么
    在Go语言中,内存的申请和释放是由Go的垃圾回收器自动管理的,开发者不需要手动申请和释放内存。Go语言使用了自动垃圾回收(Garba...
    99+
    2023-10-20
    go语言
  • golang手动释放内存的方法是什么
    在Go语言中,没有提供手动释放内存的方法。Go语言通过垃圾回收器(GC)自动管理内存,开发者不需要手动释放内存。垃圾回收器会自动识别...
    99+
    2023-10-21
    golang
  • 内存管理的艺术:操作系统内存分配与释放
    内存管理是计算机系统的一项关键任务,负责分配和管理程序和数据在内存中的存储空间。本文探讨了内存管理在现代操作系统的核心原则和技术,重点介绍了内存分配和释放策略。 内存管理 分配器 释放器 页面分配 段式分页 内存管理简介 内存是计算机...
    99+
    2024-02-17
  • 揭开内存分配与释放的幕后机制
    引言 内存管理是计算机编程中至关重要的概念,它决定了程序如何使用和处理计算机的内存资源。本文将深入探讨内存分配和释放的幕后机制,帮助您理解它们在程序中的工作方式。 栈与堆 在计算机内存中,有两个主要区域用于存储数据:栈和堆。栈是一个由编译...
    99+
    2024-02-17
    内存分配, 内存释放, 指针, 堆, 栈, malloc, free
  • Windows释放内存的最简单方法是什么
    那么我们如何释放内存高速缓存而解决占用的问题呢?其实只需要Windows 开始 -> 运行,输入下面的命令: %windir%\system32\ 点击“确定”按钮。 注:此命令支持Vist...
    99+
    2023-05-25
    释放内存 内存 Windows 方法
  • 内存分配与释放:操作系统的心脏地带
    内存分配 内存分配是操作系统向应用程序提供内存资源的过程。当应用程序需要内存时,它会向操作系统发出请求。操作系统维护一个内存管理单元(MMU),其中跟踪可用内存的块及其状态。当应用程序发出请求时,MMU 会根据可用内存查找合适的块并将其分...
    99+
    2024-02-17
    内存管理是操作系统最重要的职责之一。它负责管理计算机系统中的内存 以满足应用程序的需求。内存分配和释放是内存管理的关键方面 对于确保系统的平稳运行至关重要。
  • 解密操作系统内存分配与释放的奥秘
    内存分配: 内存分配是指操作系统将内存空间分配给进程或线程的过程。它涉及以下步骤: 请求分配:进程或线程向操作系统请求分配特定大小的内存空间。 搜索可用内存:操作系统搜索空闲内存块,即尚未分配给任何进程的内存区域。 分配内存:如果找到...
    99+
    2024-02-17
    内存分配 内存释放 操作系统 计算机系统
  • 揭开内存管理的黑盒子:操作系统内存分配与释放
    内存管理概述 内存管理是操作系统的一项基本功能,负责分配和释放应用程序所需的内存资源。当应用程序启动时,操作系统会为其分配一段连续的内存区域,称为进程地址空间。该地址空间包含应用程序的代码、数据和堆栈。 内存分配策略 操作系统使用不同的...
    99+
    2024-02-17
    内存管理 操作系统 分配 释放 动态内存分配器
  • Java内存分配指的是什么
    这篇文章主要介绍“Java内存分配指的是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java内存分配指的是什么”文章能帮助大家解决问题。概念1、内存是计算机的重要原件,临时存储区域,作用是运行...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作