操作系统(三):内存管理,分页地址映射,页面置换算法LRU,NRU,FIFO,第二次机会算法和时钟算法

news2024/9/29 18:49:23

文章目录

  • 一、虚拟内存
  • 二、分页系统地址映射
  • 三、页面置换算法
    • 最佳置换算法
    • LRU 最近最久未使用算法
    • NRU 最近未使用
    • FIFO 先进先出
    • 第二次机会算法
    • 时钟算法
  • 四、内存分段
  • 五、段页式
  • 六、分页和分段的比较


一、虚拟内存

虚拟内存的目的是为了让无力内存扩充成更大的逻辑内存,从而让程序获得更多可用的内存。

为了更好管理内存,操作系统将内存抽象成地址空间。每一个程序拥有自己的地址空间,这个地址空间被分成多个页,并被映射到物理内存中(不需要连续),当程序引用到不在物理内存中的页的时候,由硬件执行必要的映射,并将缺失的部分装入物理内存中并重新执行之前失败的指令。

二、分页系统地址映射

内存管理单元MMU管理着地址空间和物理内存的转换,其中的页表存储着页(程序地址空间)和页框(物理内存空间)的映射表。

注意,一个虚拟地址分成两个部分,一部分存储页面号,一部分存储偏移量。

例如下图的页表存放着16个页,这16个页虚需要用4个比特位来进行索引定位。比如对于虚拟地址(0010 000000000100),前4位是存储页面号2,读取表项内容为(110 1), 页表项最后一位表示是否存在于内存中,1表示存在。后12位存储偏移量。这个页对应的页框地址为(110 000000000100)。
在这里插入图片描述

三、页面置换算法

在程序运行的过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。如果内存已经没有空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。

页面置换算法的主要目的是让页面置换频率最低,即增加页表命中的概率。

最佳置换算法

所选择的被换出的页面将是最长时间内不被访问的,通常这样可以保证获得最低的缺页率。然而这只是一种理论上的算法,因为我们并不能知道一个页面具体多长事件不会被访问。

LRU 最近最久未使用算法

虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。

为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。
在这里插入图片描述

NRU 最近未使用

每隔页面增设两个状态位: R 和 M。当页面被访问的时候设置页面的R = 1, 当页面被修改的时候设置M = 1。 其中R会定时被清零,NRU算法优先换出已经被修改的脏页面(R = 0, M = 1)。

FIFO 先进先出

选择换出的页面是最先进入的页面。

第二次机会算法

该算法主要是解决FIFO算法中可能会把经常使用的页面置换出去的问题,为了避免这一个问题,对FIFO算法做出一个简单的修改。

当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查链表头部的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。

时钟算法

第二次机会算法需要在链表中移动页面,大大降低了效率。 时钟算法使用环形链表将页面链接起来,再使用一个指针指向最老页面。

四、内存分段

虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,然而对于某些动态增长的程序来说,分页内存会导致覆盖问题。

内存分段就是把每一个表分成段,一个段构成一个独立的地址空间,每个段的长度可以不同并且可以动态增长。

五、段页式

程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。

六、分页和分段的比较

  1. 对程序员的透明性不同: 分页透明,但是分段需要程序员手动划分每个段。
  2. 地址空间的维度: 分页是一维空间,分段是二维。
  3. 大小是否可变: 页的大小不可变,段的大小可变。
  4. 出现原因: 分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手工测试怎样找到第一份自动化测试的工作?

你会手工测试了,那么准备再找自动化测试的工作,相对于什么都不懂的小白来说优势很大。要找自动化测试的工作,首先你要会自动化测试,你要会编程,能写自动化测试脚本的语言有很多,你可以自己选择一门&#xf…

求职笔记记录

求职笔记记录目录概述需求:设计思路实现思路分析1.面试过程参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.…

tofu:一款功能强大的模块化Windows文件系统安全测试工具

关于tofu tofu是一款功能强大的针对Windows文件系统安全的模块化工具,该工具可以使用离线方法对目标Windows文件系统进行渗透测试,并通过绕过Windows系统登录界面来帮助广大研究人员测试Windows主机的安全性。除此之外,该工具还可以执行哈希…

Python学习笔记 --- 初识Python

编译器和解释器 概念: 可以把编译器和解释器理解成是人与计算机之间的 “翻译”,将代码翻译成计算机能够识别的指令。 编译器:全文翻译,拿到代码会将其编译成一个计算机能够识别的临时文件,再把文件交给操作系统读取…

SpringMVC(3)

通过上面的学习我们知道,默认情况下无论是Spring MVC还是SpringBoot返回的都是现在都是前后端分离的,后端只需要进行返回数据给前端数据即可 1)向浏览器返回一个HTML界面 请求参数的数据类型Contnt-Type:text/html;charsetutf-8 RequestMapp…

Linux centos、麒麟V10 安装redis

目录 1、下载redis安装包 2、将下载后的.tar.gz压缩包上传到到服务器自定义文件夹下 3、 解压文件 4、安装redis 5、配置redis.conf 6、启动redis 1、下载redis安装包 Redis各版本下载:https://download.redis.io/releases/ 2、将下载后的.tar.gz压缩包上传到…

