<Linux>(极简关键、省时省力)《Linux操作系统原理分析之存储管理(2)》(15)
@[TOC](《Linux操作系统原理分析之存储管理(2)》(15)
- 5 存储管理
- 5.4 分页存储管理
- 5.4.1 纯分页存储管理
- a.页(页面)和物理块(帧)
- b. 页面大小
- c. 逻辑地址结构
- 5.5 存储扩充技术
- 5.5.2 交换技术
- 5.5.3 虚拟存储技术
- 虚拟存储器的基本概念
- 5.5.4 请求式分页存储管理
5 存储管理
5.4 分页存储管理
5.4.1 纯分页存储管理

a.页(页面)和物理块(帧)
分页存储管理,把进程的地址空间划分为大小相等的片段,成为页或页面。相应地,内存空间也分成与页面相同大小的若干块,成为物理快或帧。
b. 页面大小
页面大小通常在 512k~4k,大小必须适中。Why?(四个因素刘乃琦 P84)
因为:若页面太小,一方面课时内存碎片小,减少了内存碎片的总空间,有利于提高内存的利用率;但另一方面,也会使每个进程要求较多的页面,从而引起页表过长,占用大量内存;此外,还会降低页面换进换出的效率。若选择较大的页面虽然可减少页表的长度,提高页面换进换出的效率,但却又会使页面
碎片增大。因此,页面大小应选择适中。
页面碎片: 分页方式中也会出现内存碎片,它们都分布在每个作业的最后一个页面内部,故称为页面碎片。
c. 逻辑地址结构
页面大小为 210=1K
举例:逻辑地址 5000
最多可以有 26=64 页 可转换为 4*1024+904
5.5 存储扩充技术
覆盖是指一个作业的若干程序段,或几个作业的某些部分共享某一个存储空间。
覆盖技术的实现是把程序化分为若干个功能上相对独立的程序段,按照其自身的逻辑结构使那些不会同时执行的程序段共享同一快内存区域。程序段先保存在磁盘上,当有关程序段的前一部分执行结束后把后续程序调入内存,覆盖前面的程序段。
覆盖不需要任何来自操作系统的特殊支持,可以完全由用户实现,即覆盖技术是用户程序自己附加的控制。覆盖技术要求程序员提供一个清楚的覆盖结构,即程序员要把一个程序化分成不同的程序段,并规定好他们的执行和覆盖的顺序。操作系统则根据程序员提供的覆盖结构,完成程序段之间的覆盖。
覆盖可以有编译程序提供支持:被覆盖的块是由程序员或编译程序预先(在执行前)确定的。总之,覆盖可以从用户级彻底解决内存小装不下程序的问题。

覆盖技术要求用户清楚地了解程序的结构,并制定各程序段调入内存的先后次序,以及内存中可以覆盖掉的程序段的位置等。对用户是不透明的。因此通常用于系统程序的内存管理上,因为系统软件设计者容易了解系统程序的覆盖结构。
例如:把磁盘操作系统分为两部分,一部分是操作系统中经常用到的基本部分,它们常驻内存且占用固定区域,另一部分是不太经常使用的部分,他们存放在磁盘上,当调用它们时才被调入内存覆盖区。
5.5.2 交换技术
对换——指把内存中占时不能运行的进程或暂时不用的程序和数据换出到外存上,以腾出足够的内存空间,把已具备运行条件的进程或进程所需要的程序和数据,换入内存。
如果对换是以整个进程为单位,称之为“整体对换”或“进程对换”。这种对换被广泛地应用于分时系统;如果对换是以“页”或“段”为单位,则分别称之为“页面对换”或“分段对换”,又称为“部分对换”。这种对换方法是实现请求分页及请求分段式虚拟存储器的基础。
与覆盖技术相比,交换技术的特点是交换过程对用户是透明的,但需要更多的硬件支持。
5.5.3 虚拟存储技术
解决内存不足:
a.加内存条。
b.覆盖技术、整体对换
c.虚拟技术
虚拟存储器的基本概念
1) 常规内存管理方式的特征
a. 一次性
b. 驻留性
一次性和驻留性是许多不用或暂时不用的程序(数据)占据了大量的内存空间,将使一些需要运行的作业无法装入运行。现在的问题是:一次性、驻留性是否是存储器管理所必需的。
2) 局部性原理
局限性(时间局限性、空间局限性)局部性原理(principle of locality):在一个作业运行的某一段时间,它所访问的地址空间往往只集中在某几页 它所访问的地址空间往往只集中在某几页,而不是整个程序的所有部分都具有平均的 而不是整个程序的所有部分都具有平均的访问概率,这种现象称为局部性原理 这种现象称为局部性原理。
3) 虚拟存储器的引入
当一个作业的地址空间很大时,不能别全部装入内存,但基于局部性原理,允许只将当前要运行的那部分程序和数据先装入内存便启动运行,其余部分仍驻留在外存上,在需要时,在通过调入功能和置换功能将其调入内存。
Def:虚拟存储器是只具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
在多道系统中使用虚拟存储技术,不管物理内存空间多大,系统都可以为每个用户的作业提供很大的独立的虚拟空间。例如 linux 操作系统中可以为每个用户作业提供高达 4G 的虚拟空间。
虚拟存储空间中的地址称为虚拟地址。虚拟地址空间大小由虚拟地址的长度决定。由于虚拟空间比物理内存的容量大的多,所以系统提供的虚拟地址的长度大于主存的绝对地址的长度,例如在80x86 中绝对地址是 32 位的,而虚拟地址是 46 的。
4) 虚拟存储器的特征
a. 多次性
b. 对换性
c. 离散性:多次性和对换性必须建立在离散分配的基础上,故虚拟存储管理必须建立在离散分配系统基础上。
5.5.4 请求式分页存储管理
- 数据结构 数据结构——页表(PMT)
在请求分页系统中的页表,时在分页系统的页表的基础上增加如下几项:
页号:
物理块号
状态位
访问字段
修改位
外存地址
状态位:用于指出该页是否已调入内存
访问字段:用于记录本页在一段时间内别访问的次数,提供给置换机构参考
修改位:表示该页在调入内存后是否被修改过,由于内存中的每一页都在外存上保留一份副本,因此,若未被修改,在置换该页时就不需要将该页写回到外存上;否则,必须将该页重写到外存上,以保证外存中所保留的始终是最新的副本。
外存始址:指出该页在外存上的地址,供调入该页时使用。
2.页面淘汰算法
👉优化 or 最佳淘汰算法(OPT):淘汰将永不再使用的页面,或最长时间内不再访问的页面。(无法实现,仅作为标准)
👉最近最就不用算法(LRU:Least Recently Used Replacement):当需要置换一页面时,选择在最近一段时间内最久不用地页面予以淘汰。
👉近似 LRU 算法——NRU(not Recently Used)
👉FIFO 算法:淘汰最先进入内存的页面,即在内存中驻留时间最长的页面。
缺点:
a. 内存利用率不高——由于该算法基于 Cpu 按线性顺序访问的地址空间的,而许多时候,cpu 不是按线性顺序访问地址空间,如执行循环时,那些在内存中停留时间长最长的页往往是经常被访问的页。
b. 会出现异常现象——Belady 现象:一般来说,内存帧越多,一个作业发生缺页的次数就越少。(如果给一个进程分配了它所需要的全部页面,则不会发生缺页现象)但 Belady 举出了反例,例如使用 FIFO 算法时,在未给进程或作业分配足它所需要的页面时,有时会发生分配的页面数越多,缺页次数反而增加的奇怪现象。这种现象称为 Belady 现象。

