这里写自定义目录标题
虚拟存储
相较于传统的存储(将进程所需要的全部装入内存)虚拟存储时在进程执行之前只把程序数据只装入一部分先要执行的进去执行 后面需要的数据再慢慢装入 拿分页式来说就是某个进程在执行时 有一部分页时装进了内存有一部分不在内存 需要进行页面置换
也就是将一部分磁盘内存(外存储)当内存使用
能实现虚拟存储的原因
局部性原理:
在一个短时间内 程序执行仅局限于某个部分 他所访问的存储空间局限在某个区域
1.程序执行时 除了少部分的转移和过程调用指令歪歪 在大多数情况下是顺序执行的
2.过程调用将会是程序的执行轨迹有一部分区域转移至另一部分区域 但是另一部份区域也不会很远
时间局限性:程序中的某条指令或数据被执行 则不久后该指令可能被再次执行
空间局限性: 一旦程序访问了某个存储单元 在不久后 其附近的存储单元也将被访问
系统的可用内存空间并非计算机系统中的实际物理内存 他包含物理内存及一部分磁盘空间
虚拟存储空间实际上是有一个大小限制的 并不能把所有的外存储当作虚拟内存 其实是受到逻辑地址空间的限制如果计算机时32位的 就不能64位的虚拟内存空间
与虚拟存储类似的 比如说虚拟CPU(就是CPU的并发运行 给用户体验以为是有多个CPU在运行 又比如说虚拟服务器)
在虚拟存储的请求分页存储管理方式中 页表一般是
页号 | 物理块号 | 状态位P | 访问字段A | 修改位M | 外存地址 |
---|
状态位(标识该页是否在内存中)
修改位(标识该页被调入内存后是否有被修改过)
外存地址(该页在外存上的地址 通常是物理块号)
访问字段A(记录该页在一段时间内被访问次数 或记录该页最近已有多长时间未被访问)
抖动
就是页面置换的不好 刚置换出去的页面等下又要用 页面置换占用了大量的时间
抖动产生的原因
进程分到的页框数少 要不断地发生页面置换
置换算法不好
系统负载过高 也就是系统中运行的进程数过多
请求分页存储管理方式(虚拟存储的情况下)
进程发生调度执行的时候会发生地址转换(应该就是把该进程的程序装入内存中)
如果系统支持TLB(虚拟地址和物理地址的映射关系缓存到TLB中。TLB是虚拟高速缓存 )(快表 保存最近访问的页表项)CPU会先去检查TLB 如果该进程所需的页表项(就是第几页)在TLB中 也就意味着相应页块已经存储进了内存 就可以直接找到该页表在内存中的物理地址
但是如果在TLB中没有找到(没有找到的原因:采用的是虚拟内存 所有有一部分页没有装进来) 那么就要去页表 页表中有状态位(标识该页是否在内存中)和修改位(标识该页是否有被修改过) 通过存储位我们就能直到该页是否在内存中
如果该页表项在内存中 则需要把该页表项更新进内存中 也更新进TLB中
如果该页表项不在内存中 则会发生一个缺页中断处理 被执行的进程就会发生阻塞 然后去寻找需要的那个页 在找到后 先判断是否有足够的内存块存储相应的页