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

操作系统的奋斗(三)内存管理

第三章 内存管理

  • 3.1内存管理概念
    • 3.1.1 内存管理的基本原理和要求
      • (1)内存管理的主要功能
    • 3.1.2 覆盖和交换
      • (1)覆盖
      • (2)交换
    • 3.1.3 连续分配管理方式
      • (1)单一连续分配
      • (2)固定分区分配
      • (3)动态分区分配
  • 3.2虚拟内存管理
    • 3.2.1 虚拟内存的基本概念
    • 3.2.2 请求分页管理方式
    • 3.2.3 页框分配
    • 3.2.4 页面置换算法
    • 3.2.5 抖动和工作集
    • 3.2.6 内存映射文件
    • 3.2.7 虚拟储存器性能影响因素
  • 3.3本章小结
    • 3.3.1 为什么要引入虚拟内存?
    • 3.3.2 虚拟内存空间的大小是由什么因素决定的?
    • 3.3.3为什么要引入虚拟内存?

本章围绕分页机制展开:通过分页管理方式在物理内存大小的基础上提高内存的利用率,在进一步引入请求分页管理方式,实现虚拟内存,是内存脱离物理大小的限制,提高处理器的利用率。

3.1内存管理概念

3.1.1 内存管理的基本原理和要求

内存管理的概念:操作系统对内存的划分和动态分配。

有效的内存管理在多道程序设计中非常重要,方便用户使用存储器、提高内存利用率,还可以通过虚拟技术从逻辑上扩充存储器。

(1)内存管理的主要功能

  1. 、内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理。
  2. 、地址转换:把逻辑地址转换成相应的物理地址。
  3. 、内存空间的扩充:利用虚拟内存技术或者自动覆盖技术,逻辑上扩充内存。
  4. 、内存共享:允许多个进程访问内存的同一部分。
  5. 、存储保护:保证各道作业在各自的存储空间内运行,互不干扰。

3.1.2 覆盖和交换

覆盖和交换的目的是:在多道程序环境下用来扩充内存。

(1)覆盖

基本思想:由于程序运行时并非任何时候都要访问程序及数据的各个部分,所以把用户空间分为一个固定区和若干覆盖区 ,将经常活跃的部分放在固定区,其余的部分按调用关系分段,首先将那些即将要访问的段放入覆盖区,其他段放入外存中,在需要调用前,系统再将其调入覆盖区替换其中原有的段。

(2)交换

交换(对换)的基本思想:把处于等待状态的(或在CPU调度原则下被剥夺运行权利)的程序从内存移到辅存,将内存空间腾出来的这一过程称为换出;把准备好竞争CPU运行的程序从辅存移到内存的过程称为换入

交换技术主要在不同进程(或作业)之间进行,而覆盖则用于同一个程序或进程中。

3.1.3 连续分配管理方式

连续分配方式是指为一个用户程序分配一个连续的内存空间,主要包括:单一连续分配、固定分区分配和动态分区分配。

(1)单一连续分配

内存分为系统区和用户区,系统区仅供操作系统使用,通常在低地址部分。

优点:简单、无外部碎片,无须内存保护
缺点:只能用于单用户、单人任务的操作系统中,有内部碎片,存储器的利 用率极低。

(2)固定分区分配

将用户内存空间划分为若干固定大小的区域,每个分区只装入一道作业。当有空闲分区时,便可在从外存的后备作业队列中选择适当大小 的资源装入该分区。

这种方式存在两个问题:

1、程序可能太大而放不进任何一个分区(可以使用覆盖技术解决)。

2、当程序小于固定分区大小时,也要占用一个完整的内存分区,这样内部就存在空间浪费(即 ------内部碎片)。

(3)动态分区分配

进程装入内存时,根据进程的实际需要,动态地为之分配内存;并使分区的大小正好适合进程的需要。系统中分区的大小和数目是可变的。

刚开始很好,随着时间的推移,内存中会产生越来越多的内存块(外部碎片),内存的利用率也随之下降。可通过紧凑技术来解决。

3.2虚拟内存管理

3.2.1 虚拟内存的基本概念

基于局部性原理,在程序装入时,仅须将程序当前要运行的少数页面或段先装入内存,其余部分暂留于外存,需要时调入内存,暂时不使用的内容换出到外存上。在逻辑上扩大了内存的容量,实际上并没有,即为“虚拟储存器”。

