江西建设安全网站/51外链代发网
- 虚拟存储技术
- 请求分页
- 页面置换
- 内核内存分配
- 虚拟内存中的其他
虚拟存储技术
一:背景
-
代码必须装入内存才能执行,并不是所有代码都能装入内存(错误代码/不常用的函数/大的数据结构都不放入)
【且在运行过程中也必须一直驻留内存。】
所谓“虚拟存储器”,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
【不是物理上扩充内存容量】
虚拟存储器的可行性是因为程序运行局部性原理:在一段较短的时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
实现虚拟存储器的主要技术:请求调页(段)技术、页面(分段)置换技术。
二:程序部分装入优点 -
局部性原理:一个程序只要部分装入内存就可以运行(整个程序不是同一时间都要运行)
-
优点:
-
进程大小不再受到物理内存大小限制
-
每个进程需要的内存更小
-
更多进程可以并发运行
-
I/O更少
三:虚拟内存技术
补充:进程的虚拟地址空间是指分配给该进程的虚拟内存。
定义:当进程运行时,先将其一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访问的数据不在内存时,由操作系统自动完成将它们从磁盘调入内存执行。
虚拟地址空间:分配给进程的虚拟内存
虚拟地址:在虚拟内存中指令或数据的位置
虚拟内存:内存和磁盘有机结合得到的大“内存”即虚存。
【虚拟内存——区分开物理内存和用户逻辑内存】
【逻辑地址空间能够比物理地址空间大】
【允许多个进程共享同一地址空间】
【允许更有效的进程创建】
- 虚拟存储器的大小由两个因素决定:
1.操作系统字长
2.内存外存容量和
四:写时复刻
允许父进程和子进程在初始化时共享页面
(如果其中一个进程修改了一个共享页面,会产生副本)
(更加高效)
(应用在windows xp,Linux等系统)
【vfork:fork()变形,不使用写时复刻】
五:实现
虚拟存储的实现是基于程序局部性原理,其实质是借助外存将内存较小的物理地址空间转化为较大的逻辑地址空间。
1:虚拟分页存储管理的方式包括(请求式分页和预调页)
2:使用分页,分段,段页式,可以用这三种存储管理方法实现虚拟存储
六:其他
Q:虚拟存储技术与内存管理技术的区别与联系
A:虚拟管理允许部分装入和部分对换,实存管理不允许这样做。
Q:为什么要引入虚拟存储器?
A:在实际存储器存储管理方式中,存在内存空间的严重浪费,其次,内存利用率低,减少系统的吞吐量,为此,引入了虚拟存储器
请求分页
一:基本思想
- 进程开始运行前不是装入全部页面,而是装入一个or零个页面
- 运行后根据进程运行需要,动态装入其他页面
- 当内存空间已满,而又需要装入新的页面时,则根据某种算法置换内存中的某个页面,以便装入新的页面。
二:请求分页(按需分页)
只有在一个页需要的时候才把它换入内存
- 需要很少的I/O
- 需要很少的内存
- 快速响应
- 多用户
懒惰交换:只有在需要页的时候,才将它调入内存
三:有效-无效位
- 每个页表的表项有一个有效-无效位的相关联:1表示在内存,0表示不内存。
- 在所有的表项中,这个位被初始化位0
四:缺页中断(页错误)(程序中断)
对一个页访问,首次访问该页需要陷入OS(缺页中断)
五:请求分页讨论
六:指令重启
七:请求分页的例子
八:性能优化
九:其他:
Q:在页式存储管理系统中,页表内容如表所列。
页号 块号
0 2
1 1
2 6
3 3
4 7
若页的大小为4KB,则地址转换机构将逻辑地址0转换成物理地址为( )。
A:8192
Q:请求分页与交换
A:请求分页与交换技术不同之处在于交换对象的粒度不同。交换对整个进程进行操作;而调页程序只是对进程的单个页面进行操作
Q:请比较纯请求分页和预调页的优缺点。
A:求页面调度即当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便立即提出请求,由 OS 将其所需页面调入内存。
页面置换(包含FIFO)
一:如果没有空闲帧怎么办?
A:页置换——找到内存中没用使用的一些页,换出。
(同一个页可能会被装入内存多次)
二: 基本页置换方法
- 1.查找所需页在磁盘上的位置
- 2.查找一个空闲页框(如果有就用,如果没有就牺牲一页,更新成空白,将牺牲的帧的内容写到磁盘上,更新页表和帧表)
- 3.将所需页读入(新)空页框,更新页表和帧表
- 4.重启用户进程
三:页置换讨论
- 如果发生页置换,则缺页处理时间加倍
- 防止页面转移过多(用modify bit/dirtynbit)
- 页置换完善了逻辑内存和物理内存的划分
四:页置换算法
-目的: 找出一个导致最小缺页率的算法
通过运行一个内存访问的特殊序列(访问序列)计算这个序列的缺页次数。
五:重点(页面置换算法)
- 最优置换算法(OPT)
- 先进先出置换算法(FIFO)
- 最近最少使用置换算法(LRU)
- 近似LRU算法(二次机会法)
五-1:先进先出置换算法(FIFO)
- 置换在内存中驻留时间最长的页面
- 容易理解和实现,但是性能不是很好。
- 实现:使用FIFO队列管理内存中的所有页
可能会产生BElady异常——更多的页框和更多的缺页
五-2:最优置换算法(OPT)
- 被置换的页式将来不再需要的或者是最远的将来才会被使用的页(使用频率近似=无)
- 实现:?
- 作用:作为一种标准来衡量其他算法的性能
五 -3最近最少使用算法(LRU)
- 置换最长时间没有使用的页
- 性能接近OPT
- 实现:计数器(时间戳)或栈
- 缺点:开销大,需要硬件支持。
五-4:LRU近似算法
- 在没有硬件支持的系统中,可使用LRU近似算法
- 访问位:(每个页都与一个位相关联,初始值为0)(页被访问时设为1)
五-5:二次机会算法(是FIFO的增强算法)
六:其他
Q:页面置换算法优缺点
A:优点:只需要极少的物理内存就可以实现非常大的虚拟内存。
缺点:页面置换,会加大内存访问的平均访问时间。
Q:LRU有哪些近似算法?如何实现?
A:1.附加引用位算法;2.二次机会算法; 3.增强型二次机会算法。
页框的分配和系统颠簸
一:页框的分配
必须满足:每个进程所需要最少的页数
例子:IBM 370-6处理SS MOVE指令:
- 指令是六个字节,可能跨越2页
- 2页处理from
- 2页处理to
*两个主要的分配策略
(固定分配/优先级分配)
一-1:固定分配
一-2:优先级分配
二:全局置换和局部置换
- 全局置换:进程在所有的页框中选择一个替换页面,一个进程可以从另一个进程中获得页框
- 局部置换:每个进程只从属于它自己的页框中选择
三:颠簸
Q:为什么会发生颠簸?
A:分配的页框数<局部的大小之和
【利用局部置换算法可以限制系统颠簸。】
【系统"抖动"现象的发生可能是由置换算法选择不当引起。】