操作系统-内存管理

计算机体系结构

在这里插入图片描述

内存层次结构

在这里插入图片描述
在这里插入图片描述
逻辑地址空间:软件
物理空间:硬盘
对于电脑:
CPU缓存:128k
主存:2g
磁盘:500g

管理内存方法
  • 程序重定位
  • 分段
  • 分页
  • 虚拟内存
  • 按需分页虚拟内存
地址空间&地址生成

在这里插入图片描述
逻辑地址空间:软件
物理地址空间:硬盘
软件运行分配的地址空间最终都要落在内存或者硬盘上,具体落在什么地方,看系统分配。
在这里插入图片描述
c经过编译,生成.s文件,经过汇编生成.o,链接后.exe
在这里插入图片描述
过程如下:

  1. 当cpu要执行某条指令的时候,ALU会需要这条指令的内容,发出一个请求,参数就是逻辑地址。
  2. CPU里面的MMU会去查找映射表中是否存在对应的物理地址,如果没有就去内存中找,找到以后,CPU控制器会给主存发送我需要某个物理地址的内容,主存会把内存的内容通过总线传给CPU,CPU拿到指令后就可以对这条指令进行执行了。

操作系统方面:建立逻辑地址和物理地址映射关系

地址安全检测

在这里插入图片描述
操作系统要确保每个应用程序地址合法,根据头地址和长度判断,符合要求会返回物理地址,不符合会内存异常。
??内存不够的意思是不是:逻辑地址对应的物理地址已经超出有效地址范围,所以发生了内存不够了??

内存碎片
  • 定义:空闲内存不能利用
    • 外部碎片:在分配单元间的未使用内存
    • 内部碎片:在分配单元中的未使用内存
  • 动态分配
    • 第一匹配分配
      • 第一个满足的分配
      • 优点简单,易于产生更大的空闲块
      • 缺点容易产生外部碎片,(比如第一个空间满足占了以后,又占了第二块儿空间,一二之间的空间就不能利用了)
    • 最优匹配
      • 与目标相差最小,使用最小的可用空间块,碎片最小
    • 最差匹配分配
      • 为了分配n字节,使用最大的可用空闲块
      • 优势:适用于分配中等尺寸
      • 缺点:易于破坏大块,将来再分配大块就无法分配。
        在这里插入图片描述
碎片整理
  • 压缩式碎片整理:将代码压缩
    在这里插入图片描述
  • 交换式碎片整理:内存空间不够,将部分代码,交换到磁盘中,等程序执行完,再将程序拷贝到主存。
    在这里插入图片描述
非连续内存
  • 存在意义
    • 减少内存碎片
    • 允许共享代码和数据
    • 支持动态加载和链接
  • 缺点
    • 需要建立虚拟地址和物理地址之间转换
  • 建立转换
    • 分段
    • 分页
  • 分段
    • 分段地址空间
      在这里插入图片描述
    • 寻址方案 (硬件机制)
      • 段寄存器+地址寄存器
      • 段寄存器:存储段号,即内存“块”地址
      • 地址寄存器:段内偏移量
        在这里插入图片描述
    • 寻址过程简述
      • 段表:存储两个信息,base对应每个段号的物理地址,limit纪录每个段的长度。 由操作系统生成
      • cpu取指令后,获取到逻辑地址,首先从段表找到对应的段号,然后根据段内偏移长度,判断是否超出limit,如果超出会杀掉程序,然后就找到了物理地址所在时段。
  • 分页
    • 与分段区别
      • 每个段大小是可变的,但是页帧大小是固定的。
    • 分页地址空间
      • 帧:物理内存
      • 页:逻辑内存
      • 表示相同,便于寻址。比如都是4K大小。 512-》512、1024-》1024
      • 逻辑物理地址转换
        • 页表
        • MMU(内存管理单元)/TLB
    • 寻址方案
      • 物理地址(帧)寻址公式
        在这里插入图片描述
        在这里插入图片描述
    • 逻辑地址(页)寻址公式相同
      在这里插入图片描述
      页寻址过程:CPU获取逻辑地址页号后,根据页表(操作系统生成),找到帧号(物理地址),再加上偏移量o就找到物理地址。
    • 逻辑地址可能比物理地址大,通过虚拟地址实现。
    • 逻辑地址页是连续的,类似数组,但是物理地址帧不是连续的。但好处就是减少了碎片。
      在这里插入图片描述
  • 页表项第二位表示物理叶帧是否存在,0不存在,1存在。
  • 页表存在的问题
    • 非常大,64位机器如果每页1024字节,那么页表大小为 264/210=254
    • 因为大,CPU放不下,只能放到内存中,每次寻址需要访问2次内存。速度慢问题。
  • 解决方法:1.缓存 2.间接访问
    • 缓存:CPU里面的MMU(内存管理单元)里面的TLB,可以缓存最近访问的页帧转换,就不用查页表了,提高访问效率。但容量有限。未找到的话,去页表中寻址,然后由硬件[x86]/操作系统[mips]更新到TLB。
      在这里插入图片描述
    • 空间问题:
      在这里插入图片描述
      寻址过程:逻辑地址存储两个地址,先根据p1找到p2的起始地址,然后再根据p2找到物理地址。可以看到多了一次寻址过程,以时间换空间。
      节省空间的原因:第一次寻址没找到的话对应二级页表的pageTable,就不会存在了。而一级页表对应项还会存在。所以节省了空间。
  • 反向页表
    • 页表与物理空间大小相对应
      在这里插入图片描述
      以页号为key,以桢号为value,key和物理内存大小是相同的。
      好处:这种的页表占用内存小,
  • 如何建立关系(物理和逻辑地址)
    • 基于关联存储器方案(不够实用)
    • 基于hash查找的方案
      • PID(当前运行程序id)+pageNO,算出对应的桢号。问题是hash冲突。还是要放入内存,利用TLB机制。需要硬件软件配合。
        在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值