热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

(两百七十六)《OperatingSystems:ThreeEasyPieces》读书笔记(四)

第16章分段之前的基址寄存器界限寄存器会达到内部碎片和外部碎片的问题,内部碎片是由于堆栈可能内存空间使用不充分,中间有空闲内存,但仍分配

 第16章 分段

之前的基址寄存器+界限寄存器会达到内部碎片和外部碎片的问题,内部碎片是由于堆栈可能内存空间使用不充分,中间有空闲内存,但仍分配了对应的物理内存。外部碎片指分配完程序所需的内存空间后,整块内存中间有大大小小的碎片,即为外部碎片。

 

分段解决了内部碎片问题,为代码、堆和栈分别设置了基址寄存器+界限寄存器。即泛化的基址/界限

那带来了问题,如何确定代码堆栈和寄存器的对应关系呢?


  • 显示(将虚拟地址分为分割成段标识+偏移,段标识意指00 01 10 11)
  • 隐式(地址由程序计数器产生,地址在代码段,基于栈或基址指针,则在栈,否则在堆)

外部碎片可通过最优匹配、最坏匹配、首次匹配和伙伴算法或定期紧凑内存

 

分段仍不能很好解决堆大而稀疏的问题,还是会由内存碎片问题

 


第17章 空闲空间管理

问题:变长的分配请求怎么管理内存?什么策略碎片最小化?相对应的时间空间开销?

 

假设


  • 策略主要关心外部碎片
  • 内存分配后不可重定位到其他位置
  • 分配程序管理的是连续区域,可以要求其生长

另外分配内存时需要内存大小,但是释放时不需要时由于内存块有个头部,会记录当前分配的内存块大小,当释放时读取即可。

组成部分为:头块(size+magic,hptr指向)+请求分配区域(ptr指向)

 

基本策略:

最优匹配策略:找到和请求内存大小最接近的内存块,优点是避免浪费,缺点是时间复杂度高,性能损耗大

最差匹配:目的是保留较大的块,而不是像最优匹配一样剩很多小块,策略是找到最大的块进行分割

首次匹配:找到第一个足够大的块即进行分割

下次匹配:在首次匹配的基础上继续向后遍历首次匹配,多维护一个上次分配地址的指针,避免对列表开头频繁分割

分离空闲列表:管理类似相同的分配请求列表,实际应用当内核启动时,为频繁请求的内核对象创建了一些对象缓存,这些对象缓存每个分离了特定大小的空闲列表,因此可以快速响应和释放

伙伴系统:用户合并内存很方便,地址只需要改一位(分配内存时2的次幂,会有内部碎片问题)

 


第18章 分页

 分片:意为将内存分割成固定长度的分片

页表:虚拟内存页定位到对应的页帧上,映射关系存储在内存中

地址空间地址组成: VPN(虚拟页面号) + Offset(偏移量)

 


第19章  分页:快速地址转换(TLB)

分页:有性能消耗问题,会多一次对页表的内存访问,TLB用来优化该问题

 

大概流程:从虚拟地址中提取页号,然后检查TLB中是否由该VPN的转换映射,如果有,则有了TLB命中,这意味这TLB有该页的转换映射,接下来就从相关TLB项中取出页帧号(PFN),与原来虚拟地址中的偏移量组合形成期望的物理地址(PA),并访问内存。

如果没有命中,则硬件访问页表寻找转换映射,并将该转换映射更新TLB,TLB更新后会重新执行该整个流程。

 

总结来看就是TLB相对于页表进行了缓存,访问过一次后即命中后,可加快虚拟地址向物理地址的转换

 


第20章 分页:较小的表

分页还有另外一个问题:由于页号太多,页表会很大,进而消耗内存过高

策略

1.更大的页:减少了页,但是会带来内部碎片问题

2.混合方法:分段+分页,地址空间分割为 seg + VPN +offset,但对大而稀疏的堆处理的不大好

3.多级页表:页目录(+页次级目录)+页表(思想不局限于特定功能分段,而是将地址空间分成几块,分别对应于目录的映射,分的快速取决于总体页数除以每页能存储的页数)

 

时间和空间的折中

 

 

 

 

 

 

 

 

 

 

 

 

 


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 显卡驱动对游戏的影响及其提升效果的研究
    本文研究了显卡驱动对游戏体验的提升效果,通过比较新旧驱动加持下的RTX 2080Ti显卡在游戏体验上的差异。测试平台选择了i9-9900K处理器和索泰RTX 2080Ti玩家力量至尊显卡,以保证数据的准确性。研究结果表明,显卡驱动的更新确实能够带来近乎50%的性能提升,对于提升游戏体验具有重要意义。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 达人评测 酷睿i5 12450h和锐龙r7 5800h选哪个好 i512450h和r75800h对比
    本文介绍了达人评测酷睿i5 12450h和锐龙r7 5800h选哪个好的相关知识,包括两者的基本配置和重要考虑点。希望对你在选择时提供一定的参考价值。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了关于smarty自定义缓存名的解决思路,通过放弃生成缓存,直接生成html的静态页面来提高速度。同时提供了一个参考链接供参考。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
author-avatar
wo缘相聚在空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有