操作系统内存管理

操作系统内存管理

内存管理功能

存储器功能需求
容量
速度
信息永久保存
多道程序并行

共享,节省内存

保护,不允许内存中程序相互间非法访问

存储体系

三级存储体系:cache+内存+辅存

存储管理功能
地址映射

把程序中的地址变换成内存的真实地址

地址重定位,地址重映射

固定地址映射

编程或编译时确定逻辑地址到物理地址映射关系

程序加载时放在指定的内存区域

静态地址映射

程序装载时由操作系统完成逻辑地址到物理地址映射

程序运行前确定映射关系

程序不能移动

程序占用连续的内存空间

动态地址映射

程序执行过程中由操作系统完成逻辑地址到物理地址映射

程序移动后重新计算空间

程序占用内存空间可动态变化

程序不要求占用连续的内存空间

便于多个进程共享代码

硬件和软件复杂

虚拟存储

程序过大过多,内存不够

虚拟内存是面向用户的封闭存储空间

线性地址空间,封闭空间,和物理地址分离,程序员编程使用线性虚拟地址

内存分配

为程序运行分配足够的内存空间

解决问题

放置策略从

调入策略

淘汰策略

存储保护

保证内存中多道程序只能在给定的存储区域内活动并互不干扰

防止访问越界,越权

方法:界址寄存器

物理内存管理

分区存储管理
单一区存储管理

用户区不分区,完全被一个程序占用。DOS系统

简单,内存浪费

分区存储管理

用户区划分,适合单用户单任务系统

固定分区:程序装入前,内存已被分区,程序运行时不再变化。系统要维护分区表,适合具有固定任务数的多道程序系统。内存浪费:程序比所在分区小,大程序可能无法运行。

动态分区:程序装入时创建分区,分区动态建立。内存碎片:过小的空闲区。分区大小和个数可变,存在内存碎片

分区的分配

空闲区表:描述内存空闲区的位置和大小的数据结构

1.从空闲区表第一个去开始,寻找大于用户要求空间的空闲区

2.分割空闲区

3.剩余部分登记在空闲区表中

分割空闲区一般从底部分割,只改变空闲区的大小,位置不变

空闲表如何排序

顺序搜索算法

1.位置(首址)递增排序:

首次适应法:尽可能使用低地址空间

2.位置(首址)递减排序

3.空闲区大小递增排序

最佳适应法:尽可能先使用较小的空闲区

4.空闲区大小递减排序

最坏适应法:节省时间,大空闲区分割剩下部分很大,还能装下较大的程序

分类搜索法

快速适应算法:把所有空闲区按其容量大小分类,对于每一类具有相同的所有空闲分区,单独设立一个空闲分区链表。查找效率高,不产生分割,碎片。算法复杂。系统开销大。以空间换时间

分区的回收

回收释放区,登记到空闲区中

当前空闲区是否与释放区相邻

更新大小(相邻空闲区在前),更新位置和大小(相邻空闲区在后),先删除后更新大小(相邻两个空闲区),插入

内存覆盖技术

小的内存中运行较大的程序

常驻区:能被一段单独且固定占用,可划分多个

覆盖区:能被多段共用,可划分多个

核心层、中间层、应用层

编程复杂

程序执行时间长:从外存装入内存

内存交换技术

内存不够是把进程写到磁盘上(换出)

进程运行时重新写入内存( 换入)

增加进程并发数,不考虑程序结构

换入换出增加CPU开销,交换单位太大(进程)

减少交换传输信息量,外存交换空间的管理方法,程序换入时地址重定位

空闲内存管理

使用位图的存储管理:不好找连续

空闲链表:过小

内存碎片

过小的空闲区,难实际应用。内存碎片会降低内存有效利用率

动态分区:内存反复分配和分割

规定门限值

分割空闲区时,若剩余部分小于门限值,此空闲区不进行分割,全部分配给用户

内存拼接技术

把所有空闲区集中

释放区回收:拼接频率过大,系统开销大

系统找不到足够大的空闲区:管理复杂

定期:管理复杂

缺点:消耗系统资源,离线拼接,重新定义作业

解除程序占用连续内存才能运行的限制

把程序分拆多个部分装入不同分区

缺页中断

分级存储体系

cache命中CPU,内存没有命中CPU,

页表扩充

扩充有中断位和辅存地址的页表

中断位:在内存为0,不在内存为1

访问位:没有被访问为0,访问1

修改位:没有为0,有为0

地址映射过程中,访问目的页不存在,系统异常中断

缺页中断处理程序:辅存地址调入内存的某个页框中

缺页率:缺页次数/访问页面总次数

命中率=1-f

任务管理器中查看进程相关信息:页面错误(缺页次数)

页面淘汰

淘汰策略:选择淘汰哪一页的规则称淘汰策略

页面抖动:页面在内存和辅存频繁交换,会导致系统效率下降

好的淘汰策略:缺页率低,页面抖动少

淘汰算法
最佳算法OPT

淘汰不再需要或最远的将来才会用到的页面

理论最佳,实践中无法实现

