操作系统-5

简介: -

存储器----内存管理

存储器的多层结构

虚拟存储器的定义和特征?

虚拟存储器的定义:指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

虚拟存储器有以下三个主要特征:

1) 多次性,是指无需在作业运行时一次性地全部装入内存,而是运行被分成多次调入内存运行。

2) 对换性,是指无需在作业运行时一直常驻内插,而是运行在作业的运行过程中,进行换进和换出。

3) 虚拟性,是指从逻辑上扩充内存的容量,使用户所看到的内插容量,远大于实际的内存容量。

存储器管理有哪几种方式,具体如何实现。

存储管理分为两大类:实存管理和虚存管理。

实存管理中分出:连续分配和离散分配


连续分配方式:程序代码中代码或者数据的逻辑地址相邻,体现在内存分配时物理地址的相邻


  • 单一连续分配(只有一道程序);
  • 固定分区分配(最早的,最简单的可以运行多道程序的分区管理存储方式;
  • 动态分区分配(根据内存的实际需要,动态地为之分配空间,顺序搜索的动态分区算法和基于索引搜索的动态分区算法)
  • 连续分配的特点会引起内存空间的碎片,所以采用紧凑技术,动态重定来解决紧凑产生的问题(动态重定位利用重定位寄存器实现)


离散分配方式:

  • 分页存储管理方式:将用户地址空间分为若干个固定大小的区域,将内存空间分为若干物理块,页和块的大小相同。
  • 分段存储管理方式:为了满足用户要求而形成的一种存储管理方式。他把用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息。
  • 段页式:结合了分页和分段的有点,目前比较广泛的一种存储管理方式


连续性内存分配

基于顺序搜索的动态分区分配算法

  1. 首次适应算法
  1. 空闲分区按地址递增
  1. 导致高地址的利用率低
  1. 最佳适应算法
  1. 空闲分区按容量递增--算法开销大,回收后可能需要重新排序
  1. 解决了大部分分区被空闲的问题,但是产生了很多无法利用的小分片碎片
  1. 最坏适应算法
  1. 空闲分区按容量递减--算法开销大,回收后可能需要重新排序
  1. 解决了小碎片的问题,但是导致大分区先被分配,不利于后面大进程的分配
  1. 邻近适应算法空闲分区
  1. 按地址递增
  1. 是首次适应算法的升级,每次从上次查找结束的位置开始查找,解决了高地址利用率低的问题

基于索引搜索的动态分区分配算法

快速适应算法

伙伴系统

哈希算法

回收内存--动态分区分配

在动态分区分配方案中,某一作业完成后,系统收回其主存空间,并与相邻空闲区合并,为此需要修改空闲区表,造成空闲区数减1的情况是()

上临下临空闲区

  1. 有上有下
  1. 空闲分区-1
  2. 修改长度=上临空闲区+收回空闲区+下临空闲区,将下临的标志位改为空
  1. 有上无下
  1. 空闲分区不变
  2. 只修改,长度=上临空闲区+收回空闲区
  1. 无上有下
  1. 空闲分区不变
  2. 修改下临空闲区记录地址为收回空闲区地址,长度=收回空闲区+下临空闲区
  1. 无上无下
  1. 空闲分区+1
  2. 找一个标志位为空的记录,记下地址和长度,改标志位为未分配,表明该登记栏中指示了一个空闲区

动态重定向

什么叫地址重定位?动态地址重定位的特点是什么?

答:重定位是指作业装入与其逻辑地址空间不同的物理空间所引起的地址变换过程。

静态重定向

  • 在程序执行前,进行重定向
  • 不可改变
  • 内存地址必须连续

动态重定向

  • 程序执行过程中重定向
  • 但是可以改变
  • 需要硬件一定位数的寄存器
  • 有利于解决碎片问题
  • 内存地址可以不连续

动态地址重定位的特点是:(1)由硬件实现;(2)在程序运行过程中进行地址变换

非连续性内存分配

逻辑地址转物理地址

BDQH

2,10,8,16

当逻辑地址为十六进制0X,八进制0,二进制B,十进制D

  1. 转换为二进制
  2. 根据单表大小确认页号和页内偏移量(逻辑地址与物理地址的页偏移量相同)
  3. 查询页表中,页号对应的帧号,都转化为二进制格式,帧号+页偏移量=物理地址

当逻辑地址为十进制D

  1. 逻辑地址的页号=逻辑地址/页面大小,页内偏移量=逻辑地址%页面大小
  2. 根据单表大小确认页号和页内偏移量(逻辑地址与物理地址的页偏移量相同)
  3. 查询页表中,页号对应的帧号,帧号*页面大小+页偏移量=物理地址

段表

一个进程一个段表,每个段号有一个页表

逻辑地址(段号,页偏移量)

步骤

  • 先根据段号找到页表,
  • 然后比较页偏移量和长度,如果大于长度,发生段越界,产生越界中断。
  • 如果小于长度,则物理地址=基质+页偏移量

页表-分页

分页/虚拟内存能有助“大大地”降低整体及额外非必要的 I/O 次数,提高系统整体运作性能。

分页就是把整个虚拟和物理内存切成一段段固定大小的空间,连续且尺寸固定的内存空间叫页,Linux下每一页大小4KB。

虚拟内存和物理内存之间通过页表来映射;虚拟地址分为:页号和页内偏移。

在分页管理中,"页"和"块"是一样大小的,这样才知道物理存储器是32KB。

参数:

单页大小,页表,逻辑地址

问题:

  1. 逻辑地址转物理地址
  2. 如果页号不在页表内,发送缺页中断,请求系统调页

段页

什么是快表,在地址变换中有何作用?

结构=页号+页框号+有效位

页表实现了,从页号到物理块号的映射,PCB中存放着页表长度和首地址

地址变换机构:为了能将用户地址空间中的逻辑地址转换为内存空间中的物理地址

快表:快表示在地址变换机构中增设的一个具有并行查询能力的特殊高速缓冲寄存器。

作用:可以提高地址变换的速度(不用访问内存,提高速度)

分页存储和分段存储有什么区别

1.分页式系统管理的需要,对用户不可见,段是逻辑单位,包含一完整意义的信息,可以满足用户需要

2.页的大小固定,由硬件决定,段的大小不固定,由编程决定

3.分页的用户地址空间是一维,是系统行为,分段的用户地址空间是二维,程序员在标志一个地址时,既需要给出段名,又要给段内地址

4.分段更容易共享

页面置换算法

  1. 最佳置换算法OPT
  2. 先进先出置换算法FIFO
  3. LRU置换算法

页面置换次数:就是置换物理块页面的次数

缺页次数:插入新页面次数+页面置换

置换:

首先会有物理块个数,是最大能存页面的个数,当无法再次存放页面的时候,需要置换出一个页面,根据不同算法置换不同的页面,来实现不断更新物理块,缺页率

最佳置换算法OPT

查看物理块内每个页面最近的调用步骤,选择最远那个置换

思路

该置换算法就是不断更新物理块内存放的页面,

先进先出置换算法FIFO

最久未使用

比较谁先存放的,先置换掉该页面

队列的实现,物理块就是队列的大小

LRU置换算法

最近最久未使用

Clock置换算法

优缺点分析

OPT是向后看,根据后面的实际使用情况来置换,

LRU是向前看,是根据以前的使用情况来置换,相比较,LUR有预测的可能,ORT更准确,但是OPT很难实现

FIFO是置换最先进入内容的,没有参考意义,无法确定该页面使用情况

缺页率

影响因素

  • 该进程分配的物理块
  • 页面大小,越大缺页率越低

频繁缺页影响--抖动

由于分配的物理块达不到该进程所需最小的物理块个数,导致频繁的页面置换,频繁的缺页中断,导致系统的实际效率很低,这种现象成为抖动

抖动现象发生在FIFO页面置换算法中,FIFO并不是一个好的置换算法。

目录
相关文章
win11固定在任务栏的应用该文件没有与之关联的应用来执行该操作
win11固定在任务栏的应用该文件没有与之关联的应用来执行该操作
1987 0
|
5月前
|
人工智能 JavaScript API
【HarmonyOS NEXT+AI】问答03:找不到DevEco Studio Cangjie Plugin下载链接?
本文针对学员在“HarmonyOS NEXT+AI大模型打造智能助手APP(仓颉版)”课程中提出的问题进行解答:为何无法在华为开发者社区官网找到DevEco Studio Cangjie Plugin下载链接。文中详细介绍了Cangjie Plugin的功能及获取方式,包括STS和Canary版本的申请流程,并提供了学习仓颉编程语言的资源与建议。对于普通开发者,STS版本是当前首选;同时,通过课程与官方教程,可快速掌握仓颉语言核心语法及API,助力开发HarmonyOS NEXT AI智能助手应用。
315 3
【HarmonyOS NEXT+AI】问答03:找不到DevEco Studio Cangjie Plugin下载链接?
|
7月前
|
虚拟化 Windows
Windows 11 24H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 2 月更新)
Windows 11 24H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 2 月更新)
199 4
Windows 11 24H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 2 月更新)
|
存储 关系型数据库 Java
红黑树,B+树,B树的原理
红黑树(Red-Black Tree)、B树(B-Tree)和 B+树(B+ Tree)都是自平衡的树结构,用于高效地进行查找、插入和删除操作。它们在数据库和文件系统等应用中有广泛的应用。
449 2
|
数据可视化 前端开发 数据挖掘
【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
本文介绍了一个基于Python Flask框架的广州历史天气数据应用与可视化大屏系统,该系统通过数据采集、处理、分析和可视化技术,提供了丰富的气象数据展示和决策支持,帮助用户快速了解和应对气象变化。
433 110
【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
|
10月前
|
UED 开发者
ArkTS路由跳转与参数传递:深入理解与实践
在HarmonyOS应用开发中,ArkTS作为主要开发语言,其路由跳转和参数传递机制是实现页面间通信的关键。本文深入探讨了ArkTS中的路由跳转基础,包括页面跳转的方式(如pushUrl和replaceUrl)、参数传递的方法,以及如何在实际开发中应用这些知识,帮助开发者提升应用的用户体验和性能。
786 1
|
10月前
|
缓存 前端开发 JavaScript
webpack 原理
【10月更文挑战第23天】Webpack 原理是一个复杂但又非常重要的体系。它通过模块解析、依赖管理、加载器和插件的协作,实现了对各种模块的高效打包和处理,为现代前端项目的开发和部署提供了强大的支持。同时,通过代码分割、按需加载、热模块替换等功能,提升了应用程序的性能和用户体验。随着前端技术的不断发展,Webpack 也在不断演进和完善,以适应不断变化的需求和挑战。
|
11月前
|
API 开发者
如何快速上手?揭秘通过DevEco Studio创建ArkTS项目的全过程
【10月更文挑战第18天】本文详细介绍了如何通过DevEco Studio创建并配置一个ArkTS项目,包括安装DevEco Studio、创建新项目、编写简单的ArkTS代码、配置项目元数据以及运行项目等步骤,帮助鸿蒙系统开发者快速上手。
774 8
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
819 0
|
数据采集 人工智能 数据挖掘
【AI大模型应用开发】【附】常用Prompt记录 - 论文全文写作
【AI大模型应用开发】【附】常用Prompt记录 - 论文全文写作
1025 0
【AI大模型应用开发】【附】常用Prompt记录 - 论文全文写作