对linux内存空间管理的理解


分为两个层面来看:

1、虚拟内存空间的管理

2、实际物理空间的管理


1、虚拟内存空间的管理

每个进程都有自己的4G空间可用,对于这4G的空间,需要进行管理。如哪一个范围的空间用来存代码,哪一段的用来存数据,哪一段用来做内存映射等。这些是通过一个个的vm_area_struct来表达的。每个vm_area_struct就描述了一段虚拟空间范围。这样,进程就知道哪些空间还可用。



2、实际物理空间的管理

机器实际具备有多少的物理空间,这个是定的,以每4K为一页,将它们管理起来。由页面描述符page来描述每个物理页框的状态。这样,内核就可以知道,还有实际多少物理内存可用。



分配了线性地址空间后,并不一定就马上分配物理页框,到用的时候再分配。

给定一个线性地址(虚拟空间里的地址),通过寻找vm_area_struct来确定是否合法,如果不包含在任何一个vm_area_struct里,说明这个虚拟地址还没有启用,是一个无效地址。如果找到对应的vm_area_struct,说明起码是被启用的线性地址,至于是否允许操作,则由权限来定。

如果是可以使用的,那么就会根据页目录表的起始地址,找到页目录表,进而找到页目录项,进而找到页表,再找到页表项。如果页表项表示实际没有物理页对应,那么就要进行系统调用,在实际的物理空间里找到一个可用的页框,映射到这个页表项。这个物理页里面应该放什么内容,由实际情况决定。如果是映射了某个文件的,那么就要结合vm_area_struct里记录的文件信息和相应的偏移量,将文件的相应内容装载到这个物理页。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值