概述
一、基本概念
- 虚拟内存:用辅助存储器(一般指磁盘)作为内存的补充。虚拟内存允许进程执行时只将部分程序放入内存,因此程序可以比物理内存大。虚拟内存的大小**受计算机寻址机制和可用的辅助存储器容量大限制,而不受内存容量的限制。
特征:①运行进程时只把现在要执行的页/段装入内存,其余页/段放在外存,需要时再利用请求调入页/段功能和置换功能将其调入内存。
②在逻辑上扩充内存容量
③访问速度接近于内存,没位(bit)成本接近于外存。 - 虚拟地址:即逻辑地址,虚拟内存中某个字节的地址,仿佛该字节在内存中(其实可能位于磁盘,但这对用户是透明的)。
- 虚拟地址空间:分配给某个进程(程序)的虚拟地址范围。
- 实地址:即物理地址。物理内存中某个字节的地址。
- 驻留集:进程运行时装入内存的部分。
- 工作集:在 t 时刻,进程在过去的N个时间单位内访问的页面集合(活跃页面)
- 内存管理单元MMU:集成在CPU中,或作为一个协处理器。
功能:分解逻辑地址;逻辑地址到物理地址的转换;查找更新快表TLB;进程切换时清空TLB;发出缺页中断或越界中断;设置和检查页表中各个特征位等。
!#当访问一个不再内存的逻辑地址时,产生缺页中断/缺段中断;OS阻塞该进程;启动磁盘I/O;装入所需的页/段后,将阻塞进程设置为就绪态。
?#就绪挂起态和阻塞挂起态进程的换入/换出内存和虚拟存储的换入/换出内存有什么区别?
答:挂起态进程的所有内存驻留页/段全部被换出,解除挂起时,所有以前的驻留页/段再重新读回内存。且CPU不会调度就绪挂起态进程。
虚拟内存将任一进程(运行态。就绪态和阻塞态)的部分页/段换入和换出内存。
二、分页
虚拟页式管理中的页表:
缺页中断(页错误)Page Fault:
- 在一条指令执行期间,当要范围的页不在内存是,产生和处理缺页中断,然后重新执行该指令。
- 一条指令的执行可能会引起多次缺页中断。
2.1虚、实地址转换
- 虚拟地址<页号,页内偏移> ——>实地址<页框号,页内偏移>
2.2两级页表
- 两级页表中的地址转换
2.3 倒排页表(反置页表)
- 倒排页表为内存的每一页框设置了一个页表项。
- 内容为该帧所属进程标识和页号(<-pid,page>)
- 简单倒排页表:
利用哈希函数的倒排页表
对虚拟地址的<-pid,page#>用哈希函数映射到散列链中。具有相同哈希值的表象被链在一起,可减少收缩时间。
2.4 TLB(快表)
转换检测缓冲区TLB,也称快表。为了解决上述页式内存管理带来的每次访问数据都需要访问两次内存的低效率问题。
- 将页表中进程运行最常用的部分放入TLB。
- TLB集成与CPU内部的MMU中。(TLB不同于Cache)
- 地址转换时:
①若要访问的页号位于TLB,则从TLB中取出帧号。
②否则从内存中的页表取出帧号,且添加到TLB中。
③当TLB满时,淘汰旧表项,在写入新表项。
!#若TLB缺页时,会从内存的页表找到指定帧号并送入TLB中,再由TLB传入内存。即
- 5页尺寸
- 业内碎片:页越小,碎片虽小。
- 页表长度:页越大,页表越大。
- 磁盘开销:页越大,磁盘I/O开销越小。
- 内存容量和程序大小:内存越大,页也可以越大。
- 程序局部性:
①页越小,局部性越好,且可以装入更多的页,缺页率低。
②页增大时,局部性被削弱,缺页率增加。当继续增大页则缺页率降低。
三、分段
- 以段为单位分配内存及内外存交换。段不等长。
- 当发生缺段中断时,可能需要移动或淘汰多个段才能满足新段的需要。
- 每个进程一张段表。段表结构:
-驻留位:该段是否在内存中。
-修改位:该段装入内存后是否被修改过。
-访问字段:指示最近被访问次数或距上次访问的时间间隔。
-存取权限:本段的存取权限是可写、只读或执行。-扩充位:指示此段是否可动态增长。越界时如果该段不可扩充则出错,否则增加段长并分配下方空闲内存。
四、段页式
- 用户程序划分为段,段再划分为大小相等的页。
- 内存划分和页同样大小的这女(页框),以帧为单位离散分配内存。每段最后一页有内碎片。无碎片。
- 逻辑地址结构:
- 段页式地址转换:
4.1保护共享
简单分段和虚拟分段易于保护和共享。
- 存取权限:隔断有执行、读、写等权限。
- 地址转换通过各自的段表进行,防止越界。
- 共享段再多个进程段表的起址和长度相同
?#在这些存储管理方法中:简单页式,简单段式,虚存页式,虚存段页式,虚存段式,动态分区,固定分区
固定分区支持多道程序设计,算法简单,但内碎片多;
态分区无无内碎片,但用于外碎片的压缩处理时间长;
页式克服克服了碎片多和压缩处理时间长的缺点,但不支持虚拟内存;
虚拟页式支持虚拟存储,离散分配内存,无外碎片,但不能以自然的方式提供内存的共享和存取保护机制;
易于共享易于共享保护,内存碎片多,支持虚拟内存。
易于共享保易于共享保护,内存碎片少,支持虚拟内存。
五、虚拟内存的实现策略
CPU必须支持分页和分段,才能实现虚拟内存。
虚拟存储管理需考虑的问题:
- 读取策略:某一页何时调入内存(请求调入/预调入)
- 置换策略:选择哪一页换出内存(FIFO/LRU等)。
- 驻留集管理:给进程分配多少帧(固定/可变帧数),置换时牺牲谁的帧(全局置换/局部置换)
- 清除策略:何时将脏页写回磁盘(请求清除/预清除)。
- 加载控制:调整系统并发度,防止抖动。
5.1读取策略
请求调入:仅把需要访问的页调入内存;
- 调入::考虑到启动磁盘的寻道和延迟开销,在调入所需页的同时,也调入若干可能马上访问的页面(通常是所需页的后面几页)。
5.2放置策略
进程的页/段放在内存哪个位置:
- 页:离散放在内存任意帧;
- 段:首次/下次/最佳适配等算法分配
5.3置换策略
当内存所有帧都已被分配、又必须装入一个新页时,选择在内存的哪一页被置换出内存。
策略目的:基于局部性原理,根据进程过去的访问行为预测将来访问的行为,置换那些最近一段时间内最不可能访问的页。
算法:
- 最佳置换(OPT)
淘汰永不再使用或下次访问距当前时间最长的页面。 (最佳,但不可能实现。用于衡量其他置换算法性能)
- 最近最少使用(LRU)
淘汰在最近一段时间内最久未使用的一页。
实现:可为每页添加“上次访问时间戳”。开销大
- 先进先出(FIFO)
淘汰驻留内存时间最久的一页。
实现:将页面按调入内存的时间先后排成一个队列,每次淘汰对首页。性能差
- 时钟(Clock)
简单时钟算法
- 每个页表项设一个使用位:
- 某进程的所有页面(或整个内存的页框)排成一循环缓冲链;某页被装入或访问时,其使用位U置1;
- 置换时顺序查找循环链:U=0,置换该页;U=1,将U置0;替换指针前移。下次置换时从替换指针处开始查找。
缺页率性能优劣递减:OPT>LRU>CLOCK>FIFO
时钟算法改进
每个页表项设置“使用位U——修改位M”,访问某页时U置1;被修改时M置1。
① U=0,M=0 (最佳淘汰页) 最近未访问,且从未修改
② U=0,M=1 最近未访问,但曾被修改
③ U=1,M=0 最近被访问,但从未修改
④ U=1,M=1 (最不该淘汰) 最近被访问,且曾被修改
淘汰顺序优先级:①②③④
5.4驻留集管理
- 为进程分配主存时:
-每个进程的帧越少,内存中进程就越多,并发度越高。
-如果进程只有小部分在内存里,缺页率会相当高。为进程增加一些内存帧将降低缺页率。
-当分给进程的内存帧超过一线限度后,继续增加帧,也不会明显亮度进程的缺页率。 - 分配给一哥进程的帧最小数量:至少一哥指令要用到的页应该同时在内存。
5.4.1 缺页率
- 缺页率 = 不成功访问次数/总访问次数
- 达到“可接受的”缺页率
- 如果缺页率太高,将增加进程帧数
- 如果缺页率态度,将减少进程帧数
5.4.2 页面分配
- 固定分配:进程分得的页框数固定不变。
- 可变分配:根据缺页率,进程分得的页框数可动态增加或减少。
5.4.3置换范围
- 局部置换:每个进程只从它自己的已分配帧中选择置换帧。
- 全局置换:进程在整个内存范围内选择置换帧。
5.4.4清除策略
- 请求式清除:仅当需要换这个脏页时把它写回,之后再调入新页。
- 预约式清除:即使还不需要置换脏页,也呈批地把他们写回(例如当磁盘空闲或脏页达到一定数量时,可降低磁盘I/O开销。)
5.4.6加载控制
- 抖动:当系统并发度过高,缺页频繁,用于调页的时间比进程实际运行时间还多,CPU利用率急剧下降,成为抖动。
- 采取哪些措施可以预防抖动?
①在调度程序中引入工作集算法:当各进程的内存驻 留集足够大时,才调入新作业
②L=S准则:调整并发度,使得产生缺页的平均时间 (即缺页中断之间的平均时间)等于处理一次缺页中 断的平均时间,此时CPU利用率高。
③ 50%准则:磁盘利用率50%时,CPU利用率高。
④当系统并发度较高时,挂起若干进程(如优先级低 的、年轻的、发生缺页的、占空间少的、占空间 多的、剩余运行时间长的进程)。
最后
以上就是奋斗鼠标为你收集整理的操作系统-6——虚拟内存一、基本概念二、分页 三、分段四、段页式的全部内容,希望文章能够帮你解决操作系统-6——虚拟内存一、基本概念二、分页 三、分段四、段页式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复