操作系统--存储管理3
-----段式内存分配-----
1.概念
一种顺应用户视角的内存管理机制;程序由多段代码、数据组成。
段是自然的逻辑单元
2.段式管理机制
# 将一个逻辑地址划分为两部分:段号和段内偏移量
# 段表:以段号为索引下标,将其映射到二维的物理地址
# 段表项内容:基地址+界限(段的开头+段的长度)存储在寄存器中
地址转化:先把段的偏移量和界限比较,超过则是非法访问,
若符合,根据基地址+界限:可以找到这个段在内存中的地址
#内存包含:通过在段表项设置保护位;来达到内存保护的功能
#内存共享:共享的基本单位是段:要共享的段,在段表的位置相同
3.段式分配注意的事情:
# 段的长度可变(区别于页),也面临动态分配和外部/内部碎片
----段页式内存分配----
1.概念:将逻辑地址划分为3部分:段号;页面;页内偏移
2.地址转换过程:先根据段号找到页面;在根据页面找到页桢;完成地址转换
----虚拟存储管理--是对非连续内存分配的延续------
1.虚拟存储的提出原因?
计算机中多进程导致内存空间不足;常见的解决办法:
* 覆盖技术--程序内部模块之间
目标:在可以在较小的内存中运行较大的程序
方法:1.依据程序的逻辑,将程序划分为若干功能独立的模块;将不会
同时执行的模块共享一块内存区域
2.将模块分为常用模块--常驻内存;可选模块在用的时候加载内存
3.不存在相互调用关系的模块为一组,可以放在共享内存中
缺点:需要程序员划分功能模块,定义覆盖方式,增加编程难度
执行时间也会增加
* 交换技术:增加正在运行的程序的内存(连续分配OS负责--进程之间)
方法:将现在等待的进程换出内存,为其他运行进程提供空间
换入换出的基本单位是进程:换出与换入
交换的时机:只有当内存不够/有不够的可能性的时候
交换区的大小:外存的大小;换入后:采用动态地址映射
* 虚拟存储技术:每个进程部分装入,其他部分放外村;
按照需求OS负责将其装入。【延续非连续分配】
*局部性原理:程序执行过程一个比较短的时期,所执行的指令地址和
指令的操作数地址,分别局限在一定的区域;
局部性原理分类
时间局部性:指令执行/数据访问和下次执行/访问都集中在小的时间间隔
这个为虚拟存储性能提供了前提。
空间局部性:当前指令和临近的几条指令,当前访问数据和临近的数据访问
都集中在一个较小的区域:循环/数组
分支局部性:一条指令的两次执行,很可能跳转到相同的物理位置。
可以任务程序的执行集中在某个区域里面;进而就可以确定将进程的那些指令
放到内存里面。本质就是确定进程常用的指令,将不常用放外存。
注意:局部性原理从理论上保证虚拟存储技术可以实现。
局部性特征是和程序的结构相关
在编写程序的时候,尽量编写可以提高程序局部性的结构
2.虚拟存储的基本概念
思路:将程序常用加载到内存,不常用的放在外存
原理:装载的时候将需要执行的页面/段放入内存
CPU要访问的不在内存的时候,CPU通知操作系统将相应的页面
加载进内存
注意:如果当前的内存已满,就涉OS进行页面/或段的置换操作
实现方式:虚拟页式存储、虚拟段式存储
虚拟存储技术基本特征:
* 不连续性:虚拟地址空间使用非连续;物理内存分配非连续
* 大用户空间:提供给用户的虚拟内存大于实际内存
* 部分交换:对进程部分的页面进行置换
虚拟存储的技术支持;
* 硬件:地址映射
* 操作系统提供页面置换操作
3.虚拟页式存储
概念:页式存储分配+按需调页+页面置换算法
思路:当用户进程加载进内存运行,只装入部分页面,就启动程序运行
在执行的过程中就会出现缺页异常;操作系统处理该异常;就是进行
页面装入/页面置换。
注意:虚拟页式存储页表项结构
逻辑页号+访问位+修改位+保护位+驻留位+物理页帧
驻留位:表示该页面是否在内存中
修改位:表示内存中的页面是否被修改(驻留位有效)
修改过:置换的时候需要写回外存
未修改过:置换的时候新的页面直接覆盖该页面
访问位:表示该页面是否被访问过:用于页面置换算法
保护位:表示可以对该页面进行的操作--读写
* CPU访问内存--存在三种访问的可能:
页面已经装入内存,有对应的页帧,CPU完成操作
非法页面引用;产生异常
合法页面引用,但是页面不再内存,把页面装入内存
注意:假如物理内存占满,需要进行页面的置换算法。
* 缺页中断及响应
引起缺页面中断,操作系统相应这个中断:
# 操作系统查找内核数据结构判断以下2种情况:
是合法的,但是页面不再内存中
是非法的--进程终止
# 操作系统查找系统内核数据结构,找出一个空闲的页帧
# 把页面从外存换入内存的空闲的页帧--页面置换算法
注意:内存已满,需要判断换出的页面是否被修改:
# 更新内核数据结构,更新进程页表
# 将进程页表中该项有效位值:定为v
# 缺页中断程序返回
# 重新执行引起中断的那条指令
只有进程真正需要的页面才会被装入内存,不使用就直接放在外存里面
* 虚拟页式存储中的外存管理
应能方便的在外存中找到具体的页面内容
根据不同类别的页面选择存储的位置
代码段:可执行的二进制文件
动态加载的共享程序段:动态调用库文件
其他段:交换空间
* 虚拟页式存储的性能
有效的存储访问时间:和缺页率相关
* 全局置换和局部置换
全局置换:在所有在内存的页面中选择一个页面换出
局部置换:仅仅在进程自己所属的页面中选择一个页面换出