轻松理解操作系统 - 图文:Linux内核虚拟内存的基石是什么?

第一大模块:一文串联文件系统模块

上期文章中,我们了解了 Linux内存管理模块 的其中一大功能:内核虚拟内存管理。内核的虚拟内存是怎么管理的?

内核虚拟内存的管理是用户程序创建进程和执行各种任务的基础。没有它,我们就无法正常使用系统。

但,虚拟内存终究是要落到物理内存里面的吧?那系统内核的虚拟内存是如何落到现实中的物理内存中的呢?

本期,我们就来聊聊内核虚拟内存的基石 - Linux内核内存管理。

图片

一、内核内存管理是什么呢?

Linux 内核内存管理主要负责管理计算机硬件中的物理内存资源

它确保系统能够高效地利用内存,同时保证系统的稳定性安全性

内核内存管理涉及物理内存的分配、回收、映射、保护等多个环节,是操作系统核心功能之一。

二、为什么要用单独一个模块来管理内核的物理内存?

首先是为了保证系统的运行速度

为了保证系统的运行速度,Linux内核 需要尽可能保证自己的虚拟内存映射在连续的物理内存上面。

这样才能更方便的通过虚拟地址来计算物理地址。

其次是为了做权限隔离

试想一下,假如没有权限隔离的话,其他程序岂不是随随便便就可以改系统内核的代码了?

图片

不做权限隔离的话,假如有坏人在程序里面写入了攻击性的代码,故意攻击你的系统,甚至于进行勒索,是不是很可怕?

三、那它是怎么管理内存的?

本张流程图看似很简单,但是实际上在分配和回收内存的时候涉及了很多机制,还有很多机制是虚拟内存管理核心的机制。

1、申请使用内存

内核模块需要使用内存时,它们会向内核内存管理模块请求分配内存。

图片

内核内存管理模块会根据请求的大小特性(如是否允许睡眠)来选择合适的内存区域进行分配。

常见的内存分配算法包括伙伴系统(Buddy System)和 slab 分配器等。

伙伴系统是一种物理内存管理算法,它将内存划分为多个块,并通过合并和分裂这些块来满足不同大小的内存请求。

slab 分配器则是一种针对小对象的内存分配器,它提高了内存分配和回收的效率。

图片

2、内存不用之后,怎么回收掉呢?

内核内存管理模块会跟踪这些释放的内存块,并在需要时将它们重新分配给其他请求者。

但是怎么跟踪呢?跟踪的方法就是 Linux系统内核中有 char类型 数组来标识内存块的占用情况。

未被使用的内存块在数组中被记为 0.

图片

此外,内存回收过程中,内核还会尝试合并相邻的空闲内存块,以减少内存碎片。

四、那它是怎么进行内存保护的呢?

上期我们已经讲到了内核虚拟内存与物理内存的映射等:

本期我们来讲讲它们怎么进行内存保护

1、内存保护是什么?

内存保护是指防止进程非法访问其他进程的内存或内核内存。

2、它是怎么实现的?

Linux内核 通过设置页表项的访问权限来实现内存保护。页表项中包含了该页的内存访问权限信息,如可读、可写、可执行等。

图片

用户态进程访问内核态进程的内存页就会被拒绝访问

五、那它有没有什么优化机制来确保系统的运行速度更快?

当然是有的,在本模块的第一期,我们讲了一些优化方法:从用户角度:内核如何管理内存并保证速度

这些优化方法的具体执行还在虚拟内存管理核心模块中实现的,那我们下期就来聊聊这个模块。

一个从生化环材专业转行的字节研发工程师,日常分享干货和有趣的科普。欢迎围观

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值