3.2.2 请求分页管理方式

请求分页系统建立于基本分页系统基础之上,且为了支持虚拟储存器增加了:请求调页 和 页面置换 功能。

请求分页系统中的页表项 如下:

页号——物理块号——状态位P——访问字段A——修改位M——外存地址

增加的四个字段说明如下
1、状态位P : 指示该页是否已调入内存
2、访问字段A : 记录本页在一段时间内被访问的次数,或是记录最近已有多长时间未被访问。
3、修改位M :标识该页在调入内存后是否被修改过,以确定页面置换时是否写回外存。
4、外存地址 : 指出该页在外存上的地址,通常是物理块号,供调入内存该页时参考。

请求分页系统中,访问的页面不在内存中时,便产生一个缺页中断。

3.2.3 页框分配

1、驻留集 : 给一个进程分配的物理页框的集合。
——————页框越少,驻留主存的进程就越多,可提高CPU的利用率。
——————一个进程主存中页面过少,缺页率相对较高。
——————若分配页框过多,则对缺页率无什么影响。

2、内存分配策略 :固定分配局部置换 、可分配全局置换 、可分配局部置换

3、物理块调入算法 :平均分配算法、按比例分配算法、优先权分配算法

4、调入页面时机 : 预调页策略、请求调页策略

5、从何处调入页面:——》三种方式:系统拥有足够的对换区空间、系统缺少足够的对换区空间、UNIX方式

6、如何调入页面 : 当进程所访问的页面不在内存中时 (存在位为0),便向CPU 发出缺页中断,中断响应后便转入缺页中断处理程序,该程序通过查找页表得到该页的物理块,此时如果内存未满,则启动磁盘 I/O将所缺页调入内存,并修改页表。如果内存已满,则先按某种置换算法从内存中选出页准备换出;如果该页未被修改过(修改位为0),则无须将该页写回磁盘;但是,**如果该页已被修改(修改位为 1),则必须将该页写回磁盘,然后将所缺页调入内存,并修改页表中的相应表项,置其存在位为 1。**调入完成后,进程就可利用修改后的页表形成所要访问数据的内存地址。

3.2.4 页面置换算法

选择调出页面的算法,好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会在访问或以后较长时间内不会在访问的页面线调出。

最佳置换算法(OPT)选择被淘汰的页面是以后永不使用的页面 或最长时间不被访问的,保证获得最低的缺页率。
先进先出页面置换算法(FIFO)队列实现,淘汰在内存中驻留时间最久的页面,只有这种算法会出现Belady异常。
最近最久未使用置换算法(LRU)堆栈类算法,选择最近最长时间未访问过的页面予以淘汰。
时钟置换算法(CLOCK)考虑页面是否被访问过和页面是否被修改过

3.2.5 抖动和工作集

1、抖动

简单来说就是:进程多,物理块少,进程频繁缺页。

刚刚换出的页面马上又要换入主存,刚刚换入的页面马上又要换出主存,这种频繁的页面调度行为称为抖动颠簸

2、工作集

工作集是指在某短时间间隔内,进程要访问的页面集合。

工作集大小一般会比工作集窗口小很多,一般来说分配给进程的物理块数(即驻留集大小)要大于工作集大小。

3.2.6 内存映射文件

将磁盘文件的全部或部分内容与进程虚拟地址空间的某个区域建立映射关系,便可以直接访问被映射的文件,而不必执行一些繁琐的操作,适合管理大尺寸文件。

内存映射文件所进行的如何实际交互都是在内存中进行的,共享内存是通过内存映射来实现的;进程可以通过共享内存来通信,而共享内存是通过映射相同文件到通信进程的虚拟地址实现的。

如下图所示:
在这里插入图片描述

3.2.7 虚拟储存器性能影响因素

缺页率,缺页率高即为抖动,是影响虚拟储存器性能的主要因素,也受到页面大小、分配给屋里进程的块数、页面置换算法及程序编制方法的影响。

根据局部性原理,页面较大则缺页率较低,页面较小则缺页率较高。
编写程序的局部化程度越高,执行时的缺页率就越低。

3.3本章小结

3.3.1 为什么要引入虚拟内存?