相关文章:
<Linux>(极简关键、省时省力)《Linux操作系统原理分析之存储管理(2)》(15)
[TOC](《Linux操作系统原理分析之存储管理(2)》(15) 5 存储管理5.4 分页存储管理5.4.1 纯分页存储管理a.页(页面)和物理块(帧)b. 页面大小c. 逻辑地址结构 5.5 存储扩充技术5.5.2 交…...
jdk8、jdk9中,接口的新特性
接口的老特性: 没有构造方法成员变量只能定义常量,默认三个关键字public static final只能是抽象方法,默认两个关键字public abstract 接口的新特性: jdk8 1.接口允许定义非抽象方法,需加入default关键字。为了解决…...
第一题-字符串拼接【第六届传智杯程序设计挑战赛解题分析详解复盘】(C/C++实现)
🚀 欢迎来到 ACM 算法题库专栏 🚀 在ACM算法题库专栏,热情推崇算法之美,精心整理了各类比赛题目的详细解法,包括但不限于ICPC、CCPC、蓝桥杯、LeetCode周赛、传智杯等等。无论您是刚刚踏入算法领域,还是经验丰富的竞赛选手,这里都是提升技能和知识的理想之地。 ✨ 经典…...
简谈oracle数据库的归档模式
一、oracle数据库归档模式简介 Oracle数据库归档模式是一种数据备份和恢复策略,它允许数据库记录所有数据库的更改操作(包括已提交和未提交的事务)并将其存储在归档日志中。这些归档日志可以用于在数据库发生故障时进行恢复,并提供点时间恢复(PITR)的能力。 在Oracle数…...
FLASK博客系列9——你想成为我的新用户吗?
距离上次发文好久好久了。 先说声抱歉,拖更的毛病我会改掉的。 上次我们教大家如何用后台去管理用户和新增文章,但始终都是单机操作,怎么让你的朋友也来加入你的小站呢?今天我们来为我们的网站增添一个新功能,实现用户…...
用通俗的方法讲解:大模型微调训练详细说明(附理论+实践代码)
本文内容如下 介绍了大模型训练的微调方法,包括prompt tuning、prefix tuning、LoRA、p-tuning和AdaLoRA等。 介绍了使用deepspeed和LoRA进行大模型训练的相关代码。 给出了petals的介绍,它可以将模型划分为多个块,每个用户的机器负责其中一…...
现代化工安全保障迎来巡查无人机新时代
当今现代化工企业呈现出规模不断扩大,设备逐渐趋向大型化的局面,由此导致化工安全生产面临日益严峻的挑战。然而,随着巡查无人机技术的成熟,这种新的高效手段正在提高化工安全检测的工作效率。 一、传统化工安全巡检存在弊端 化工…...
关于web前端通过js获取后端mysql数据库数据的一个方法
关于web前端通过js获取后端mysql数据库数据的一个方法 问题引入 关于html的教程很多,关于mysql的教程也很多,那么怎么让html展示mysql的数据呢? 一言以蔽之 前端通过js向后端发起一个http请求,后端响应这个请求并返回数据 实…...
如何下载IEEE出版社的Journal/Conference/Magazine的LaTeX/Word模板
当你准备撰写一篇学术论文或会议论文时,使用IEEE(电气和电子工程师协会)的LaTeX或Word模板是一种非常有效的方式,它可以帮助你确保你的文稿符合IEEE出版的要求。无论你是一名研究生生或一名资深学者,本教程将向你介绍如…...
京东数据运营-京东数据开放平台-鲸参谋10月粮油调味市场品牌店铺销售数据分析
鲸参谋监测的京东平台10月份料油调味市场销售数据已出炉! 根据鲸参谋数据显示,今年10月份,京东平台粮油调味市场的销量将近4600万,环比增长约10%,同比降低约20%;销售额将近19亿,环比增长约4%&am…...
ThermalLabel SDK for .NET 13.0.23.1113 Crack
ThermalLabel SDK for .NET 是一个 .NET 典型类库,它允许用户和开发人员创建非常创新的条码标签并将其发布在 zebra ZPL、EPL、EPSON ESC、POS 以及 Honeywell intermec 指纹中通过在 VB.NET 或 C# 上编写 .NET 纯代码来实现热敏打印机,以实现项目框架的…...
[Java学习日记]网络编程
目录 一.常见的软件架构、网络编程三要素、IP 二.利用UDP发送与接收数据 三.改聊天室 四.组播案例 五.TCP通信案例 一.常见的软件架构、网络编程三要素、IP 网络编程:在网络通信协议下,不同的计算机上运行的程序进行的数据传输 在Java中可以使用java…...
spring boot mybatis TypeHandler 看源码如何初始化及调用
目录 概述使用TypeHandler使用方式在 select | update | insert 中加入 配置文件中指定 源码分析配置文件指定Mapper 执行query如何转换 结束 概述 阅读此文 可以达到 spring boot mybatis TypeHandler 源码如何初始化及如何调用的。 spring boot 版本为 2.7.17,my…...
数据结构基础(带头节点的双向循环链表)
完整代码 DLinkList.hDLinkList.ctest.c DLinkList.h #pragma once #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int ElemType;// SList - 单链表 // DList - 双链表 // 带头节点的双向循环链表 - 最优链表结构,任意位置…...
STM32CubeMx+MATLAB Simulink点灯程序
STM32CubeMxMATLAB点灯程序 ✨要想实现在MATLAB Simulink环境下使用STM32,前提是已经搭建好MATLAB环境并且安装了必要的Simulink插件,以及对应的STM32支持包。 🌿需要准备一块所安装支持包支持的STM32开发板. 🔖具体支持包详情页…...
【深度学习】gan网络原理生成对抗网络
【深度学习】gan网络原理生成对抗网络 GAN的基本思想源自博弈论你的二人零和博弈,由一个生成器和一个判别器构成,通过对抗学习的方式训练,目的是估测数据样本的潜在分布并生成新的数据样本。 1.下载数据并对数据进行规范 transform tran…...
springboot参数汇总
multipart multipart.enabled 开启上传支持(默认:true) multipart.file-size-threshold: 大于该值的文件会被写到磁盘上 multipart.location 上传文件存放位置 multipart.max-file-size最大文件大小 multipart.max-request-size 最大请求…...
【算法刷题】Day9
文章目录 611. 有效三角形的个数题干:题解:代码: LCR 179. 查找总价格为目标值的两个商品题干:题解:代码: 1137. 第 N 个泰波那契数题干:原理:1、状态表示(dp表里面的值所…...
LangChain的函数,工具和代理(三):LangChain中轻松实现OpenAI函数调用
在我之前写的两篇博客中:OpenAI的函数调用,LangChain的表达式语言(LCEL)中介绍了如何利用openai的api来实现函数调用功能,以及在langchain中如何实现openai的函数调用功能,在这两篇博客中,我们都需要手动去创建一个结构比较复杂的函数描述变量…...
WiFi概念介绍
WiFi概念介绍 1. 什么是WLAN2. 什么是Wi-Fi3. Wi-Fi联盟4. WLAN定义范围5. WiFi协议体系6. 协议架构7. WiFi技术的发展7.1 IEEE802.117.2 802.11标准和补充 8. 术语 1. 什么是WLAN Wireless Local Area Network,采用802.11无线技术进行互连的一组计算机和相关设备。…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
