内存管理学习笔记 :
操作系统---内存管理(上) 概念 覆盖交换技术 连续分配管理方式
操作系统---内存管理(下) 分段存储 段页式存储 虚拟内存 请求分页管理方式
分段 : 进程的地址空间会按照自身的逻辑关系划分为若干个段, 每个段都有一个段名, 每段从0开始编址
内存分配规则 : 以段为单位进行分配, 每个段在内存中占据连续空间, 但各段之间可以不相邻
程序分为多个段, 各个段离散地装入内存, 为了保证程序能正常运行, 就必须能从物理内存中找到各个逻辑段的存放位置. 为此, 需为每个进程建立一张段映射表, 简称 " 段表 " .
关于段表 :
页是信息的物理单位, 分页的主要目的是为了实现离散分配, 提高内存利用率. 分页仅仅是系统管理上的需要, 完全是系统行为, 对用户是不可见的
段是信息的逻辑单位, 分段的主要目的是更好地满足用户需求. 一个段通常包含着一组属于一个逻辑模块的信息, 分段对用户是可见的, 用户编程时需要显式地给出段名
页的大小是固定且由系统决定, 段的长度却不固定, 决定于用户编写的程序
分页的用户进程地址空间是一维的, 分段的用户进程是二维的.
优点 | 缺点 | |
---|---|---|
分页管理 | 内存空间利用率高. 不会产生外部碎片, 只有少量的内部碎片 | 不方便逻辑模块实现信息的共享与保护 |
分段管理 | 方便实现逻辑模块信息的共享与保护 | 如果段长过大, 为其分配很大的连续空间会很不方便, 并且段式管理会产生外部碎片 |
先分段 , 再分页
段页式管理的逻辑地址结构 :
由段号, 页号, 页内偏移 组成
注意 :
"分段"对用户是可见的, 而将各段"分页"对用户是不可见的, 系统会根据段内地址自动划分页号和段内偏移量, 因此段页式管理的地址结构是"二维"的.
每一个进程对应一个段表, 每一个段又对应一个页表, 因此一个进程可能对应多个页表.
虚拟内存---基于局部性原理
在程序装入时, 将程序中很快会用到的部分装入内存, 暂时用不到的部分留在外存, 就可以让程序开始执行.
在程序执行过程中, 当所访问的信息不在内存时, 由操作系统负责将所需信息由外存调入内存, 然后继续执行程序.
内存空间不够时, 操作系统负责将内存中暂时用不到的信息换出到外存
在用户看来, 就有一个比实际内存大很多的内存, 这就叫虚拟内存
注意 :
虚拟内存的最大容量是由计算机的地址结构 ( CPU的寻址范围 ) 确定的, 虚拟内存的实际容量 = $ min( 内存容量 + 外存容量, CPU寻址范围) $
虚拟内存的实现 :
请求分页存储管理
请求分段存储管理
请求段页式存储管理
操作系统需要提供的功能 :
缺页时请求掉页不一定页面置换, 若还有可用的内存块, 就不用进行页面置换
在请求分页操作系统中, 每当要访问的页面不在内存时, 便产生一个缺页中断, 然后由操作系统的缺页中断处理程序处理中断
此时缺页的进程阻塞, 放入阻塞队列, 调页完成后再将其唤醒, 放回就绪队列
如果内存中有空闲块, 则为进程分配一个空闲块, 将所缺页面装入该块, 并修改页表中相应的页表项
如果内存中没有空闲块, 则由页面置换算法选择一个页面淘汰, 若该页面在内存期间被修改过, 则要将其写回外存, 未修改过的页面不用写回外存
缺页中断是因为当前执行的指令想要访问目标页面未调入内存而产生的, 因此属于内中断 :
每次选择淘汰的页面是以后永不使用或者在最长时间内不会使用的页面, 保证最低的缺页率 . 但是操作系统无法预判页面访问序列, 这种算法是无法实现的
每次淘汰的页面是最早进入内存的页面
实现 : 将调入内存的页面根据调入的先后顺序排成一个队列, 需要置换页面的时候选择队首的页面.
实现简单, 算法性能差, 不适应进程实际运行时的规律
当需要淘汰一个页面的时候, 选择现有页面中t值最大的, 即最近最久未使用的页面.
做题时的方法 : 需要淘汰页面时, 逆向检查此时在内存中的几个页面号, 最后一个出现的页号就是需要被淘汰的
LRU算法的特点 : 性能好, 但实现起来需要专门的硬件支持, 算法开销大
他们是同一种算法.
简单的CLOCK算法的实现方法 :
简单的时钟置换算法仅考虑到了一个页面最近是否被访问过, 但是事实上, 如果被淘汰的页面没有被修改过, 就不需要执行I/O操作写回外存. 只有被淘汰的页面被修改过时, 才需要写回外存------因此, 除了考虑一个页面最近有没有被访问过之外, 操作系统还应该考虑页面有没有被修改过. 在其他条件都相同时, 应该优先淘汰没有修改过的页面, 避免I/O操作, 这就是改进型的时钟置换算法的思想.
利用 (访问位, 修改位) 的形式表示各页面状态
对应页面 | |
---|---|
第一轮 : 找第一个 (0, 0)的帧用于替换 ( 不修改标志位 ) | 最近没访问且没修改 |
第二轮 : 找第一个 (0, 1)的帧用于替换 ( 将所有扫描过的帧访问位设为0) | 最近没访问但修改过 |
第三轮 : 找第一个 (0, 0)的帧用于替换 ( 不修改标志位 ) | 最近访问过但没修改 |
第四轮 : 找第一个 (0, 1)的帧用于替换 | 最近访问过也修改过 |
特点 : 开销小, 性能也不错
请求分页存储管理器中给进程分配的物理块的集合. ( 系统给进程分配了n各物理块 ----的另一种表述 : 驻留集大小为n)
在采用虚拟存储技术的系统中, 驻留集的大小一般小于进程的总大小
固定分配全局置换不存在, 因为进程物理块固定后不会再分配给别人
预调页策略
请求调页策略
文件区用于调入不会被修改的数据, 对换区用用于调入可能被修改的数据
抖动现象
ref : https://www.bilibili.com/video/BV1YE411D7nH?p=41
操作系统---内存管理(下) 分段存储 段页式存储 虚拟内存 请求分页管理方式
原文:https://www.cnblogs.com/roccoshi/p/13109957.html