相关文章:html
【操做系统】存储器管理程序员
【操做系统】处理机调度简述算法
【操做系统】之进程管理数据结构
【操做系统】经典的同步问题(生产者消费者问题, 哲学家进餐问题, 读写问题)性能
内存的容量有限, 若是有大做业或大量做业运行, 内存就会不够用. 为解决这一问题边催生了虚拟存储器的概念.spa
常规存储器管理方式的特征操作系统
- 一次性
做业必须一次性地所有装入内存后才能开始运行.
- 驻留性
做业被装入内存后, 整个做业都一直驻留在内存中, 其中任何部分都不会被换出, 直至做业运行结束.
局部性原理
由1968年P.Denning提出: 在较短的时间内, 程序的执行仅局限于某个部分, 相应地, 它所访问的存储空间也局限于某个区域.
他提出了几个论点:3d
- 程序执行时, 除了少部分的转移和过程调用指令外, 在大多数状况下是顺序执行的.
- 过程调用将会使用程序执行轨迹由一部分区域转至另外一部分区域.
- 程序中存在许多循环结构, 这些结构虽然只有少数指令构成, 可是他们将被屡次执行.
- 程序中号包括许多对数据结构的处理, 这写每每都局限在很小的范围内.
局限性还表如今时间和空间方面指针
- 时间局限性
因为程序中存在大量循环操做, 那么某些指令(数据)在不久以后会再次被执行(访问).
- 空间局限性
程序在一段时间内访问的地址可能集中在必定的范围内, 好比程序的顺序执行.
虚拟存储器
-
定义
-
具备请求调入和置换功能,
能从逻辑上对内存容量加以扩充的存储器系统
特征code
- 屡次性. 一个做业中的程序和数据无需再做业运行时一次性所有装入内存, 而是容许被分红屡次调入内存运行. (只需当前要运行的部分程序和数据装入内存便可)
- 对换性. 一个做业中的程序和数据, 无须在做业运行时一直常驻内存, 而是容许在做业的运行过程当中进行对换操做.(在进程运行期间, 将有用的程序或数据换入, 无用的则换出)
- 虚拟性. 可以从逻辑上扩充内存容量. 提升内存利用率
虚拟性是以屡次性和对换性为基础的.
虚拟存储器能够经过请求分页, 请求分段的方法实现, 它们都须要软硬件支持, 主要硬件有页(段)表机制, 缺页(段)中断机构, 地址变换结构
请求分页存储管理方式
请求页表
页号 |
物理块号 |
状态位P |
访问字段A |
修改位M |
外存地址 |
分为页号, 物理块号, 状态位P, 访问字A段, 修改位M, 外存地址
状态位(存在位)P: 因为该字段只有一位, 又称位字. 用于指示该页是否已调入内存, 供程序访问时参考.
访问字段A: 用于记录本也在一段时间内被访问的次数, 或记录本页最近已有多长时间未被访问.
修改位M: 标识该页在调入内存后是否被修改过.
外存地址: 用于指出该页在外存的地址.
缺页中断机构
每当要访问的页面再也不内存时, 便产生依次缺页中断, 请求OS将所缺之页调入内存.
- 指令在执行期间产生和处理中断信号
- 一条指令在执行期间可能产生屡次缺页中断
地址变换结构

