虚拟存储 分段分页段页解读(上)

简介: 虚拟存储 分段分页段页解读

虚拟存储概念

背景

如果一个作业,需要全部装入内存后方能运行,会有什么情况?

(1) 有的作业很大,其所要求的内存空间超过了内存总容量,作业不能全部被装入内存,致使该作业无法运行;

(2) 有大量作业要求运行,但由于内存容量不足以容纳所有这些作业,只能将少数作业装入内存让它们先运行,而将其它大量的作业留在外存上等待

特点:

(1) 一次性

(2) 驻留性

局部性原理

程序运行时存在的局部性现象,很早就已被人发现,但直到1968年,P.Denning才真正指出:程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域。

(1) 时间局限性。

(2) 空间局限性。

应用程序在运行之前没有必要将之全部装入内存,而仅须将那些当前要运行的少数部分数据先装入内存便可运行,其余部分暂留在盘上。

虚拟存储器定义

当用户看到自己的程序能在系统中正常运行时,他会认为,该系统所具有的内存容量一定比自己的程序大,或者说,用户所感觉到的内存容量会比实际内存容量大得多。但用户所看到的大容量只是一种错觉,是虚的,故人们把这样的存储器称为虚拟存储器。

虚拟存储器的三个重要特征:

(1) 多次性。

(2) 对换性。

(3) 虚拟性。

虚拟存储器的实现?

具体怎么实现呢?是将整个程序一起载入内存中吗?

不是!采用离散存储方式

离散存储方式

(1) 分页存储管理方式。

(2) 分段存储管理方式。

(3) 段页式存储管理方式。

分页存储管理

分页存储的背景

引入分页: 解决内存分区导致的内存效率问题。

为了让面包没有谁都不想要的碎末:将面包切成片,将内存分成页!针对每个内存请求,系统一页一页的分配。

内存分页中,每页的大小通常是固定的,常见的页大小有 4KB、8KB、16KB、32KB 等。选择页大小时需要考虑以下因素:

1. 内存利用率:较小的页大小可以更好地利用内存空间。但是,页越小,页表的项数就越多,页表占用的内存空间就越大。

2. 外部碎片:过小的页大小容易导致外部碎片,即内存中的一些空闲区域无法被利用。

3. 内部碎片:过大的页大小容易导致内部碎片,即实际使用的空间比页的大小小,导致浪费。

通常来说,4KB 是最常用的页大小,因为它可以更好地平衡内存利用率和页表大小。而对于需要处理大量大型数据的应用程序,较大的页大小可以提高数据访问速度,但是可能会降低内存利用率。

分页存储管理的基本方法

页面和物理块

(1) 页面。

(2) 页面大小。

地址结构

分页地址中的地址结构如下:

对某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:

页表

在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。

分页存储的地址变换

基本的地址变换机构

进程在运行期间,需要对程序和数据的地址进行变换,即将用户地址空间中的逻辑地址变换为内存空间中的物理地址,由于它执行的频率非常高,每条指令的地址都需要进行变换,因此需要采用硬件来实现(MMU)。页表功能是由一组专门的寄存器来实现的。一个页表项用一个寄存器

页表指针存在PCB中

具有快表的地址变换机构

由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近1/2。可见,以此高昂代价来换取存储器空间利用率的提高,是得不偿失的。


相关文章
|
程序员 编译器 C语言
【c语言】c语言转义字符详解
【c语言】c语言转义字符详解
1329 1
|
算法 安全 编译器
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
575 0
【408计算机组成原理】—原码的乘法运算(九)
【408计算机组成原理】—原码的乘法运算(九)
|
JavaScript Android开发 Swift
uni-app-x
uni-app-x
363 0
|
负载均衡 应用服务中间件 nginx
搭建域名访问环境二(负载均衡到网关)
这篇文章讲述了如何配置Nginx实现域名访问环境,通过负载均衡将请求从Nginx反向代理到服务网关,并提供了详细的配置步骤和测试验证方法。
搭建域名访问环境二(负载均衡到网关)
|
机器学习/深度学习 算法 前端开发
【机器学习】Bagging和随机森林
【机器学习】Bagging和随机森林
|
监控 安全 项目管理
『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式
该文章详细解释了三种原型实现模型——抛弃式、演化式、增量式模型的特点、流程、优缺点及适用场景。
『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式
|
安全 Linux Windows
深入理解操作系统内存管理:分页与分段的融合
【4月更文挑战第30天】 在现代操作系统中,内存管理是确保多任务环境稳定运行的关键。本文将深入探讨分页和分段两种内存管理技术,并分析它们如何相互融合以提供更为高效、安全的内存使用策略。通过对比这两种技术的优缺点,我们将探索现代操作系统中它们的综合应用,以及这种融合对操作系统设计和性能的影响。
|
Cloud Native Java 关系型数据库
阿里云 PolarDB-X 团队25届实习生招聘
阿里云 PolarDB-X 团队25届实习生招聘
|
存储 算法 程序员
虚拟存储 分段分页段页解读(下)
虚拟存储 分段分页段页解读(下)