离散存储主要包括分页存储和分段存储两种。
一。分页存储管理:
页面:系统把进程划分为与帧(存储块)大小相等的块,成为页面(这样就可以让一个页存入一个帧中)。
#1数据结构:
1.位示图:记录系统中帧的使用情况。
2.页表(PT)(放在系统区)
页表:
页号帧号 权限(读写)
比如,系统规定页面的长度为1024个字节,则页内地址可用10个二进制位表示(1024=210)表示。若机器的地址码是16位二进制数时,其中高6位代表页号,低10位代表页内地址。
这样的地址结构,允许一个进程的页面总数达64页。(页号占6位,2的6次方为64)
#2.地址重定位过程:
逻辑地址构成 <页号,偏移>
从页表寄存器中找到页表的起始地址从而找到页表,根据页表中的页号找到对应的帧号,帧号,偏移分别作为物理地址的高位和低位共同形成物理地址。
页内偏移 与 帧内偏移应该是一样的。
从此过程中可见读取内存中的一个操作数,需要访问两次内存(页表寄存器+操作数)
#3.页面分配与回收:
(1)计算请求者需要的总帧数N。(所需内存空间大小/帧的大小)
(2)查位图,若找不到足够的空闲帧,编制“分配失败”报告返回。
(3)索取一个空闲页表PT。
(4)从位图中找出N个为0位,计算出对应的帧号,填入PT。
(5)将这些位改为1。(修改位示图中的对应位,使用为1,不使用为0)
(6)将PT起始地址填入进程的PCB中。
(7)结束。
#4.内存共享:
可重入技术 。。。。
分页管理总结:
逻辑地址 物理地址
一维、二维 二维、一维
(1) 提取逻辑地址中的“段号”。
(2) 比较段号与STLR的段长度。如果超出段表长度,则返回“内存定位错误”,终止进程的运行。
(3) 从STBR中给出的段表首址开始,以段号为索引查找该进程对应的段表,得到欲访问段的首地址。
(4) 取出欲访问段的首地址,加上逻辑地址中的偏移量得到物理地址。
#3.内存共享与保护:
分段管理模式下的信息保护分两级。第一级是防止进程发生超出存储空间的访问,第二级是阻止进程超出访问权限的读写。
三。段页式管理:
(在段内分页)
系统为一个含有多分段的进程分配内存时,首先为这些分段建立段表,将各段长度填入表中。接下来为每个段分配地址空间。在这种系统中,各分段有一个页表,其首地址存放在段表中。
地址重定位过程:
逻辑地址 形式:<段号,页号,偏移>(段内偏移分为页号和偏移两个)
根据段表控制寄存器找到对应段号,根据段号找到页号,根据页号找到帧号,帧号加偏移形成物理地址。
四。关于快表的地址重定位过程:
逻辑地址<页号,偏移>
(1)硬件逻辑中,将逻辑地址中的页号P送入高速缓存,与其中的所有页号进行比较。找到相匹配的页号后,读出该页面对应的帧号,送物理地址寄存器,与偏移量W共同合成一个访问内存的物理地址。
(2)若高速缓存内找不到相匹配的页号,表示欲访问的页号不在快表中。系统需要再访问内存中的页表。找到该页的帧号,送物理地址寄存器与偏移量W共同合成访问内存的物理地址。同时,将该页及帧号复制到快表中。此时,如果高速缓存已没有空闲位置,应找到一个最不常用的页表项淘汰掉,换入新的页表项。
t1为访问一次快表的时间,t2为一次内存访问时间:
t = t1+ t2
t = t1+ 2t2