存储器的功能是保存数据,存储器的发展方向是高速、大容量和小体积
重定位:实现逻辑地址(相对地址)到物理地址(绝对地址)的映射
编辑----编译----链接----装入----运行
绝对装入
可重定位装入
动态运行时装入
静态链接
装入时动态链接
运行时动态链接
将内存划分成若干个连续区域,称为分区。每个分区只能存储一个程序,而且程序也只能在它所驻留的分区中运行。有n个分区,则可同时装入n个作业/任务。
内存不预先划分好,当作业装入时,根据作业的需求和内存空间的使用情况决定是否分配。若有足够的空间,则按需分割一部分分区给该进程。
数据结构:
分配算法:
内存回收:
连续式分配中,总量大于作业大小的多个小分区不能容纳作业
紧凑:
连续分配引起碎片问题
碎片问题的解决方案:紧凑方式消耗系统开销
离散分配:分页、分段、段页
分页:将用户程序地址分为若干个大小固定的区域,也就是页
页面和物理块:逻辑空间和内存空间
页面大小 :
地址结构:
逻辑地址A;页大小L;页内偏移d,则页号P和页内地址d:
\[
P=INT\left [ \frac{A}{L} \right ]
\]
\[ d=\left [ A \right ]\% L \]
例:系统页面大小为1kb,A=2170B,P=2,d=122
基本任务:逻辑地址——物理地址的映射
基本地址变换机构:
需要考虑的问题:
页表放在哪里?整个系统的页表空间有多大?
直接映像的分页系统对系统效能的不利影响?(影响执行速度,因为CPU至少要访问两次主存才能存取到所要数据)
基本的地址变换机构
①页表驻留在内存中
②系统中设置一个页表寄存器存放页表在内存中的始址和页表的长度
③缺点:两次访问主存,速度降低近1/2
假设访问一次内存时间为t
\[
EAT=t+t=2t
\]
快表:
减少一次内存访问
假设命中率为a,查找快表需要时间为λ,访问一次内存时间为t
\[
EAT=a\times λ+(1-a)\times (t+λ)+t=2t+λ-t\times a
\]
按程序的逻辑结构,将程序的地址空间划分为若干段,各段大小可不相同。在进行存储分配时,以段为单位,这些段在内存中可以不相邻接。
每个段有其逻辑意义和功能,便于
分段地址结构
段表
地址变换
分页和分段的主要区别
段式管理的优缺点
优点:
缺点:
将用户程序分成诺干段,把每个段分成若干页
采用段页式存储管理,在CPU中应设置段表控制寄存器
地址变换过程
段页式存储管理中,访问快表失败时,每访问一条指令或存取一个操作数都要3次访问主存
常规存储器管理方式的特征
局部性原理
虚拟存储器
虚存的实现方式:
请求分页系统
请求分段系统
虚存特征:
需要:请求页表机制,缺页中断机制,地址变换机制
请求页表机制
状态位指示是否已调入内存
缺页中断机制
每当所访问的页面不存在时,便产生一缺页中断,请求OS将所缺页调入内存
地址变换机制
最小物理块数:能保证进程正常运行所需的最小
内存分配策略:
物理块分配算法:
平均分配
按进程大小比例分配:
n个进程,页面数为Si,总页面数为S,总物理块m,分配到物理块bi=
\[
b_{i}=\frac{S_{i}}{S}m
\]
优先权:一部分按比例,一部分考虑优先权
页面调入策略:
调入时机:
从何处调页:
页面调入过程:
访问页面状态位为0,向CPU发出缺页中断,中断程序先保留CPU环境,查找页表找到该页所在的外存物理块,若此时能容纳新页面,则启动磁盘I/O,调入内存,修改页表;若已满,则按照置换算法,选一页换出,如果该页修改位为0,则不必写回磁盘,繁殖则写回磁盘。再调入所缺页,并写入快表。最后利用修改后的页表访问数据物理地址,再访问数据
缺页率:进程逻辑空间为n页,系统分配物理块数m,访问页面成功的次数为S,失败的次数为F,A=S+F,缺页率f=
\[
f= \frac{F}{A}
\]
先进先出(FIFO):淘汰最先进入内存的页面
最佳(Optimal):淘汰最长(未来)时间内不再被访问的页面
最近最久未使用(LRU):
须为每个在内存中的页面配置一个移位寄存器:R=Rn-1Rn-2...R1R0,访问某物理块时将相应寄存器的Rn-1位置1,定时信号每个一段时间寄存器右移1位,具有最小数值的寄存器就是LRU
然后再用栈保存当前页面:
Clock置换算法:
为每页设置一位访问位,将内存中所有页面通过指针链接成一个循环队列,被访问时访问位置1
淘汰时:访问位是0,则换出;访问位是1,则置0,给予页面第二次驻留内存的机会,再按照FIFO检查下一个页面
改进Clock:对于修改过的页面,换出时所付出的开销更大
访问位A,修改位M:A=0,M=0:未被访问,未被修改,最佳淘汰页
被访问页在内存中,且在快表中
内存访问有效时间EAT=查找快表时间λ+访问实际物理地址时间t
\[
EAT=λ+t
\]
被访问页在内存中,不在快表中
查找快表+查找页表+修改快表+访问实际物理地址
\[
EAT=λ+t+λ+t
\]
不在内存
查找快表+查找页表+缺页中断处理时间ε+修改快表+访问实际物理地址
\[
EAT=λ+t+ ε+λ+t =ε+2(λ+t)
\]
考虑到命中率a,缺页率f:
\[
EAT=λ+a\times t + (1-a)\times [t+f\times(ε+λ+t)+(1-f)\times (λ+t)]
\]
仅考虑缺页率,λ=0,a=0
\[
EAT=t+f\times(ε+t)+(1-f)\times t
\]
CPU利用率与多道程序度的关系:多道程序度指在内存中并发执行的程序数目。在低度情况下,CPU利用率呈线性变化关系。随着度的上升,CPU利用率也逐渐上升,最终上升到一个最大值,若在这种情况下,进一步增加度,则系统发生抖动,且CPU利用率将迅速恶化.
原文:https://www.cnblogs.com/zhxmdefj/p/12088988.html