多道程序并发执行不仅使讲程之间共享了外理器,而且同时共享了主存。然而,随着对处理器需求的增长,进程的执行速度会以某种合理平滑的方式慢下来。但是,若同时运行的进程太多,则需要很多的内存,当一个程序没有内存空间可用时,那么它甚至无法运行。所以,在物理上扩展内存相对有限的条件下,应尝试以一些其他可行的方式在逻辑上扩充内存。

3.3.2 虚拟内存空间的大小是由什么因素决定的?

虚存的容量要满足以下两个条件:

1、 虚存的实际容量≤内存容量和外存容量之和,这是硬件的硬性条件规定的,若虚存的实际容量超过了这个容量,则没有相应的空间来供虚存使用。

2、 虚存的最大容量≤计算机的地址位数能容纳的最大容量。假设地址是32位的,按字节编址,一个地址代表 1B存储空间,则虚存的最大容量≤4GB (2B)。这是因为若虚存的最大容量超过4GB,则 32位的地址将无法访问全部虚存,也就是说4GB 以后的空间被浪费了,相当于没有一样,没有任何意义。

实际虚存的容量是取条件①和②的交集,即两个条件都要满足,仅满足一个条件是不行的。

3.3.3为什么要引入虚拟内存?

虚拟内存使用外存上的空间来扩充内存空间,通过一定的换入/换出,使得整个系统在逻辑上能够使用一个远远超出其物理内存大小的内存容量。因为虚拟内存技术调换页面时需要访问外存,会导致平均访存时间增加,若使用了不合适的替换算法,则会大大降低系统性能。

相关文章:

操作系统的奋斗(三)内存管理

