当前位置: 首页 > news >正文

<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 请求式分页存储管理

  1. 数据结构 数据结构——页表(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 - 双链表 // 带头节点的双向循环链表 - 最优链表结构&#xff0c;任意位置…...

STM32CubeMx+MATLAB Simulink点灯程序

STM32CubeMxMATLAB点灯程序 ✨要想实现在MATLAB Simulink环境下使用STM32&#xff0c;前提是已经搭建好MATLAB环境并且安装了必要的Simulink插件&#xff0c;以及对应的STM32支持包。 &#x1f33f;需要准备一块所安装支持包支持的STM32开发板. &#x1f516;具体支持包详情页…...

【深度学习】gan网络原理生成对抗网络

【深度学习】gan网络原理生成对抗网络 GAN的基本思想源自博弈论你的二人零和博弈&#xff0c;由一个生成器和一个判别器构成&#xff0c;通过对抗学习的方式训练&#xff0c;目的是估测数据样本的潜在分布并生成新的数据样本。 1.下载数据并对数据进行规范 transform tran…...

springboot参数汇总

multipart multipart.enabled 开启上传支持&#xff08;默认&#xff1a;true&#xff09; multipart.file-size-threshold: 大于该值的文件会被写到磁盘上 multipart.location 上传文件存放位置 multipart.max-file-size最大文件大小 multipart.max-request-size 最大请求…...

【算法刷题】Day9

文章目录 611. 有效三角形的个数题干&#xff1a;题解&#xff1a;代码&#xff1a; LCR 179. 查找总价格为目标值的两个商品题干&#xff1a;题解&#xff1a;代码&#xff1a; 1137. 第 N 个泰波那契数题干&#xff1a;原理&#xff1a;1、状态表示&#xff08;dp表里面的值所…...

LangChain的函数,工具和代理(三):LangChain中轻松实现OpenAI函数调用

在我之前写的两篇博客中:OpenAI的函数调用,LangChain的表达式语言(LCEL)中介绍了如何利用openai的api来实现函数调用功能&#xff0c;以及在langchain中如何实现openai的函数调用功能&#xff0c;在这两篇博客中&#xff0c;我们都需要手动去创建一个结构比较复杂的函数描述变量…...

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&#xff0c;采用802.11无线技术进行互连的一组计算机和相关设备。…...

如何优雅的进行业务分层

1.什么是应用分层 说起应用分层&#xff0c;大部分人都会认为这个不是很简单嘛 就controller&#xff0c;service, mapper三层。 看起来简单&#xff0c;很多人其实并没有把他们职责划分开&#xff0c;在很多代码中&#xff0c;controller做的逻辑比service还多,service往往当…...

C++的std命名空间

总以为自己懂了&#xff0c;可是仔细想想&#xff0c;多问自己几个问题&#xff0c;发现好像又不是很清楚 命名空间&#xff08;Namespace&#xff09;是C中一种用于解决命名冲突问题的机制&#xff0c;它能够将全局作用域划分为若干个不同的区域&#xff0c;每个区域内可以有…...

unity学习笔记

一、射线检测 如何让鼠标点击某个位置&#xff0c;游戏角色就能移动到该位置&#xff1f; 实现的原理分析&#xff1a;我们能看见游戏的东西就是摄像机拍摄到的东西&#xff0c;所以摄像机的镜平面就是当前能看到的了。 那接下来我们可以让摄像机发射一条射线&#xff0c;鼠标…...

使用SpringBoot和ZXing实现二维码生成与解析

一、ZXing简介 ZXing是一个开源的&#xff0c;用Java实现的多种格式的1D/2D条码图像处理库。它包含了用于解析多种格式的1D/2D条形码的工具类&#xff0c;目标是能够对QR编码&#xff0c;Data Matrix, UPC的1D条形码进行解码。在二维码编制上&#xff0c;ZXing巧妙地利用构成计…...

C++模板—函数模板、类模板

目录 一、函数模板 1、概念 2、格式 3、实例化 4、模板参数的匹配 二、类模板 1、定义格式 2、实例化 交换两个变量的值&#xff0c;针对不同类型&#xff0c;我们可以使用函数重载实现。 void Swap(double& left, double& right) {double tmp left;left ri…...

Monkey

一、Monkey的概念 “猴子测试”是指没有测试经验的人甚至对计算机根本不了解的人&#xff08;就像猴子一样&#xff09;不需要知道程序的任何用户交互方面的知识&#xff0c;如果给他一个程序&#xff0c;他就会针对他看到的界面进行操作&#xff0c;其操作是无目的的、乱点乱按…...

SQL中left join、right join、inner join等的区别

一张图可以简洁明了的理解出left join、right join、join、inner join的区别&#xff1a; 1、left join 就是“左连接”&#xff0c;表1左连接表2&#xff0c;以左为主&#xff0c;表示以表1为主&#xff0c;关联上表2的数据&#xff0c;查出来的结果显示左边的所有数据&#…...

算法学习—排序

排序算法 一、选择排序 1.算法简介 选择排序是一个简单直观的排序方法&#xff0c;它的工作原理很简单&#xff0c;首先从未排序序列中找到最大的元素&#xff0c;放到已排序序列的末尾&#xff0c;重复上述步骤&#xff0c;直到所有元素排序完毕。 2.算法描述 1&#xff…...

在Pycharm中创建项目新环境,安装Pytorch

在python项目中&#xff0c;很多项目使用的各类包的版本是不一致的。所以我们可以对每个项目有专属于它的环境。所以这个文章就是教你如何创建新环境。 一、创建新环境 首先我们需要去官网下载conda。然后在Pycharm下面添加conda的可执行文件。 用conda创建新环境。 二、…...

linux里source、sh、bash、./有什么区别

1、source source a.sh 在当前shell内去读取、执行a.sh&#xff0c;而a.sh不需要有"执行权限" source命令可以简写为"." . a.sh 注意&#xff1a;中间是有空格的。 2、sh/bash sh a.sh bash a.sh 都是打开一个subshell去读取、执行a.sh&#xff0c;而a.…...