【操作系统】聊聊Linux内存工作机制

这篇具有很好参考价值的文章主要介绍了【操作系统】聊聊Linux内存工作机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

内存主要是用来存储系统和应用程序的指令、数据、缓存等

内存映射

内存是需要安全机制保护的,所以只有内核才可以直接访问物理内存。进程如果要访问内存需要通过独立的虚拟地址空间。

虚拟地址空间其实包含两部分。一部分是内核空间,另一部分就是用户空间。
【操作系统】聊聊Linux内存工作机制,# 操作系统,# Linux,linux,运维,服务器
进程有用户态和内核态,用户态下只能访问用户空间,只有切换到内核态时才可以访问内核空间。
只有实际使用的虚拟内存才会分配物理内存,通过内存映射来管理。
内存映射其实就是将物理地址内存映射到虚拟内存。为每个进程维护了一张页表
【操作系统】聊聊Linux内存工作机制,# 操作系统,# Linux,linux,运维,服务器
页表其实是存储在CPU的内存管理单元MMU中。当发生缺页中断的时候,进入内核分配内存,更新进程页表,然后返回用户空间。
TLB是MMU中的高速缓存,通过减少上下文切换,可以减少TLB的刷新次数,就可以提高TLB的使用率。进而提高CPU的内存访问性能。

MMU是按照4KB为一页进行存储的,如果是4GB内存,那么就需要100多W页表项进行存储,才可以实现整个地址空间的映射。为了解决页表项过多的问题,Linux提供了两种机制,多级页表&大页

多级页表其实就是按照多个层级,最后按照对应的偏移地址。如下就是通过4级页表来管理。并且只存储使用的内存。
【操作系统】聊聊Linux内存工作机制,# 操作系统,# Linux,linux,运维,服务器

虚拟内存空间分布

【操作系统】聊聊Linux内存工作机制,# 操作系统,# Linux,linux,运维,服务器
空间内存分配其实就是按照 栈、文件映射、堆、数据段、只读段。堆和文件映射是动态分配的。

内存分配与回收

内存的分配是通过brk()和mmap()两个函数进行处理的。
brk() : 分配小于128K的内存,使用完并不立即归还给系统,而是缓存起来重复利用
mmap() : 直接使用内存映射来分配,也就是在文件映射段找一块空闲内存分配出去。

而当内存不足时,

  • 回收缓存:使用LRU算法等进行回收。
  • 回收不常用的内存,通过交换分区直接写到磁盘中
  • 杀死进程:内存紧张时通过OOM,杀死占用大量内存的进程。

交换分区 Swap
其实就是把一块磁盘当作内存来使用,把不需要的进程数据先存储到磁盘中称为幻出,把数据从磁盘拉入内存称为换入。
但是swap可以增加系统内存,但是磁盘读写慢,所以会导致严重的内存性能问题。

OOM
内核的一种保护机制,监控进程内存的使用情况,大概就是为每个进程进行评分oom_socre。占用分数比较高的,就容易被杀死。

/proc 

范围在[-17, 15 ]可以进行设置 -17是禁止。数值越少,越不容易被OOM杀死。

可以通过配置

echo -16 > /proc/$(pidof sshd)/oom_adj

如何查看内存使用情况

【操作系统】聊聊Linux内存工作机制,# 操作系统,# Linux,linux,运维,服务器
total是总内存、used是硬使用内存,包含共享内存、free是未使用内存、shared是共享内存的大小。
buff/cache 是缓存和缓冲区的大小。 available是新进程可用内存大小。

【操作系统】聊聊Linux内存工作机制,# 操作系统,# Linux,linux,运维,服务器
VIRT:进程虚拟内存大小
RES常驻内存大小
SHR 共享内存大小
%MEM是进程占用内存百分比。

小结

本篇主要简要介绍虚拟内存、内存如何分配、如何回收的、以及如何进行查看内存占用TOP、FREE两个命令。文章来源地址https://www.toymoban.com/news/detail-700386.html

到了这里,关于【操作系统】聊聊Linux内存工作机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【操作系统】聊聊不可中断进程和僵尸进程

    当我们输入top命令之后 其中S代表的是当前进程的状态 R (Running 或 Runnable) 进程在CPU的就绪队列中,正在运行或者等待运行。 D (Disk Sleep) 不可中断睡眠,进程正在跟硬件交互,不运行被其他进程或者中断打断。 Z (Zombie) 进程已经结束,但是父进程没有回收资源 (描述符、PID等

    2024年02月07日
    浏览(47)
  • 操作系统的运行机制、中断和异常、系统调用

    🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 程序是如何运行的? 一条高级语言的代码翻译过来可能会对应多条机器指令 程序运行的过程就是CPU一条一条的机器指令的执行过程 “指令”就是处理器(

    2024年02月14日
    浏览(43)
  • 操作系统 day03(运行机制)

    机器指令 二进制机器指令就是处理器(CPU)能识别、执行的最基本命令 程序运行的过程就是CPU执行一条一条的机器指令的过程 应用程序和内核程序 操作系统的最重要角色是:系统资源的管理者,而操作系统的对系统资源的管理工作就是在内核部分实现的 特权指令和非特权

    2024年02月06日
    浏览(50)
  • [操作系统]3.内存管理

    和前面两篇是差不多的思路,仅为快速复习操作i系统基础知识点,例题暂无,考试不要参考,知识点来自王道操作系统 内存管理主要完成的功能有 内存空间的分配和回收 地址转换(把逻辑地址转化为内存物理地址) 内存空间的扩充(覆盖,交换,虚拟化) 存储保护 因为一个进程如果想

    2024年02月08日
    浏览(55)
  • 【操作系统】03.内存管理

    现代操作系统使用的连接方式:运行时动态链接 对某些模块的链接推迟到程序执行时才进行 现代操作系统使用的装入方式:动态重定位 程序装入内存后,逻辑地址不会立即转换成物理地址,而是推迟到指令执行的时候,需要一个重定位寄存器的支持 单一连续分配 固定分区

    2024年02月07日
    浏览(45)
  • 【操作系统】内存管理概念

    1、 编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译成机器语言) 2、 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块 ① 静态链接:在程序运行之前,先将各目标模块及它们所需的库函

    2024年02月06日
    浏览(53)
  • 操作系统-内存分配算法

    操作系统原理实验报告 实验题目   实 验 四内存分配算法     1.1 实验目的 一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请主存储器空间时,存储管理必须根据申请者的要求,

    2024年02月03日
    浏览(47)
  • 【操作系统】内存空间

    想要pmap这个进程,需要进程号 但是这个进程在启动的一瞬间就执行完了 用GDB把程序暂停下来,然后用pmap观察地址空间 用 info inferiors 得到gdb里的进程号 ro 可读 :只读数据 rx 可读可执行 :代码 rw 可读可写 :待初始化值的变量 动态链接的二进制文件在开始执行main函数之前

    2024年02月03日
    浏览(35)
  • 【操作系统】内存管理

    本系列参考王道考研-操作系统以及博主@BitHachi 因为cpu的处理速度很快,而外存的读取速度又很慢,所以我们就需要先加载到内存中,内存的读取速度比外存要快得多,如此实现更高效的处理 指令的工作原理 从X=X+1大致看一下指令的执行过程 指令的工作基于地址。每个地址对

    2024年02月07日
    浏览(54)
  • 深入理解Windows操作系统机制(二)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。 我们每天都在用Windows操作系统,但是其实我们每天直接在打交道的并不是Windows操作系统的内核,而是Windows操作系统的人机交互界面,这个界面其实只是Window

    2024年02月17日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包