第三章 内存管理3.1内存管理概念3.1.1 内存管理的基本原理和要求(1)内存管理的主要功能3.1.2 覆盖和交换(1)覆盖(2)交换3.1.3 连续分配管理方式(1)单一连续分配(2&#x…...

多选多的一种通用处理逻辑

开发的时候,我们经常会涉及元素的多选多,并且还需要对选中的元素进行拖动排序 通用的设计方案如下 游戏资源集合与游戏资源的绑定关系处理(多选多的一种通用处理逻辑) 可能的情况: 1.之前被选中的资源,现…...

Redis 的安装 + SpringBoot 集成 Redis

1.安装 Redis此处的 Redis 安装是针对 Linux 版本的安装, 因为 Redis 官方没有提供 Windows 版本, 只提供了 Linux 版本. 但是我们可以通过Windows 去远程连接 Redis.1.1 使用 yum 安装 Redis使用如下命令, 将 Redis 安装到 Linux 服务器:yum -y install redis1.2 启动 Redis使…...

为什么在容器中 1 号进程挂不上 arthas?

作者:卜比 本文是《容器中的 Java》系列文章之 4/n ,欢迎关注后续连载 😃 。 系列1:JVM 如何获取当前容器的资源限制? 系列2:Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题 系列3:让…...

23种设计模式之策略模式

一、概念 就是将一系列算法封装起来,并使它们之间相互替换。被封装起来的算法具有独立性外部不可改变其特性。 策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算…...

不会做UI自动化测试?一起设计框架再实践吧

目的相信做过测试的同学都听说过自动化测试,而UI自动化无论何时对测试来说都是比较吸引人的存在。相较于接口自动化来说它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟,那么存在即合理,自动化UI测试自然也是广大测试同学职业道…...

数据分析实战项目3:RFM用户分群

目录1、RFM模型介绍2、Excel实际RFM划分案例3、RFM案例3.1 数据加载和基本信息查看3.2 数据预处理和RFM的初始值计算3.3 RFM区间和划分和分值计算3.4 RFM计算结果保存3.4.1 保存到excel3.4.2 保存到数据库3.5 RFM计算结果可视化3.6 结果分析(营销建议)3.…...

消息中间件概述

目录1.为什么学习消息队列2.什么是消息中间件3.消息队列应用场景3.1 应用解耦3.2 异步处理3.3 流量削峰3.4 什么是QPS,PV3.5 什么是PV,UV,PR4. AMQP 和 JMS4.1 AMQP4.2 JMS4.3. AMQP 与 JMS 区别5. 消息队列产品6. RabbitMQ6.1 RabbitMQ简介6.2 RabbitMQ 中的相关概…...

vue和js给后端接口返回的数据(如以json数据为元素的数组)添加新的json字段

文章目录vue和js给后端接口返回的数据(如以json数据为元素的数组)添加新的json字段1. res为后端接口的响应2. 获取后端接口返回的数据3. 向 tableData 添加字段3.1. 向 tableData 中添加一个新json元素( {"time", "2023-02-09"} )3.…...

负载均衡的方式

在业务初期,我们一般会先使用单台服务器对外提供服务。随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集…...

python(15)--函数设计

前言 函数是可重用的程序代码块。 函数的作用,不仅可以实现代码的复用,还可以保证修改函数的代码时,所有调用该函数的地方都能得到体现。目前我已知函数的作用是:对代码实现了封装、函数调用、传递参数、返回计算结果等。 正文 …...

手把手教你用Python做可视化数据,还能调节动画丝滑度

数据可视化动画还在用Excel做? 现在一个简单的Python包就能分分钟搞定! 而且生成的动画也足够丝滑,效果是酱紫的: 这是一位专攻Python语言的程序员开发的安装包,名叫Pynimate。 目前可以直接通过PyPI安装使用。 使用…...

湖南中创教育PMP项目管理——变更管理

【变更管理​】包括 一、如何理解需求变更 二、如何控制需求变更 三、项目变更管理流程 四、如何应对“奇葩”变更 一、如何理解需求变更: 1、项目中发生变更是正常现象,变更无法回避 2、哪里都可能出现变更,任何人都有权提出变更 3、…...

IC真题 —— 刷题记录(1)

引言 记录一些 我自己刷的 IC行业招聘真题,不是每题记录,只记录一些值得记录的,写下自己的看法。主要是一些数字IC行业题目,偏前端。 1、有一个逐次逼近型 8位A/D 转换器,若时钟频率为250KHz,完成一次转换…...

【C++入门】命名空间,输出输入,缺省参数,函数重载

文章目录命名空间C输入与输出缺省参数函数重载命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标 识符的名称进行本地化&#xff0…...

cmu 445 poject 2笔记

2022年的任务 https://15445.courses.cs.cmu.edu/fall2022/project2/ checkpoint 1,实现b树,读,写,删 checkpoint 2, 实现b树,迭代器,并发读写删 本文不写代码,只记录遇到的一些思维盲点 checkp…...

梅开二度的 axios 源码阅读,三千字详细分享功能函数,帮助扩展开发思维

前言 第一遍看 axios 源码,更多的是带着日常开发的习惯,时不时产生出点联想。 第二遍再看 axios 源码,目标明确,就是奔着函数来的。 当有了明确清晰的目标,阅读速度上来了,思绪也转的飞快。 按图索骥&a…...

vcs仿真教程

VCS是在linux下面用来进行仿真看波形的工具,类似于windows下面的modelsim以及questasim等工具,以及quartus、vivado仿真的操作。 1.vcs的基本指令 vcs的常见指令后缀 sim常见指令 2.使用vcs的实例 采用的是全加器的官方教程,首先介绍不使用…...

java 自定义json解析注解 复杂json解析 工具类

java 自定义json解析注解 复杂json解析 工具类 目录java 自定义json解析注解 复杂json解析 工具类1.背景2、需求-各式各样的json一、一星难度json【json对象中不分层】二、二星难度json【json对象中出现层级】三、三星难度json【json对象中存在数组】四、四星难度json【json对象…...

类的 6 个默认成员函数

文章目录一、构造函数1. 构造函数的定义2. 编译器生成的构造函数3. 默认构造函数4. 初始化列表5. 内置成员变量指定缺省值(C11)二、析构函数1. 析构函数的定义2. 编译器生成的析构函数3. 自己写的析构函数的执行方式三、拷贝构造函数1. C语言值传递和返回值时存在 bug2. 拷贝构…...

基于Verilog HDL的状态机描述方法

⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库&#xf…...

6年软件测试经历:成长、迷茫、奋斗

前言 测试工作6年,经历过不同产品、共事过不同专业背景、能力的同事,踩过测试各种坑、遇到过各种bug。测试职场生涯积极努力上进业务和技术能力快速进步过、也有努力付出却一无所得过、有对测试生涯前景充满希望认为一片朝气蓬勃过、也有对中年危机思考不…...

OpenMMLab AI实战营第五次课程

语义分割与MMSegmentation 什么是语义分割 任务: 将图像按照物体的类别分割成不同的区域 等价于: 对每个像素进行分类 应用:无人驾驶汽车 自动驾驶车辆,会将行人,其他车辆,行车道,人行道、交…...

【软考】系统集成项目管理工程师(二十)项目风险管理

一、项目风险管理概述1. 风险概念2. 风险分类3. 风险成本二、项目风险管理子过程1. 规划风险管理2. 识别风险3. 实施定性风险分析4. 实施定量风险分析5. 规划风险应对6. 控制风险三、项目风险管理流程梳理一、项目风险管理概述 1. 风险概念 风险是一种不确定事件或条件,一旦…...

2017-PMLR-Neural Message Passing for Quantum Chemistry

2017-PMLR-Neural Message Passing for Quantum Chemistry Paper: https://arxiv.org/pdf/1704.01212.pdf Code: https://github.com/brain-research/mpnn 量子化学的神经信息传递 这篇文献作者主要是总结了先前神经网络模型的共性,提出了一种消息传递神经网络&am…...

Python:每日一题之全球变暖(DFS连通性判断)

题目描述 你有一张某海域 NxN 像素的照片,"."表示海洋、"#"表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. ....... 其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿…...

企业级安全软件装机量可能大增

声明 本文是学习大中型政企机构网络安全建设发展趋势研究报告. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 研究背景 大中型政企机构是网络安全保护的重中之重,也是国内网络安全建设投入最大,应用新技术、新产品最多的机构…...

为什么要用频谱分析仪测量频谱?

频谱分析仪是研究电信号频谱结构的仪器,用于信号失真度、调制度、谱纯度、频率稳定度和交调失真等信号参数的测量,可用以测量放大器和滤波器等电路系统的某些参数,是一种多用途的电子测量仪器。从事通信工程的技术人员,在很多时候…...

Python环境搭建、Idea整合

1、学python先要下载什么? 2、python官网 3、idea配置Python 4、idea新建python 学python先要下载什么? python是一种语言,首先你需要下载python,有了python环境,你才可以在你的电脑上使用python。现在大多使用的是pyt…...

HTTP请求返回304状态码以及研究nginx中的304

文章目录1. 引出问题2. 分析问题3. 解决问题4. 研究nginx中的3044.1 启动服务4.2 ETag说明4.3 响应头Cache-Control1. 引出问题 之前在调试接口时,代码总出现304问题,如下所示: 2. 分析问题 HTTP 304: Not Modified是什么意思? …...

番禺建设网站外包/东莞百度搜索网站排名

2019独角兽企业重金招聘Python工程师标准>>> 腰椎间盘突出我是L45号,左腿发麻有时疼痛,腰开始只是酸痛,因为是在外地打工怕家里担心,有胆小,周末百度了下就去了医院。还好当时着的是三家公立医院&#xff0…...

nft制作网站/电商平台排行榜

这是因为中国的企业都没有长远的规划,或者说它们都不知道自己能生存多长时间,如此情况下谁会愿意冒险去尝试新的东西,即使是深圳科技企业其实同样不愿意尝试新的东西,你看它先后进入的手机、PC、服务器、云计算,哪个是它开拓出来的…...

电商网站会员体制怎么做/郑州专业seo哪家好

1、纯CSS3实现人物摇头动画这次我们要来分享一款超级可爱的纯CSS3人物摇头动画,初始化的时候人物的各个部位是利用CSS3动画效果拼接而成,接下来就是人物听音乐的场景,一边听音乐一边摇着脑袋,十分陶醉的样子,周围还会出…...

跟随网站滚动的悬浮框怎么做/电商卖货平台有哪些

先上一个简单的流程示意图然后再从客户端输入用户名和密码开始说起:1、客户端输入用户名和密码登录渠道流程:1 客户端输入渠道账号user_name和密码password;2 登录,登录SDK成功之后,会返回一个token令牌;3 …...

大型电子商务网站建设成本/衡阳有实力seo优化

昨天晚上玩的很晚,到家已经是凌晨1点多了,刚躺下就接到公司,说数据库有问题,电话基本解决,可躺下就开始失眠,一直到早晨6点多才迷糊一会。最近一直就失眠啊!!! 做事要选择时机&#…...

给自己广告公司宣传/免费优化推广网站的软件

了解线程和进程 进程 程序:磁盘上的可执行二进制文件,并无运行状态。 进程:就是一个正在运行的任务实例(存活在内存里)。 获取当前电脑的CPU核心数: pip install psutil >>> import psutil>&…...