基本概念与实现

1)局部性原理

在一段时间内,运行的作业程序仅访问(涉及到)一部分作业代码,即不会涉及整个地址空间。即在一段时间间隔内,仅装入一部分代码,作业照样能正常运行

2)虚拟存储器的引入

作业(进程)运行时,仅装入其代码的一部分到物理内存,待需要时再装入其余部分,同时还可将不再运行的部分调出物理内存。变相地扩充了内存容量,即实现了虚拟存储器。

虚拟内存

①虚拟内存将内存抽象成一个巨大的、统一的存储数组,进而将用户看到的逻辑内存与物理内存分开
②只要部分程序需要放在内存中就能使程序执行
③逻辑地址空间可以比物理地址空间大
④允许地址空间被多个进程共享
⑥允许更多进程被创建
 
 
 
虚拟地址空间
 
 
 
当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存有以下优势
 
①程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。
 
②程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动。
 
③不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。
 
 
进程可用的虚拟地址范围称为该进程的虚拟地址空间。每个用户模式进程都有其各自的专用虚拟地址空间。 对于 32 位进程,虚拟地址空间通常为 2 GB,范围从 0x00000000 至 0x7FFFFFFF。对于 64 位进程,虚拟地址空间为 8 TB,范围从 0x000'00000000 至 0x7FF'FFFFFFFF。一系列虚拟地址有时称为一系列“虚拟内存”
 
 
虚拟内存可以用以下方式来实现
 
①覆盖与交换技术
②请求页式调度
③请求段式调度
 
 
 
①覆盖与交换技术
 
 
 
 
②请求页式调度
 

算法思想:

作业分页(page),内存分块(帧,frame),页与块的大小相等。先装入部分页到物理内存,待运行需要时再调入新的页,淘汰旧的页(交换)

只在页面需要时,才把它们载入物理内存:需要更少的输入输出,更小的内存,更快的响应,更多的用户
 
有效-无效位:
 
页表中的每一项与一有效无效位与之关联。(1表示该页在物理内存中,0表示不在物理内存)
有效无效位初始为0
当进程试图访问那些尚未调入到物理内存的页时,对标记为无效的页面的访问会产生页错误陷阱(page-fault trap,缺页)
 
 
 
 
当有些页不在内存中时的页表:
 
 
 
 
缺页(中断)
 
 
1.检查进程的页表,以确定该引用是合法还是非法的地址访问。
2.如果引用非法,那么终止进程。如果引用有效但是尚未调入页面,引起缺页中断。
3.找到一个空闲块(从空闲块链表中取一个)
4.调度一个磁盘操作,以便将所需要的页调入刚分配的块
5.当磁盘读操作完成后,修改进程的内部表和页表,以表示该页已在内存中。
6.重新开始因非法地址陷阱而中断的指令。进程现在能访问所需的页,就好像它似乎总在内存中。
 
 
处理缺页的步骤:
 
 
 
处理缺页的流程:
 
 
 
 
 
那么。。没有空闲块时该如何处理?
 
页替换: 在内存中找到一些不再使用的页,将它换出。
 
 
页面置换
 
 
给原有的缺页中断服务程序增加页置换,可以防止内存的过度分配(over-allocating)。
使用修改位(脏位)来降低页传输的开销 - 只有被修改过的页才写回至磁盘。
页置换分开了逻辑内存与物理内存 - 采用这种机制,小的物理内存能为程序员提供巨大的虚拟内存。
 
 
页置换的基本方法
 
1.查找所需页在磁盘上的位置;
2.查找一空闲块;
 如果有空闲块,那么就使用它;
 如果没有空闲块,那么就使用页置换算法以选择一个“牺牲”块(victim frame);
 将“牺牲”块的内容写到磁盘上;修改页表;
3.将所需页读入(新)空闲块;修改页表;
4.重启用户进程;
 
 
页面置换算法
 
主要追求最低的缺页
 
常用的页面置换算法模拟:见文章 页面调度算法模拟
 
 
块分配
 
 
每个进程需要最低数量的页

例如:IBM 370至少需要6页用来处理SS MOVE指令

 指令是多字节指令,可能跨越2页
 要移动的字符的块和要移动到目的的区域也可能都要跨页。
 
两种主要的分配方案:固定分配,优先级分配
 
 
固定分配
 
平均分配:如100块,5个进程,则给每个进程20块
比例分配:根据进程的大小按比例分配
特点:每个进程所分配的数量会随着多道程序的级别而有所变化;优先级进程与低优先级进程在这种分配方式下没有任何区别。
 
 
优先级分配
 
按优先级比例而非进程的大小来分配
 
如果进程 Pi 产生了一个缺页,那么:
  从自身的块中选择用于替换
  从比自身优先级低的进程中选取块用于替换
 
 
