OSOS存储器管理(三) 虚拟存储器

基本概念与实现

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认为必须提高多道程序的程度,因此,新的进程会加入到系统中来。

时间: 2024-08-05 19:02:40

OSOS存储器管理(三) 虚拟存储器的相关文章

【操作系统】存储器管理(四)

一.前言 在分析了处理器调度后,接着分析存储器管理,如何对存储器进行有效的管理,直接影响着存储器的利用率和系统性能.下面,开始存储器管理的学习. 二.存储器的层次结构 2.1 主存储器 主存储器是计算机系统中的一个主要部件,用于保存进程运行时的程序和数据,CPU的控制部件只能从主存储器中取得指令和数据,数据能够从主存储器中读取并将他们装入到寄存器中,或者从寄存器存入到主存储器,CPU与外围设备交换的信息一般也依托于主存储器地址空间.但是,主存储器的访问速度远低于CPU执行指令的速度,于是引入了寄

二、存储器管理

操作系统的功能包括:处理器管理.存储器管理.文件管理.设备管理等. 内存管理的功能有:1.内存空间的分配与回收,包括内存的管理和共享.2.地址转换,把逻辑地址转换成相应的物理地址.3.内存空间的扩充,利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存.4.存储保护,保证各道作业在各自的存储空间内运行,互不干扰. 逻辑地址转换为物理地址的过程叫做地址重定位. 内存分配管理方式 内存分配管理方式:连续分配管理方式(包括:单一连续分配,固定分区分配,动态分区分配)与非连续分配管理方式(包括:基本分页存储

操作系统-存储器管理

存储器管理 存储器的层次结构 程序的装入和链接 用户程序要在系统中运行的话,就必须装入内存,然偶后将其转变为一个可执行的程序. 编译 由编译程序对用户源程序进行编译,形成若干个目标文件 链接 由链接程序将编译后形成的一组目标模块以及它们所需要的库函数接在一起,形成一个完整的装入模块 装入 由装入程序将装入模块装入内存 程序的链接 静态链接方式 在程序运行前,就先将各个目标模块以及它们所需要的库函数链接成一个完成的装配模块,之后都不会拆开,这样需要解决两个问题:修改相对地址,变换外部调用符号 装入

操作系统-存储器管理部分

存储器历来都是计算机系统中重要的组成部分.仍然是一种宝贵而又稀缺的资源. 如何对它加以有效的管理,不仅直接影响到存储器的利用效率,而且会影响系统的性能. 存储器的管理的主要对象是内存.在计算机执行时,几乎每一条指令都会涉及到对存储器的访问. 存储器的三个理想条件(这三个条件从现在技术来讲是不可能同时达到的) 1.对存储器的访问速度要跟得上处理机的运行速度. 2.要求存储器要有很大的容量. 3.而且存储器的造价应该很低. 在现代计算机系统当中无一例外的采用了多层结构的存储器系统. 存储器的多层结构

Git 学习笔记<分支管理> (三)

分支是什么? 分支就像树分出的树枝,不同的是,它们之间可以互相合并. 将版本的推进想象成一个链表的伸长:  version 1.0 ==> version 2.0 ==>version3.0  . master是主要的分支基本上用于发布产品.你可以从master分出一个dev,在上面创建新功能,或者修bug然后调试.最后再合并到master里面.就像下面这样. master分支:  version 1.0=========>version 2.0===... \            

存储器管理

实验目的:   本实验的目的是,使学生熟悉存储器管理系统的设计方法,加深对所学各种存储器管理方案的了解. 实验要求: 要求能独立地编写一个常用的存储分配算法,并能设计一个存储管理的模拟系统并调试运行. 对存储算法进行分析比较,评测其性能优劣,加深理解.   实验内容: 采用固定分区.最佳适应BF算法或首次适应算法,编写存储器管理模拟系统. 可用任何一种高级语言编写. 基本要求: (1)掌握动态内存分配过程alloc()和回收过程free():(2)在给定初始状态下,采用一种算法进行内存块的分配和

linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)

linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟) 认识软件包管理 软件包管理是指系统中一种安装和维护软件的方法.今天,通过从 Linux 发行版中安装的软件包, 已能满足许多人所有需要的软件.这不同于早期的 Linux,人们需要下载和编辑源码来安装软件. 编辑源码没有任何问题,事实上,拥有对源码的访问权限是 Linux 的伟大奇迹.本篇,我们将查看一些用于包管理的命令行工具(rpm ,yum , dnf ).虽然所有主流 Linux 发行版都 提供了强大且精致的图

第三章:存储器管理

内存管理: 存储管理的功能: ·内存空间的分配与回收,包括内存的分配和共享 ·地址转换 ·内存空间的扩充 ·存储保护   程序的装入: ·静态重定位 ·动态重定位   程序的链接: ·静态链接 ·装入时动态链接 ·运行时动态链接   逻辑地址空间:   物理地址空间:   内存保护: ·存储键保护 ·上下限保护   静态式连续分配管理方式: ·固定式分区存储管理:内存均等划分 ·可变式分区存储管理:按一定比例划分内存 动态式分配管理: 用多少分多少,时间长了会产生很多碎片   分配算法: ·首次

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

重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27693365 复杂的内存管理 移动设备上的硬件资源十分有限,内存尤为宝贵.开发人员必须十分谨慎地利用内存,避免不必要的消耗.更要防止内存泄漏. 基于 Cocos2d-iPhone 的 Objective-C风格的内存管理是 Cocos2d-x 的一个特色. 把 Objective-C 的内存管理方式引入 C++,使得游戏开发的内存管理难度下降了个层次