基本概念与实现

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. 编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

    package zuoye; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; pub ...

  2. 【故障处理】队列等待之enq IV - contention案例

    [故障处理]队列等待之enq IV -  contention案例 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

  3. coursera机器学习笔记-神经网络,学习篇

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  4. HTTP状态码206和416

    HTTP 2xx范围内的状态码表明了:"客户端发送的请求已经被服务器接受并且被成功处理了". TTP/1.1 200 OK是HTTP请求成功后的标准响应 HTTP/1.1 206状 ...

  5. socket学习之聊天室

    服务端 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  6. & fg jobs bg

    & 执行程序的后面加&可以将程序转到后台(这个后台是当前会话的后台,并不是守护进程)执行,即$./a.out &,这样我们在打开诸如$gedit test.txt的时候可以写成 ...

  7. Linux服务器开机没响应,BIOS信息都没有

    于2015-10-16,记得是4月份装的服务器,上边ineedle都部署完毕,当时没有派上用场,这次华为测试需要一台ineedle测试机,便把这个安装好的ineedle请出来了,插上电源后,接上网线, ...

  8. linux 目录结构及其相关命令

    目录也是一个文件,它的唯一功能是用来保存文件及其相关信息.所有的文件,包括普通文件.设备文件和目录文件,都会被保存到目录中. 主目录 登录后,你所在的位置就是你的主目录(或登录目录),如果是root用 ...

  9. Mysql 如何实现列值的合并

    Mysql 如何实现列值的合并 SELECT  GROUP_CONCAT(name SEPARATOR ' ') AS name FROM A

  10. 嵌入式Linux开发板

    嵌入式Linux开发板开发介绍: iTOP-4412嵌入式Linux开发板搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,独家配备三星S5M8767电源管理,配备Andro ...