全局置换:允许一个进程从所有块集合中选择一个置换块,而不管该块是否已分配给其他进程;一个进程可以从另一个进程中取块。
局部置换:要求每个进程仅从其自己的分配块中进行选择
 
 
 
系统颠簸(抖动)
 
 
抖动:进程一直忙于将页面换进换出。
如果一个进程没有足够的页,那么缺页率就会非常高。这会导致CPU使用率低,这时OS认为必须提高多道程序的程度,因此,新的进程会加入到系统中来。
 
 
 

OS存储器管理(三) 虚拟存储器的更多相关文章

  1. OS存储器管理(一)

    存储器的层次: 分为寄存器.主存(内存)和 辅存(外存)三个层次. 主存:高速缓冲存储器.主存储器.磁盘缓冲存储器, 主存又称为可执行存储器: 辅存:固定磁盘存储器.可移动的外部存储器: 其可长期保存 ...

  2. OS存储器管理(二)

    离散分配 分页(Paging),分段,段页式 一.分页   一个进程的物理地址可以是非连续的:   将物理内存分成固定大小的块,称为块(frame): 将逻辑内存分为同样大小的块,称为页(page): ...

  3. Intel 80386 微处理器的存储器管理

    一.存储器的管理       存储器的管理是一种硬件机制,微处理器在总线地址上对物理存储器进行寻址.但是,为了给程序提供比物理存储器容量更大的空间,就引入了虚拟存储器的概念,它在外存(比如磁盘)的支持 ...

  4. MMU——存储器管理单元

    更多文档参见:http://pan.baidu.com/s/1qW0hjwo MMU,全称Memory Manage Unit, 中文名——存储器管理单元. 许多年以前,当人们还在使用DOS或是更古老 ...

  5. 从内存管理原理,窥探OS内存管理机制

    摘要:本文将从最简单的内存管理原理说起,带大家一起窥探OS的内存管理机制,由此熟悉底层的内存管理机制,写出高效的应用程序. 本文分享自华为云社区<探索OS的内存管理原理>,作者:元闰子 . ...

  6. Django之学员管理三

    Django之学员管理三 web框架的本质: 本质是客户端和服务端的交互.用socket实现. socket客户端(浏览器) 2.发送ip和端口,http://www.baidu.com:80/ind ...

  7. 异数OS 星星之火(三)--异数OS-织梦师云 微服务编写入门

    . 异数OS 星星之火(三)–异数OS-织梦师云 微服务编写入门 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...

  8. 8、Cocos2dx 3.0三,找一个小游戏开发3.0存储器管理的版本号

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27693365 复杂的内存管理 移动设备上的硬件资源十 ...

  9. Linux内存描述之内存区域zone–Linux内存管理(三)

    服务器体系与共享存储器架构 日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDriver ...

随机推荐

  1. org.apache.jasper.JasperException: Unable to compile class for JSP

    项目启动时报错 : The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory S ...

  2. SQL Server 2008 R2——VC++ ADO 操作 存储过程 向datetime类型参数传入空值

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  3. 烂泥:NFS做存储与KVM集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前有关NFS的文章,我们介绍的都是NFS的使用挂载等等.这篇文章我们介绍有关NFS作为存储使用. 既然本篇文章的主题是有关NFS的,我们还是先把NFS ...

  4. perl操作sybase

    设置环境变量 export PERL5LIB=:/redhat/perl/lib64/perl5 安装DBI tar -xzvf DBI-1.631.tar.gz cd DBI-1.631 perl ...

  5. x01.os.1: BIOS 中断

    这只是一点准备工作.为了显示字符串,需要调用中断:int  0x10 (AH=0x13).具体参数设置,参考我的归纳整理如下: INT 10 (AH = 0) -----------------功能: ...

  6. Eclipse快捷键-方便查找

    [Ct rl+T] 搜索当前接口的实现类 1. [ALT +/]    此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ ...

  7. Spring MVC @ResponseBody返回中文字符串乱码问题

    朋友做小项目练手的时候遇到的,着实让他郁闷够呛..这个问题的确很恶心.. 项目中引用的json包,直接用@ResponseBody注解返回json字符串..有关这个的乱码问题网上很多,各种花样各种转码 ...

  8. [转]ASP.Net篇之Session与Cookie

    本文转自:http://www.cnblogs.com/japanbbq/archive/2011/08/31/2160494.html Session: Session是“会话”的意思,然而,因为h ...

  9. plain framework 1 版本更新 1.0.2 增加打包插件

    由于个别因素,该框架的文档没有及时的更新到博客上,但是离线的文档已经完成.本次更新对框架来说显得比较重要,因为在文档的编写过程中经过再次的阅读代码修复了不少错误,最主要的是统一了整个框架的标准风格.对 ...

  10. HTML5 WebSocket 技术介绍

    WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebSocket技术,后台可以随时向前端推送消息,以保证前后台状态统一,在传统的无状态HTTP协议中,这 ...