• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

风子sama

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

操作系统虚拟内存

操作系统虚拟内存

这个在我们平时使用电脑特别是Windows系统的时候太常见了。很多时候我们使用点开了很多占内存的软件,这些软件占用的内存可能已经远远超出了我们电脑本身具有的物理内存。为什么可以这样呢?正是因为虚拟内存的存在,通过虚拟内存可以让程序可以拥有超过系统物理内存大小的可用内存空间。另外,虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)。这样会更加有效地管理内存并减少出错。
虚拟内存是计算机系统内存管理的一种技术,我们可以手动设置自己电脑的虚拟内存。不要单纯认为虚拟内存只是“使用硬盘空问来扩展内存"的技术。虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且把内存扩展到硬盘空间。

虚拟内存 使得应⽤程序认为它拥有连续的可⽤的内存(⼀个连续完整的地址空间),⽽实 际上,它通常是被分隔成多个物理内存碎⽚,还有部分暂时存储在外部磁盘存储器上,在需 要时进⾏数据交换。与没有使⽤虚拟内存技术的系统相⽐,使⽤这种技术的系统使得⼤型程 序的编写变得更容易,对真正的物理内存(例如 RAM)的使⽤也更有效率。⽬前,⼤多数 操作系统都使⽤了虚拟内存,如 Windows 家族的“虚拟内存”;Linux 的“交换空间”等。 --------维基百科

局部性原理

局部性原理是虚拟内存技术的基础,正是因为程序运⾏具有局部性原理,才可以只装⼊ 部分程序到内存就开始运⾏。

局部性原理表现在以下两个方面:

  1. 时间局部性︰如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。产生时间局部性的典型原因,是由于在程序中存在着大量的循环操作。
  2. 空间局部性︰一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,这是因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的。

时间局部性是通过将近来使用的指令和数据保存到高速缓存存储器中,并使用高速缓存的层次结构实现。空间局部性通常是使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现。虚拟内存技术实际上就是建立了“内存一外存"的两级存储器的结构,利用局部性原理实现高速缓存。

虚拟存储器

勘误:虚拟存储器⼜叫做虚拟内存,都是 Virtual Memory 的翻译,属于同⼀个概念。

基于局部性原理,在程序装⼊时,可以将程序的⼀部分装⼊内存,⽽将其他部分留在外存,就可 以启动程序执⾏。由于外存往往⽐内存⼤很多,所以我们运⾏的软件的内存⼤⼩实际上是可以⽐ 计算机系统实际的内存⼤⼩⼤的。在程序执⾏过程中,当所访问的信息不在内存时,由操作系统 将所需要的部分调⼊内存,然后继续执⾏程序。另⼀⽅⾯,操作系统将内存中暂时不使⽤的内容 换到外存上,从⽽腾出空间存放将要调⼊内存的信息。这样,计算机好像为⽤户提供了⼀个⽐实 际内存⼤的多的存储器——虚拟存储器

虚拟内存的技术实现

虚拟内存的实现需要建⽴在离散分配的内存管理⽅式的基础上。 虚拟内存的实现有以下 三种⽅式:

  1. 请求分⻚存储管理 :建⽴在分⻚管理之上,为了⽀持虚拟存储器功能⽽增加了请求调⻚功能 和⻚⾯置换功能。请求分⻚是⽬前最常⽤的⼀种实现虚拟存储器的⽅法。请求分⻚存储管理 系统中,在作业开始运⾏之前,仅装⼊当前要执⾏的部分段即可运⾏。假如在作业运⾏的过 程中发现要访问的⻚⾯不在内存,则由处理器通知操作系统按照对应的⻚⾯置换算法将相应 的⻚⾯调⼊到主存,同时操作系统也可以将暂时不⽤的⻚⾯置换到外存中。
  2. 请求分段存储管理 :建⽴在分段存储管理之上,增加了请求调段功能、分段置换功能。请求 分段储存管理⽅式就如同请求分⻚储存管理⽅式⼀样,在作业开始运⾏之前,仅装⼊当前要 执⾏的部分段即可运⾏;在执⾏过程中,可使⽤请求调⼊中断动态装⼊要访问但⼜不在内存 的程序段;当内存空间已满,⽽⼜需要装⼊新的段时,根据置换功能适当调出某个段,以便 腾出空间⽽装⼊新的段。
  3. 请求段⻚式存储管理

很多⼈容易搞混请求分⻚与分⻚存储管理,两者有何不同呢?

请求分⻚存储管理建⽴在分⻚管理之上。他们的根本区别是是否将程序全部所需的全部地址空间 都装⼊主存,这也是请求分⻚存储管理可以提供虚拟内存的原因。 它们之间的根本区别在于是否将⼀作业的全部地址空间同时装⼊主存。请求分⻚存储管理不要求 将作业全部地址空间同时装⼊主存。基于这⼀点,请求分⻚存储管理可以提供虚存,⽽分⻚存储 管理却不能提供虚存。 不管是上⾯那种实现⽅式,我们⼀般都需要:

  1. ⼀定容量的内存和外存:在载⼊程序的时候,只需要将程序的⼀部分装⼊内存,⽽将其他部 分留在外存,然后程序就可以执⾏了;
  2. 缺⻚中断:如果需执⾏的指令或访问的数据尚未在内存(称为缺⻚或缺段),则由处理器通 知操作系统将相应的⻚⾯或段调⼊到内存,然后继续执⾏程序;
  3. 虚拟地址空间 :逻辑地址到物理地址的变换。

⻚⾯置换算法

地址映射过程中,若在⻚⾯中发现所要访问的⻚⾯不在内存中,则发⽣缺⻚中断 。

缺⻚中断 就是要访问的⻚不在主存,需要操作系统将其调⼊主存后再进⾏访问。 在这个时 候,被内存映射的⽂件实际上成了⼀个分⻚交换⽂件。

当发⽣缺⻚中断时,如果当前内存中并没有空闲的⻚⾯,操作系统就必须在内存选择⼀个⻚⾯将 其移出内存,以便为即将调⼊的⻚⾯让出空间。⽤来选择淘汰哪⼀⻚的规则叫做⻚⾯置换算法, 我们可以把⻚⾯置换算法看成是淘汰⻚⾯的规则。

OPT页面置换算法(最佳页面置换算法)︰最佳(Optimal,OPT)置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获 得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。一般作为衡量其他置换算法的方法。

FIFO (First In First Out)页面置换算法(先进先出页面置换算法)︰总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。

LRU (Least Currently Used)页面置换算法(最近最久未使用页面置换算法)︰LRU算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间T,当须淘汰一个页面时,选择现有页面中其T值最大的,即最近最久未使用的页面予以淘汰。

LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法)︰该置换算法选择在之前时期使用最少的页面作为淘汰页。

posted on 2021-09-29 10:37  风子sama  阅读(156)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3