用主动游泳的三维水母模型量化美杜莎的(medusan)机械空间的性能(二)(2017)

文章目录用主动游泳的三维水母模型量化美杜莎的(medusan)机械空间的性能(二)(2017)原文链接:https://doi.org/10.1017/jfm.2017.3结果3.1 参考案例的游泳动力学3.2 改变钟的主动和被动材料属性3.2.1 改变施加的张力3.2…

【并发编程】【1】概览

并发编程 1. 概览 1.1 这门课讲什么 这门课中的【并发】一词涵盖了在Java平台上的 进程线程并发并行 以及Java并发工具,并发问题以及解决方案,同时也会包含一些其他领域的开发 1.2 为什么学这么课程 我工作中用不到并发啊? 1.3 课程特…

qemu的snapshot快照功能的详细使用介绍

快照功能还是蛮有趣的,就是资料比较少,这边万能菜道人特意整理了一下。参考内容:QEMU checkpoint(snapshot) 使用-pudn.comKVM&QEMU学习笔记(二)-蒲公英云 (dandelioncloud.cn)在线迁移存储 - 爱码网 (likecs.com)…

SpringMVC DispatcherServlet源码(4) HandlerMapping和HandlerAdapter等组件说明

本文介绍一下与DispacherServlet相关的几个重要组件: HandlerMapping - 管理请求与处理器映射关系HandlerAdapter - 请求处理器HandlerMethodArgumentResolver - 处理器方法参数解析器HandlerMethodReturnValueHandler - 处理器方法返回值处理器HttpMessageConvert…

LeetCode(剑指offer) DAY2

1.题目 从尾到头打印链表 解法一:先统计链表有多少节点,然后创建数组,再次遍历链表将值存储至数组,然后反转数组。这种解法思路简单,但是时间复杂度较高。 class Solution {int a 0,b0;public int[] reversePrint(Li…

Routability-Driven Macro Placement with Embedded CNN-Based Prediction Model

Routability-Driven Macro Placement with Embedded CNN-Based Prediction Model 2019 Design, Automation & Test in Europe Conference & Exhibition (DATE) DOI: 10.23919/DATE.2019.8715126 目录Abstract一、Introduction二、PROBLEM FORMULATION AND PRELIMINARIE…

java分析插入排序

首先查看一张经典的插入排序的图片 有图片可知,插入排序其字面的意思找到小的插入到前面就行 插入排序的基本思想就是分治:将数组分为两个区域,分别是已排序区和没有排序的区域 已排序区:假定一边的数组是都排序好的 wei排序区&…

软件测试选Python还是Java?

目录 前言 1、先从一门语言开始 2、两个语言的区别 3、两个语言的测试栈技术 4、如何选择两种语言? 总结 前言 对于工作多年的从业者来说,同时掌握java和Python两门语言再好不过,可以大大增加找工作时的选择范围。但是对于转行的人或者…

Vue2之Vue-cli应用及组件基础认识

Vue2之Vue-cli应用及组件基础认识一、Vue-cli1、单页面应用程序2、vue-cli介绍3、安装和使用4、创建项目4.1 输入创建项目4.2 选择第三项,进行自主配置,按回车键即可4.3 选择自己需要的库4.4 选择Vue的版本4.5 选择CSS选择器4.6 选择Babel、ESLint、etc等…

Sitara™处理器的产品开发路线图

Sitara™处理器的产品开发路线图概述Evaluation Phase(评估阶段)Board Development Phase(硬件发展阶段,硬件设计人员应重点关注这个阶段)Software Development Phase(软件发展阶段)Product Phase/SW Lifecycle概述 一般情况下,会存在四个主要的发展阶段…

从0到1一步一步玩转openEuler--15 openEuler使用DNF管理软件包

文章目录15.1 搜索软件包15.2 列出软件包清单15.3 显示RPM包信息15.4 安装RPM包15.5 下载软件包15.6 删除软件包DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸…

书籍《金字塔原理》读后感

上周读完了书籍《金字塔原理》这本书,这本书在管理学中,比较有名的书籍了,之前没怎么读过跟管理学相关书籍,这本算是第一本,是上级推荐给自己的,自己首先查了下,推荐度还是挺好的,看…

uniapp实现app检查更新与升级-uni-upgrade-center详解

app检查更新与升级 参考链接: 升级中心uni-upgrade-center - App uni-admin h5 api App资源在线升级更新 uni-app使用plus注意事项 关于在线升级(WGT)的几个疑问 什么是升级中心uni-upgrade-center uniapp官方开发的App版本更新的插件&#…

结构体的不定长数组,用起来就是这么爽

结构体的不定长数组 结构体数组不定长的做法,有两种 第一种: 指针 第二种:长度为0的数组 1. 结构体的数组指针 特点: 结构体初始化时,可以是结构体指针,如struct tag_info *pInfo NULL; 也可以是结构体变量…