热门标签 | 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
《内存管理:页式虚拟内存管理》


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
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社区 版权所有