内存管理(阿巴阿巴

内存

内存地址及内存地址所存储的数据量(一个字节0x00)

内存的分段

逻辑地址及物理地址

逻辑地址为相对地址
逻辑地址如何转换到物理地址

程序运行

预处理-编译-汇编-链接

装入

  • 绝对装入 编译时 提前知道进程起始地址 单道程序环境
  • 可重定位装入(静态重定位)在装入时完成地址转换
    需要一次性装入所有数据,即需要分配要求的全部连续内存空间,不可以动态申请内存空间
  • 动态运行时装入(动态重定位)
    地址转换推迟到程序运行时进行,需要重定位寄存器(存入起始地址

链接

链接时将个模块逻辑地址整合为完整的逻辑地址

  • 静态链接:链接后直接装入完整的逻辑地址生成可执行文件
  • 装入时动态链接:装入时动态进行链接
  • 运行时动态链接:运行时动态进行链接,未使用的模块可以不进行链接

内存管理的功能

均由操作系统完成

内存空间的分配与回收

连续分配管理

单一连续分配(单一进程独占用户区) 固定分区分配(多个进程瓜分用户区 存在内部碎片(内存分配给进程但进程未使用的部分)) 动态分区分配(分区大小可变,存在外部碎片(某些空闲分区太小难以利用) 通过空闲分区表或空闲分区链存储空闲空间 使用动态分区分配算法进行分配 ) 通过紧凑技术解决外部碎片)

非连续分配管理方式

分段与分页都是内存管理的方式

  • 基本分页存储管理
    分页是系统行为,对用户不可见
    进程内存逻辑地址划分的页面与内存的页框 两者大小相等 通过页表存储页面与页框的关系 页表存储在PCB(进程控制块中) 逻辑地址到物理地址的转换(找页面号、查页表、确定偏移量 页面大小使用2的整数次幂)
    快表(TLB) 联想寄存器用于存储最近使用的页表项(页面号与页框号的对应 即页号与内存块号) 进程切换时会清空 是一种高速缓存即cache 可以加速地址变换的速度 局部性原理 时间局部性以及空间局部性

两级页表
单级页表存储在连续空间中,所需空间大 使用两级页表将页表项进行分组,即为二级表
所需要的页面不在内存时产生缺页中断

  • 基本分段存储管理
    内存分段 如以函数名作为段名分段及变量分段 每个段占据连续空间,段不相邻 段名与段号对应
    段号及段内地址
    段的大小由用户的程序决定
    分段可以实现信息的共享和保护,如多个进程对同一个代码段中存储数据进行访问(为纯代码或不可冲入代码(即可以供多个进程的共享的部分)

  • 段页式
    先分段再分页
    逻辑地址由段号、页号及页号偏移量组成

对内存进行逻辑上的扩充 覆盖(多个模块(同一个进程)使用通过一个覆盖区,程序员申明覆盖结构) 交换(进程在内存与外存之间动态调度,进程的pcb常驻内存 进程的状态 换出外存后挂起 缺页与交换相关 有限换出阻塞态的进程即低优先级的进程) 虚拟存储

实现物理地址和逻辑地址的转换即地址重定位

内存保护,各个进程在各自内存空间进行 设置上下限寄存器 或使用重定位寄存器以及界地址寄存器

由操作系统负责并
管理空闲与非空闲空间

虚拟内存

虚拟内存在外存中,由操作系统统一调配内存及外存对信息的调用
三个特性

  • 多次性 作业无需一次性装入内存,而是允许被分成多次调入内存
  • 对换性 无需常驻内存,可以在运行过程中进行内外存的换入换出
  • 虚拟性 从逻辑上扩充了内存的容量

虚拟内存在非连续分配的存储管理基础上进行,与之对应

  • 请求分页式
  • 请求分段式
  • 请求段页式
    需要加入请求调页(将不在内存的信息调入内存)或置换功能(将暂时不用的信息调出内存)

请求分页

  • 页表机制
    记录页面是否调入,记录已调入页面是否有进行修改(未修改直接覆盖),记录页面所在内存块或页框位置,记录外存地址,访问字段(页面访问情况 判断页面置换)
  • 缺页中断机构
    通过访问页表判断该页面是否存在于内存,若不存在则产生缺页中断,缺页的进程阻塞,调页完成后唤醒。由空闲块进行分配,无空闲块进行置换 缺页中断属于内中断
  • 地址变换机构
    快慢表一致,在块表则一定在内存中,被换出后快表清楚被换出的页表项

缺页不等于页面置换
最佳置换算法:保证最低的缺页率
先进先出置换算法:通过队列实现 belady异常,内存块的增大可能会导致缺页次数增加
最近最久未使用置换算法LRU:淘汰最近最久未访问的也页面 需要硬件支持,开销大
时钟置换算法(NRU) 最近未用算法:最近访问访问位置为1,缺页时指针发生转动,转动时被循环判断的页面访问位置0。
改进:优先淘汰未被修改的页面,减少写回外存的开销,使用访问位,修改位的标志位组进行判断。先找00(不修改标志位),再找01(修改访问位),扫描过程访问位置0,一轮后先找00,再找01。

页面分配、置换策略

  • 驻留集:给进程分配的物理块的集合,即可以使用的内存块
    驻留集固定分配以及可变分配 局部置换以及全局置换(置换的内存块是已分配的还是其他空闲内存块的)
    全局置换通过一个空闲物理块队列实现,若使用完毕则将其他未锁定的页面换出外存。
    可变分配局部置换:在置换算法的基础上通过缺页率判断是否进行新的物理块的分配,即根据缺页率动态减少或增加进程所可以使用的内存块

  • 页面的调入
    预调页策略:在调入内存时根据局部性原理提前将页面相邻的页面进行调入 一般用于进程开始时
    请求调入:即需要时进行调入页面 一般用于进程进行时
    内存区、对换区及文件区
    抖动现象:刚换出的页面又马上需要换入内存,增加内存块

  • 工作集:在某段时间间隔内,进程实际访问的页面的集合 通过检测工作集的大小确定驻留集的大小。 驻留集大小大于工作集。

内存映射文件

可以供多个进程访问同一个文件
将磁盘的文件映射到进程的虚拟地址空间,即以访问内存的方式访问磁盘空间,构建一个文件的虚拟地址以及物理地址的映射表
将多个进程的虚拟地址指向通过一个磁盘地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值