热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

内存管理:页式虚拟内存管理

页式存储管理——虚拟内存——缺页中断,页面替换算法开章明意:创建一个进程(创建进程是在磁盘中),进程以字节为单位编号,然后再进程分为许多页(每页4KB),内存中有对应的页框(设定同

页式存储管理——虚拟内存——缺页中断,页面替换算法

开章明意: 创建一个进程(创建进程是在磁盘中),进程以字节为单位编号,然后再进程分为许多页(每页4KB),内存中有对应的页框(设定同页)。通过页表(记录页和页框的对应关系),将最需要的页调入内存,其他页留在磁盘中。根据CPU的需要动态的更新页表,并调入调出页,实现对内存的充分利用。
本质就是:内存局部读入进程,其余的存储在磁盘中

内存不够用的问题—— 现阶段通常使用8G内存,但一个大型游戏就要10G+内存,如何解决?
虚拟内存:给每个进程分配一个独立的地址空间(本质在磁盘上),每个进程独立的地址空间就叫虚拟内存。 虚拟内存中的页是连续的,但可以对应到内存中不连续的页框,这样就实现了对内存的充分利用。(不要求内存提供连续的存储空间)
《内存管理:页式虚拟内存管理》
当进程建立时, 数据储存于磁盘内的虚拟内存空间,也不需要为该进程去配置主内存空间,只有当该进程的页被调用的时候才会被加载到实际内存中。
《内存管理:页式虚拟内存管理》
操作系统为了管理内存,给每个进程都分配独立的地址空间,对32位的系统而言,这个空间的大小是4GB。这4GB并不是实际的物理内存,实际上并不存在,因此有虚拟内存这一名称。

建立映射关系: 页(page),页框(frame),页表
分为大小相等的多个块,称为页(Page).每个页都是虚拟内存中一段连续的地址(一般一页为4Kb),其中一部分对应物理内存上的一块(称为页框,通常页和页框大小相等),还有一些没加载在内存中的对应在硬盘上。
内存构成: 8G, 按字节为单位编号(0-许多,这些编号就叫做地址),再按页框(一般为4KB)为单位进行与磁盘的数据交换.

页表结构: ——页表完成虚拟地址到物理内存地址的映射,每个进程都有一个自己的页表,
《内存管理:页式虚拟内存管理》
页表的每一项的属性
1.页号——页框号
2.偏移量:内存的基地址加上偏移量找到想要的内存地址 即地址空间计算时的公式
3.存在位:页是否在内存中
页表中每个项通常为32位,既4byte,除了存储虚拟地址和页框地址之外,还会存储一些标志位,比如是否缺页,是否修改过,写保护等。

页表存在MMU(memory management unit 内存管理部件)中
《内存管理:页式虚拟内存管理》

缺页中断,页面置换
进程线性地址空间里的页面不必常驻内存,在执行一条指令时,如果发现要访问的虚拟内存的页并不存在于物理内存中(存在位为0),那么停止该指令的执行,并产生一个页不存在异常,故障处理程序从磁盘中取得缺的页放入内存,如果内存已满按页面置换算法来废弃某个页面,将其所占据的物理页释放出来,再调入所需页。

页面置换算法:决定将哪些页面替换出去
选择哪些页替换出去就显得尤为重要,如果算法不好将未来需要使用的页替换出去,则以后使用时还需要替换进来,这无疑是降低效率的。

1.最佳置换算法(Optimal Page Replacement Algorithm)
将未来最久不使用的页替换出去,这听起来很简单,但是无法实现。但是这种算法可以作为衡量其它算法的基准
2.时钟替换算法: 最常用的算法
3.先进先出算法:淘汰在内存中最久的页,这种算法的性能接近于随机淘汰。并不好
4.最近不常使用算法: 淘汰最不经常访问的页项

空闲内存管理
系统要用什么样的数据结构记录内存的使用情况? ——
空闲区链表
用一个表来记录内存中空闲的页框
《内存管理:页式虚拟内存管理》
当很多个空闲分区都能满足进程的内存需求时,应该选择哪个分区进行分配? —动态内存分配算法
1.最先匹配(First Fit Allocation):足够大的第一个空闲区 最简单 不用搜索整个表
《内存管理:页式虚拟内存管理》
2.最佳匹配算法(Best fit): 搜索整个空闲区表,找到符合要求的最小空闲区 应用最广泛
《内存管理:页式虚拟内存管理》
3.最差匹配算法(Worst fit): 搜索整个表,分配最大的可用空间,性能最差
《内存管理:页式虚拟内存管理》

内存管理机制完善(三项实际中使用的技术)
对核心的页式虚拟内存管理的完善: ** 两级页表机制 + 页面高速缓存技术 + 段页式存储管理**
1.段页式存储管理(实际使用的管理方式): 页式存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享。如果将这两种存储管理方法结合起来,就形成了段页式存储管理方式。段页式管理就是将程序分为多个逻辑段,在每个段里面又进行分页,即将分段和分页组合起来使用。
2…两级页表:二级页表 页目录—页表 二级结构,节省内存
3…页面高速缓存技术:又称为快表,提供中间由虚拟地址转换为物理地址时的缓存(缓存思想,缓存最常用的页),可以直接将虚拟地址映射到物理地址,加速分页过程
《内存管理:页式虚拟内存管理》

其他的一些基本概念:
1.重叠overlay ——即段式管理
如果一个程序需要使用比物理内存更大的内存空间怎么办?
此时,可以将程序按照功能分成一段一段功能相对完整的单元,一个单元执行完成后再执行下一个单元,这就是重叠(overlay)
2.交换技术:在磁盘中创建交换区,把一个最需要处理的进程完全调入内存(进程调度算法),使该进程运行一段时间。内存中进程未处于运行态时,就调出内存到磁盘交换区(即挂起),再调另一个完整进程进内存。空闲进程主要存在磁盘上,所以当他们不运行时就不会占用内存
3.动态重定位:基址寄存器,界限寄存器
基址寄存器: 寄存程序的起始物理地址
界限寄存器: 寄存程序的长度
《内存管理:页式虚拟内存管理》
为什么不能直接使用物理地址:
1.内存不够直接运行大型程序:内存往往是不够用的: 建立认知—— 计算机开机会启动大约100个进程,每个大约5-10M,
工作中的PS应用程序占 1G 左右内存 一个大型游戏就是10G+内存需求
2.无法并发:并发的概念——举例理解: 多个程序保持就绪态,随时可以运行
《内存管理:页式虚拟内存管理》
不同程序使用内存中不同的地址块 —— 使用绝对物理地址: 导致对内存地址的不正确访问(因为两个程序都使用绝对物理地址,两个程序访问地址冲突导致程序崩溃)
3. 在简单嵌入式系统中可以直接引用物理地址
《内存管理:页式虚拟内存管理》
内存管理直观—— 进程管理器: ctrl + Alt + delete
《内存管理:页式虚拟内存管理》


推荐阅读
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • vivo Y5s配备了联发科Helio P65八核处理器,这款处理器采用12纳米工艺制造,具备两颗高性能Cortex-A75核心和六颗高效能Cortex-A55核心。此外,它还集成了先进的图像处理单元和语音唤醒功能,为用户提供卓越的性能体验。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 本文介绍了如何在React和React Native项目中使用JavaScript进行日期格式化,提供了获取近7天、近半年及近一年日期的具体实现方法。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • [Vue.js 3.0] Guide – Scaling Up – State Management
    [Vue.js 3.0] Guide – Scaling Up – State Management ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
author-avatar
缅甸环球国际
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有