内存分配
最小物理块数
最小物理块数能保证进程正常运行, 它取决于指令的格式, 功能和寻址方式.
内存分配策略
内存在进行分配时能够采起固定分配和可变分配.
- 固定分配, 为每一个进程分配一组固定数目的物理块, 在进程运行期间不可更改.
- 可变分配, 为每一个进程分配必定数目的物理块, 在进程运行期间能够更改.
页面置换时能够采起全局置换和局部置换.
- 全局置换, 若是进程在运行期间返现缺页, 则将OS所保留的空间物理块取出一块分配给该进程, 或者以全部进程的所有物理块为标的, 选择一块换出, 而后将所缺之页调入.
- 局部置换, 若是进程在运行中发现缺页, 则只能从分配给该进程的n个页面中选出一页换出, 而后在调入一页, 以保证分配给该进程的内存空间不变.
经过以上能够组合一下三种策略:
- 固定分配局部置换
为每一个进程分配多少物理块是根据进程类型(交互型或批处理型)或根据程序员的建议来肯定.
- 可变分配全局置换
凡是产生缺页的物理块, 都将得到新的物理块.
- 可变分配全局置换
为每一个进程分配必定数目的物理块, 但当某进程发现缺页时, 只容许从该进程在内存的页面中选择一页换出.
物理块分配算法
- 平均分配算法. 将系统中全部可供分配的物理块平均分配给各个进程.
- 按比例分配算法. 根据进程大小按比例分配物理.假设系统中有n个进程, 每一个进程页面数为, 则系统中页面数总和为
. 物理总块数为m, 则每一个进程能分到的物理块数为
.
- 考虑优先权的分配算法. 一部分按比例分配, 一部分根据进程的优先权分配
页面置换算法
最佳置换算法(Optimal)
OPT算法淘汰之后不使用或者在最长(将来)时间内再也不被访问的页面
最佳置换算法有最好的性能当没法实现, 一般用它做为标准评价其余算法
先进先出置换算法(First In First Out)
淘汰最早进入内存的页面, 即在内存中驻留时间最久的页面.
最久未使用置换算法(Least Recently Used)
淘汰最近最久未使用的页面
最少使用置换算法*(Least Frequently Used)
淘汰最近时期使用最少的页面.
LFU算法的页面访问图和LRU算法的页面访问图彻底相同
时钟置换算法(Clock)
为每页设置一位访问位, 再将内存中的全部页面都经过连接指针连接成一个循环队列. 当某页被访问时, 其访问位被置1. 置换算法在选择一页淘汰时, 只需检查页的访问位. 若是是0, 就选择该页换出; 若为1, 则从新将它置0, 暂不换出; 再按照FIFO算法检查下一个页面. 当检查到队列中的最后一个页面时, 若其访问位仍为1, 则再返回到队首去检查第一个页面.


改进Clock算法
淘汰的页面便是未使用过的页面, 又是未被修改过的页面.
由访问位A和修改位M能够组合成下面四种类型的页面:
- 1类(A=0, M=0): 表示该页最近既未被访问, 又未被修改, 是最佳淘汰页.
- 2类(A=0, M=1):表示该页最近未被访问, 但已被修改, 并非很好的淘汰页.
- 3类(A=1, M=0):最近已被访问, 但未被修改, 该页有可能再被访问.
- 4类(A=1, M=1):最近已被访问且被修改, 该页可能再被访问.
其执行过程分为如下三步:
- 从指针所指当前位置开始, 扫描循环队列, 寻找A=0且M=0的页面, 将遇到的第一个页面做为淘汰页. 在第一次扫描期间不改变访问位A.
- 若是第一步失败, 即查找一轮后未遇到的第一类页面, 则开始第二轮扫描, 寻找A=0且M=1的页面, 将所遇到的第一个这类页面做为淘汰页. 在第二轮扫描期间, 将全部扫描过的页面的访问位置都置0.
- 第二步也失败, 亦即未找到第二类页面, 则将指针返回到开始的位置, 并将全部的访问位复0. 而后重复第一步. 若果仍失败, 必要时重复第二步, 此时就必定能找到被淘汰的页.
改进的Clock算法可减小磁盘的I/O操做次数, 可是系统开销会增长.
抖动
抖动现象: 在系统中的进程太多, 须要频繁的进行进程的对换操做, 以致于占用太多时间, 从而处理机的利用率降低并趋于0的状况, 咱们称之为抖动. 一般用工做集来避免抖动
工做集是在某段时间内, 进程实际索要访问的页面集合. 咱们将这些页面又称为活跃页面.
预防抖动的方法
- 采起局部置换策略
- 工做集算法融入处理机调度
- 调节缺页率
- 暂停进程
请求分段存储管理方式
请求段表
段名 |
段长 |
段基址 |
存取方式 |
访问字段A |
修改位M |
存在位P |
增补位 |
外存始址 |
分为段名, 段长, 段基地址, 存取方式, 访问字段A, 修改位M, 存在位P, 增补位, 外存地址
- 存取方式, 该字段为两位, 可执行(00), 可读(01), 可写(11)
- 访问字段A, 记录该段的访问次数
- 修改位M, 表示该页调入内存后是否已被修改过
- 存在位P, 指示本段是否已调入内存
- 增补位, 特有字段, 表示本段在运行过程当中是否作过动态增加.
- 外存始址, 指示本段在外存中的起始地址, 即起始盘块号.
缺段中断机构

地址变换机构
