操作系统概念黑书复习(4)第8,9章

  • 第八章 内存管理策略
  • 内存由一个很大的字节数组来组成,每个字节都有各自的地址,cpu根据程序计数器的值从内存中提取指令,这些指令可能引起对特定内存地址的额外加载和存储
  • 机器指令可以用内存地址做参数,而不能用磁盘地址做参数
  • cpu会出现暂停的情况,需要cpu内置的高速缓存(cache)
  • 多用户系统上,要保证用户进程不会互相影响,通过硬件来实现,因为os通常不干预cpu对内存的访问(会有性能损失)
  • 单独的进程内存空间可以保护进程而不受相互影响
  • 基地址寄存器,界限地址寄存器,用户模式下访问其他地址内的数据时,会陷入os
  • 在磁盘上等待调到内存以便执行的进程形成了输入队列(input queue)
  • cpu生成的地址为逻辑地址,而内存单元看到的地址(加载到内存地址寄存器的地址)为物理地址
  • 从虚拟地址到物理地址的运行时映射是由内存管理单元的硬件设备完成(mmu):基地址寄存器在这里称为重定位寄存器,用户进程所生成的地址在送交内存之前,都要加上重定位寄存器的值
  • 逻辑地址空间绑定到另一单独物理地址空间的这一概念对内存管理至关重要
  • 动态加载:只有一个程序被需要时,他才会被加载到内存
  • 动态链接库(dynamically linked library):系统库
  • 每个库程序的引用都有一个存根(stub):指出库程序的位置
  • 动态连接可用于库的更新
  • 进程可以暂时从内存交换到备份存储中
  • 标准交换:cpu调度器决定要执行一个进程时,调用分派器,分派器会换入或换出(swap in / swap out),上下文切换的时间相当高,只交换真正使用的内存,就可以减少交换时间
  • 移动系统的交换:采用闪存,可以终止进程
  • 连续内存分配:每个进程位于一个连续的内存区域,与包含下一个进程的内存相连
  • 内存通常分为两个区域:一个用于驻留操作系统,一个用于用户进程,os放在低内存或高内存的主要决定因素是中断向量的位置
  • 内存分配:多分区方法:将内存分为几个固定大小的分区
  • 可变分区方案:os有一个表记录哪些内存可用和哪些内存已用,有孔(hole),任何时候都有一个可用块大小的列表和一个输入队列,孔太大的情况下会给一个孔分为两块,一个分配给进程,一个回到孔集合。动态存储分配问题:首次适应,最优适应,最差适应。
  • 外部碎片(external fragmentation):50%规则:由进程的不断加载和退出在存储中产生很多小孔;解决方法:紧缩或允许进程的逻辑地址空间可以为不连续的
  • 内部碎片(internal fragmentation):通常按固定大小的块为单位来分配内存,会产生一定的内部碎片
  • 分段:将内存看做一组长度不同的段,用两个量指定地址:段名称和段偏移,为了简介,将段名称改成段号(段表的索引),使得有序对<段号,偏移>
  • 段表(segment table)每一个条目都有段基地址和段界限
  • 分段允许了进程的物理地址空间是非连续的
  • 分页避免了外部碎片和紧缩,将物理内存分为固定大小的块,称为帧或页帧(frame),将逻辑内存也分成同样大小的块,称为页或页面(page)
  • 分页有页码和页偏移,页码是页表的索引,分页本身是一种动态的重定位,每个逻辑地址由分页硬件绑定为某个物理地址,采用分页方案不会产生外部碎片,每个空闲帧都会分配给需要他的进程,但有内部碎片,分配是以帧为单位进行的
  • 页的大小通常为4kb到8kb,系统进程需要执行时,要检查该进程的大小(按页计算),如果进程需要n页,内存要至少有n帧,分页把视图的内存和物理内存清楚分离,让我们可以把内存作为一整块处理
  • 帧表(frame table)有信息:帧是空闲还是占用,被哪个进程的哪个页占用
  • 上下文切换会因为分页导致切换的时间更长:要为每个进程维护页表
  • 页表的硬件实现:(不是很懂)将页表作为一组专用的寄存器实现,或将页表基地址寄存器指向页表
  • TLB转换表缓冲区,是一种专用的,小的,查找快速的高速硬件缓冲,cpu发展趋势:从没有TLB到多级TLB
  • 共享页:可以共享公共代码,可重入代码和纯代码可以共享
  • 会存在一个页表太大的问题,采用分层分页的方式,划分成更小的块,向前映射页表
  • 哈希页表:利用链式哈希
  • 倒置页表:<进程id,页码,偏移>
  • 第九章 虚拟内存管理
  • 使得执行进程不必完全处于内存,程序可以大于物理内存
  • 虚拟内存将用户逻辑内存与物理内存分开,使得用户可以为一个巨大的虚拟空间编写程序
  • 进程的虚拟地址空间:进程在内存存放的逻辑视图
  • 请求调页:页面只有在被请求时才会加载
  • 惰性交换器:除非需要某个页面,否则从不将它交换到内存中
  • 交换器操纵整个进程;调页程序:只涉及进程的页面
  • 对于已调入内存的页面,它的页表条目是照常设置的,而对于不在内存中的页面,它的页表条目可以设置为无效或者包含磁盘上的页面地址
  • 当进程执行和访问那些内存驻留的页面时,执行会正常进行;对标记为无效的页面访问会产生欠缺错误(page fault),会陷入操作系统
  • 纯请求调页:只有在需要时才将页面调入内存
  • 当一个指令可以修改多个不同位置时,会出现困难:解决方案一:微代码计算并试图访问两块的两端,如果会出现缺页错误,会直接出现。方案二:使用临时寄存器来保存覆盖位置的值,如果有缺页错误,所有旧值将写回内存中
  • 对于请求调页,降低缺页错误率是极为重要的,否则会增加有效访问的时间,从而极大减缓了进程的执行速度
  • 写时复制:允许父进程和子进程最初共享相同的页面来工作,写入共享页面时需要创建共享页面的副本,只有可以修改的页面菜需要标记为写时复制,需要空闲的页面池(page pool),分配这些空闲页面时,os采用按需填零,清除了以前的内容
  • 页面置换
  • 增加多道程度可能会过度分配内存。
  • 有些系统会为IO缓存分配了固定占比的内存,其他系统允许用户进程和IO子系统竞争使用所有系统内存
  • 基本页面置换:选择一个牺牲帧,但在没有空闲帧的情况下,需要两个页面传输(一个调入,一个调出),而采用修改位(脏位)可以减少这种开销,当页面被写入任何字节时,它的页面修改位会由硬件设置,表示页面被修改过,此时,如果页面没被修改过,可以降低一般的IO时间
  • 实现请求调页的两个主要问题:帧分配算法和页面置换算法
  • 随着帧数量的增加,缺页错误的数量会降低至最小值
  • FIFO页面置换:belady异常:4帧的缺页数比3帧的缺页数还要大
  • 最优页面置换(OPT或MIN):置换最长时间不会使用的页面,确保了对于给定数量的帧会产生最低的可能的缺页错误率,但是难以实现,因为用到了引用串未来的知识
  • LRU页面置换:利用了硬件辅助
  • 近似LRU页面置换:有引用位的概念,额外引用位算法:记录8位的数据,不断右移;第二次机会算法:引用值为1时减1,最坏的情况下所有位都设置,需要进行第二轮循环;增强型第二次机会算法:将引用位和修改位作为有序对(0,0)(0,1)(1,0)(1,1)
  • 基于计数的页面置换:最不经常使用页面置换算法(LFU);最经常使用页面置换算法(MFU),一般不用
  • 页面缓冲算法:保留一个空闲帧缓冲池,出现缺页错误时依旧会选择一个牺牲帧,但在写出牺牲帧之前,所需页面直接读到来自缓冲池的空闲帧,当牺牲帧被写出后,被添加到空闲帧池,扩展(空闲帧池保留一定的之前的页面)
  • 数据库,数据仓库提供了自己的内存管理和IO缓冲,不需要通过文件系统的数据结构,有的os允许特殊程序能够将磁盘分区作为逻辑块的大的数组来使用
  • 必须有足够的帧来容纳任何单个指令可以引用的所有不同的页面,最小帧数由计算机架构定义;
  • 帧的分配:平均分配;比例分配;全局分配(有更好的系统吞吐量,更常用);局部分配;非均匀内存访问系统(具有明显不同的内存访问时间的系统,有多个系统板,每个系统板包括多个cpu和一定的内存):要是分配的内存帧尽可能靠近运行进程的cpu
  • 高度的页面调度活动称为抖动(thrashing),如果一个进程的调页时间多于它的执行时间,那么这个进程就在抖动
  • 为了提高cpu利用率并停止抖动,必须降低多道程度
  • 局部性模型(不太懂,缓存的背后原理)
  • 工作集模型:用于解决系统抖动的问题
  • 缺页错误频率(PFF)的策略也可以用于解决系统抖动:设置所需缺页错误率的上下限
  • 内存映射(memory mapping)文件:允许一部分虚拟内存与文件进行逻辑关联,内存映射文件的写入不一定是对磁盘文件的即时(同步)写入,当关闭文件时,所有内存映射的数据会写到磁盘,并从进程虚拟内存中删除
  • 很多时候,内存共享是通过内存映射来实现的
  • 内存映射IO:一组内存地址专门映射到设备寄存器设备寄存器,对这些内存地址的读取和写入,倒置数据传到或取自设备寄存器,适用于有快速相应时间的设备
  • 伙伴系统:从物理连续的大小固定的段上就行分配,一个优点:通过合并的技术,可以将相邻伙伴快速组合以形成更大的段,缺点:内部碎片
  • slab分配:每个内核数据结构都有一个cache,每个cache由一个或多个slab组成,没有碎片:slab按所表示对象的大小来分块
  • 预调页面:试图组织大量的最初调页
  • 某些情况下,如果用户(编译器)认识到内在的请求调页,可以改善系统性能(如数组的清零)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值