Linux中内存管理方式

程序地址空间
  1. 进程中访问的地址都是虚拟地址
  2. 虚拟地址空间:操作系统向进程听过 mm_struct 结构体描述的一个虚拟的,现行的地址空间(空有地址编号,但不具备存储)

操作系统通过虚拟地址空间,给每一个进程描述了一个完整的,独立的空间。虚拟地址空间,可以让进程依然使用连续的地址,通过页表映射之后,实现内存访问控制 – 进一步提高了进程的独立性
页表的主要功能: 映射虚拟地址与物理地址的关系/提供内存访问控制
在这里插入图片描述

内存管理方式

内存管理方式: 分页式内存管理 / 分段式内存管理 / 段页式内存管理

分页式

地址组成: 页号 + 页内偏移
页号: 页表中页表项的编号
页内偏移: 具体一个变量首地址相较于内存页起始位置的偏移量

物理内存块号 X 物理内存块大小 X 虚拟地址中的页内偏移 = 物理地址
分页式内存管理就是把物理内存分成内存大小相等的若干页,每一页的编号是内存块号,物理内存块大小就是页面大小。假如说你要记笔记,现在有一个笔记本就是分好页的物理内存,每一页都有一个页号,每一页的大小是物理内存块的大小,每一页又有很多行,假如说你在第5行记了一句话,那么第五行就是相对于这一页第一行的偏移量。

假设内存大小 4G,页大小 4096 字节,意味着页号所占的位是 2^20,也就是说虚拟地址的高 20 位都是页号,低 12 位就是页内偏移。
怎么算的? 4096字节为 1页,4G / 4096Byte = 1024*1024,也就是 2^20.

**优点:**将物理内存进行分块管理,通过页表映射实现数据在物理内存上的离散式存储,提高内存利用率

分段式

地址组成: 段号 + 段内偏移
段号: 物理段起始地址
优点: 使程序员对内存的管理更加方便,将内存空间分成了代码段,初始化全局段……;什么变量就在什么段申请地址

段页式

地址组成: 段号 + 页号 + 页内偏移 +段表 +段内页表(在每一个分段内,采用分页式管理)

每个分段都有一个页表,通过地址中的段号,找到段表项,通过段表项中段内页表起始地址找到自己的页表,通过地址中的段内页号,在这个页表中找到页表项,通过页表项中的物理块号 + 页内偏移得到最终的物理地址

缺页中断

内存只有 8G ,运行的程序的数据和代码都是在内存中,意味着运行的程序多了,有可能内存就不够用了;
磁盘分区有两种:交换分区 / 文件系统分区
交换分:作为交换内存使用

当内存不够用的时候,内存中并不是所有的数据都是活跃数据;这时候操作系统则会根据一定的算法,将某块内存中的数据保存到磁盘的交换分区中,腾出这块内存重新加载数据。
但是每个进程的页表中记录了每一个虚拟地址对应的物理地址 — 如果某个虚拟页面的物理内存中的数据被交换出去了,保存到交换分区,则将这个页表项置为缺页中断,等待下次这个进程要访问这个被交换出去的数据的时候(注意:这个数据当前并没有在内存中 – 保存在交换分区中),出发缺页中断,重新从交换分区将数据交换回来
LRU算法: 最久未使用 – 内存中最久没有被访问过的数据放到交换分区

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值