先进先出淘汰FIFO

淘汰在内存中停留时间最长的页面

实现简单:时间排序

进程按顺序访问地址空间页面命中率才理想

第二次机会页面置换算法

链表

时钟页面置换算法

检查表针指向的页面clock,根据R采取动作,R=0淘汰

最久未被使用的页面

淘汰最长时间未被使用的页面

硬件方法实现:设置一个移位寄存器,每当页面被访问,重置为1,R左移一位

淘汰R值最大的页面

R位数越多越准确

软件:页表访问位

页表访问位R:确定该页访问状况

最不经常使用算法

到当前时间为止访问次数最少的页面

访问计数器

工作集页面置换算法

访问位R,生存时间

最近未使用页面置换算法NRU

每个页面设置一个访问位和修改位

从类编号最小的淘汰

最近最少使用算法LRU

软件模拟

缺页因素与缺页系统缺点

缺页因素:淘汰算法,分配给进程的页框数,页面的大小,程序的编制方法

页面太大:浪费内存

页面太小:浪费内存,页面增多,页表长度增加,换页频繁系统效率低

页面越小越容易缺页

分配给进程的页框数:页框越少越容易缺页

程序的编制方法:局部性越好越不容易缺页,跳转或分支越多越容易缺页

页式系统的不足

页面划分五逻辑含义

页的共享不灵活

页内碎片

分页系统的设计问题

局部分配策略和全局分配策略

全局分配策略:公平,乱

局部分配策略更好

负载控制

减少竞争内存的进程数

系统开销取决于页面大小和内部碎片

分离的指令空间和数据空间

共享页面:两个进程通过共享、、、

共性库:静态链接,动态链接

内存映射文件:进程通过一个系统调用将文件映射到虚拟地址空间的一部分。不会实际读入页面的内容,访问页面时,页面才会读入

清除策略

设置守护进程的后台进程

段式存储管理

进程分段:把进程按逻辑意义划分为多个段,每段有段名,长度不定,进程由多段组成

比如代码段,数据段,堆栈段的进程

内存分配

以段为单位装入,每段分配连续的内存,段和段不要求相邻

虚拟地址(VA)=段号S+段内偏移W

映射机制
段表(SMT)

记录每段在内存中映射的地址

基本字段:段号,长度,基址

扩展字段:中断位,访问位,修改位,R/W/X

段的共享

只有一份存储

多个进程映射到各自段表

共享模板可单独设置为段

缺点

段需要连续的存储空间

最大尺寸收到内存大小的限制

辅存中管理可变尺寸的段比较困难

过程

VA分离SW

查询段表

物理地址MA=B+W

段式系统和页式系统

地址空间:页式一维地址空间,段式二维地址空间

区别:段式可变,划分有意义,方便共享,用户可见,偏移有溢出

段页式存储管理

在段中划分页面

地址:段号,页号,页内偏移

内存按页划分及装入

映射:同时采用段表和页表实现地址映射

Intel CPU与Linux内存管理

Intel CPU物理结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YiBKPrWR-1603783308942)(C:\Users\Darlene\AppData\Roaming\Typora\typora-user-images\image-20200508092402751.png)]

实模式

20位地址空间:1M内存空间

段地址16位:偏移地址16位

段地址4位对齐

保护模式

32位地址空间:4G内存

多任务、、上下文切换

进程隔离

支持分段机制和分页机制

控制寄存器CR0

低五位组成机器状态字(MSW)

PE:0-实模式,1-保护模式

MP

EM

TS:任务切换

PG:允许分页

控制寄存器CR2

如果缺页,缺页的线性地址保存在CR2中

控制寄存器CR3

页目录基址

x86 CPU架构下的三种地址

逻辑地址

线性地址:逻辑地址转换

物理地址:未分页,线性地址=物理地址,分页,线性地址!=物理地址

段机制:逻辑地址到线性地址

分页机制:分页机制到物理地址

MMU:执行地址映射过程

Intel CPU段机制

段:一段连续内存

段描述符:描述段的属性

段基址:32位(段基址1 8+段基址2 24)

段界限:20位(段界限1+段界限2)

描述符表

对齐

保护模式

32位地址空间:4G内存

多任务、、上下文切换

进程隔离

支持分段机制和分页机制

控制寄存器CR0

低五位组成机器状态字(MSW)

PE:0-实模式,1-保护模式

MP

EM

TS:任务切换

PG:允许分页

控制寄存器CR2

如果缺页,缺页的线性地址保存在CR2中

控制寄存器CR3

页目录基址

x86 CPU架构下的三种地址

逻辑地址

线性地址:逻辑地址转换

物理地址:未分页,线性地址=物理地址,分页,线性地址!=物理地址

段机制:逻辑地址到线性地址

分页机制:分页机制到物理地址

MMU:执行地址映射过程

Intel CPU段机制

段:一段连续内存

段描述符:描述段的属性

段基址:32位(段基址1 8+段基址2 24)

段界限:20位(段界限1+段界限2)

描述符表

存放描述符的数组

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值