総合カタログを確認する
02325 「コンピュータシステムアーキテクチャ」自己検討検討要点リスト
第4章 ストレージシステム
1. ページテーブルのアドレスマッピング
歴史試験の質問:
タイトル説明: ページテーブルメソッドマッピングテーブルとページサイズに従って、仮想アドレスに対応する実アドレスを計算します。
宿題演習 4-4
仮想メモリは合計8ページ、各ページは1024ワード、実主メモリは4096ワードで構成されており、アドレスマッピングにはページテーブル方式が採用されています。マッピングテーブルの内容は以下のとおりです。
(1) ページ障害の原因となるすべての仮想ページ番号をリストします;
(2) 次の仮想アドレスに従ってメイン メモリの実アドレスを計算します: 0、3728、1023、1024、2055、7800、4096、6800。
実際のページ番号 | ロードビット |
---|---|
3 | 1 |
1 | 1 |
2 | 0 |
3 | 0 |
2 | 1 |
1 | 0 |
0 | 1 |
0 | 0 |
解決策:
(1) タイトルで指定されたマッピング テーブルに仮想ページ番号、つまり 0 から 7 の順に追加します。
仮想ページ番号 | 実際のページ番号 | ロードビット |
---|---|---|
0 | 3 | 1 |
1 | 1 | 1 |
2 | 2 | 0 |
3 | 3 | 0 |
4 | 2 | 1 |
5 | 1 | 0 |
6 | 0 | 1 |
7 | 0 | 0 |
ページ障害の仮想ページ番号は、ロードビットが0、つまり2、3、5、7の仮想ページ番号である。
(2) 仮想アドレスからメインメモリの実アドレスを計算するテーブルを描く
仮想アドレス | 仮想ページ番号 | ページシフト | ロードビット | 実際のページ番号 | ページシフト | 実際の住所 |
---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 3 | 0 | 3072 |
3728 | 3 | 656 | 0 | ページの失敗 | なし | |
1023 | 0 | 1023 | 1 | 3 | 1023 | 4095 |
1024 | 1 | 0 | 1 | 1 | 0 | 1024 |
2055年 | 2 | 7 | 0 | ページの失敗 | なし | |
7800 | 7 | 632 | 0 | ページの失敗 | なし | |
4096 | 4 | 0 | 1 | 2 | 0 | 2048年 |
6800 | 6 | 656 | 1 | 0 | 656 | 656 |
仮想アドレス ÷ ページ サイズ = 仮想ページ番号 ⋯ ⋯ ページ ディスプレイスメント 仮想アドレス\div ページ サイズ=仮想ページ番号\cdots\cdots ページ ディスプレイスメント仮想アドレス÷ページサイズ=仮想ページ番号⋯⋯ページ内の変位
の商が仮想ページ番号、余りがページ内の変位で、ページ サイズはタイトルに示されているページあたり 1024 ワードです。
ロードビットと実ページ番号は、異なる仮想ページ番号の対応する値に従って、最初の質問の表に従って入力されます。2
つのページのディスプレイスメントは同じで、ページ内の追加のディスプレイスメントが書き込まれます。実アドレスの計算を容易にするために、実ページ番号の右側に
アドレス = 実ページ番号 × ページ サイズ + ページ ディスプレイスメント 実アドレス = 実ページ番号\×ページ サイズ + ページ ディスプレイスメント実際の住所=実際のページ番号×ページサイズ+ページシフト
2. 页面替换算法:FIFO、LRU
历史考题:2019.04 (FIFO)、2018.10 (FIFO)
题目描述:根据页地址流画出 FIFO、LRU 替换算法的页号变化过程,标命中时刻,计算命中率。
课后习题 4-7 FIFO
有一个虚拟存储器,主存有 0~3 四页位置,程序有 0~7 八个虚页,采用全相连映像和 FIFO 替换算法。给出如下程序页地址流:2, 3, 5, 2, 4, 0, 1, 2, 4, 6。
(1)假设程序的 2, 3, 5 页已先后装入主存的第 3, 2, 0 页位置,请画出上述页地址流工作过程中,主存各页位置上所装程序各页页号的变化过程图,标出命中时刻;
(2)求出此期间虚存总的命中率 H H H。
页面替换理解:
主存有 4 页空间,程序有 8 种页号,这里把页号当做一条指令,如果主存中有需要运行的指令,就代表了命中;而主存中没有就需要把这个指令存到主存中的空位里,如果已经没有空位了就要替换掉已经存在里面的指令。替换算法就是为了提高命中率,相当于提高效率。
简单介绍一下不同的页面替换算法:
(1)随机算法(Random,RAND):生成随机数选择被替换的页号,不考;
(2)先进先出算法(First-In First-Out,FIFO):最早装入主存的页作为被替换页;
(3)近期最少使用算法(Least Recently Used,LRU):近期最少访问的页作为被替换页;
(4)优化替换算法(Optimal,OPT):一种理想化的算法,它是根据程序未来的地址流来选择替换哪一页的,选择未来最晚被用到的页被替换,举个例子:现在主存里面存了 1, 2, 3, 4 而且存满了,后面来的地址流是 1, 1, 5, 3, 4, 6, 1,根据未来的地址流 2 是最晚被用到的(这里是未来直接不用了),因此要发生替换时优先替换 2。这种替换方式可以让命中率最大化,用来评价其它可实现的替换算法的好坏。
解:
(1)
主存页 面位置 |
初始 状态 |
页地址流 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
2 | 3 | 5 | 2 | 4 | 0 | 1 | 2 | 4 | 6 | ||
0 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5* | 2 | 2 | 2 |
1 | 4 | 4 | 4 | 4* | 4* | 6 | |||||
2 | 3 | 3 | 3 | 3 | 3 | 3 | 3* | 1 | 1 | 1 | 1 |
3 | 2 | 2 | 2 | 2 | 2 | 2* | 0 | 0 | 0 | 0 | 0 |
命中 | H | H | H | H | H |
表格解释:
1)程序的 2, 3, 5 页已先后装入主存的第 3, 2, 0 页位置对应 初始状态;
2)前四个页地址流在主存中本身就有,命中;
3)4 号进来主存中没有,而主存的 1 号页空着,直接存进去;此时已经存满了,而最先存入主存的是 2,因此加个星号,代表后面会替换它;
4)0 号进来主存中没有且主存已满,发生替换,替换的是 2;此刻最先存入主存的是 3,以此类推。
(2)命中率就是 10 个地址命中了 5 次 H = 5 / 10 = 50 % H=5/10=50\% H=5/10=50%
课后习题 4-11 FIFO
考虑一个 920 个字的程序,其访问虚存的地址流为 20, 22, 208, 214, 146, 618, 370, 490, 492, 868, 916, 728。
(1)若页面大小为 200 字,主存容量为 400 字,采用 FIFO 替换算法,请按访存的各个时刻,写出其虚页地址流,计算主存的命中率;
(2)若页面大小改为 100 字,再做一遍;
(3)若页面大小改为 400 字,再做一遍;
(4)由前三问的结果可得出什么结论?
(5)若把主存容量增加到 800 字,按第(1)小题再做一遍,又可以得到什么结论?
解:
本题的区别在于题目给出的是 虚存的地址流 和 页面大小,而不是 4-7 中的 程序页地址流。这里把虚存的地址流看作虚地址,程序页地址流看作虚页号,按照 4-4 中的公式,虚地址除以页面大小的商就是虚页号。主存容量除以页面大小就是 4-7 中的主存空间页数。
这里把 1、2、3、5 的结果画在一起:
虚地址 | 20 | 22 | 208 | 214 | 146 | 618 | 370 | 490 | 492 | 868 | 916 | 728 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
虚页地址 | 0 | 0 | 1 | 1 | 0 | 3 | 1 | 2 | 2 | 4 | 4 | 3 | |
主存 400 页面 200 n=2 |
0 | 0 | 0* | 0* | 0* | 3 | 3 | 3* | 3* | 4 | 4 | 4* | |
1 | 1 | 1 | 1* | 1* | 2 | 2 | 2* | 2* | 3 | 命中率 | |||
H | H | H | H | H | H | 6/12=0.5 | |||||||
虚地址 | 20 | 22 | 208 | 214 | 146 | 618 | 370 | 490 | 492 | 868 | 916 | 728 | |
虚页地址 | 0 | 0 | 2 | 2 | 1 | 6 | 3 | 4 | 4 | 8 | 9 | 7 | |
主存 400 页面 100 n=4 |
0 | 0 | 0 | 0 | 0 | 0* | 3 | 3 | 3 | 3 | 3* | 7 | |
2 | 2 | 2 | 2 | 2* | 4 | 4 | 4 | 4 | 4 | ||||
1 | 1 | 1 | 1* | 1* | 8 | 8 | 8 | ||||||
6 | 6 | 6 | 6 | 6* | 9 | 9 | 命中率 | ||||||
H | H | H | 3/12=0.25 | ||||||||||
虚地址 | 20 | 22 | 208 | 214 | 146 | 618 | 370 | 490 | 492 | 868 | 916 | 728 | |
虚页地址 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 2 | 2 | 1 | |
主存 400 页面 400 n=1 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 2 | 2 | 1 | 命中率 |
H | H | H | H | H | H | 6/12=0.5 | |||||||
虚地址 | 20 | 22 | 208 | 214 | 146 | 618 | 370 | 490 | 492 | 868 | 916 | 728 | |
虚页地址 | 0 | 0 | 1 | 1 | 0 | 3 | 1 | 2 | 2 | 4 | 4 | 3 | |
主存 800 页面 200 n=4 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0* | 0* | 4 | 4 | 4 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1* | 1* | 1* | ||||
3 | 3 | 3 | 3 | 3 | 3 | 3 | |||||||
2 | 2 | 2 | 2 | 2 | 命中率 | ||||||||
H | H | H | H | H | H | H | 7/12=0.58 |
(4)从前三问的结果可以看出,在分配给程序的实存容量一定(400 字)的条件下,页面大小 S P S_P SP 过小时,命中率 H H H 较低;页面大小增大后,两个地址在同页内的机会增大,使命中率 H H H 有所上升;由于指令之间因远距离的跳转引起命中率 H H H 下降的因素不起主要作用,还未出现随页面大小增大,而使命中率 H H H 下降的情况。如果页地址流有大量的远距离转移,随页面大小增大,因在主存中的页面数过少,而导致出现虚存页面被轮流替换出去的 “颠簸” 现象时,命中率 H H H 反而会下降。
(5)可以看出,分配给程序的实存容量增大后,命中率将会有所上升。不过,命中率的提高已不显著了。如果在增大容量,可以推断出命中率的上升就会渐趋平缓了。
3. 页面替换算法:堆栈模拟
历史考题:2017.10
题目描述:堆栈模拟处理过程图
课后习题 4-8
采用 LRU 替换算法的页式虚拟存储器共有 9 页空间准备分配给 A、B 两道程序。已知 B 道程序若给其分配 4 页时,命中率为 8/15;而若分配 5 页时,命中率可达 10/15。现给出 A 道程序的页地址流的 2, 3, 2, 1, 5, 2, 4, 5, 3, 2, 5, 2, 1, 4, 5。
(1)画出用堆栈对 A 道程序页地址流的模拟处理过程图,统计给其分配 4 页和 5 页时的命中率;
(2)根据已知条件和上述统计结果,给 A、B 两道程序各分配多少实页,可使系统效率最高?
解:
堆栈模拟其实是模拟的压栈过程,个人把它类比成堆叠书籍,如下表:2 先放桌上,3 来了叠在 2 上面,2 又来了就抽出来放在 3 上面,后面都是一样的过程。n=4 的时候就是只看堆栈内容的前 4 行,最后一行的代表被替代了,这也就符合 LRU 的规则,因为如果最近被用到过肯定是叠在上面的,最下面的就被替代了。
页地址流 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 | 1 | 4 | 5 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
堆栈内容 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 | 1 | 4 | 5 | ||
2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 | 1 | 4 | ||||
3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 3 | 5 | 2 | 1 | ||||||
3 | 3 | 1 | 1 | 2 | 4 | 4 | 4 | 3 | 5 | 2 | |||||||
3 | 3 | 1 | 1 | 1 | 1 | 4 | 3 | 3 | 命中率 | ||||||||
命中 情况 |
n=4 | H | H | H | H | H | H | H | 7/15 | ||||||||
n=5 | H | H | H | H | H | H | H | H | H | H | 10/15 |
(2)因为一共就 9 页这里的分配方法就是 A4 B5 或者 A5 B4 两种,A 的命中率算出来了,B 的命中率是题目给的,那么 A4 B5 的命中率是 ( 7 / 15 + 10 / 15 ) / 2 = 8.5 / 15 (7/15+10/15)/2=8.5/15 (7/15+10/15)/2=8.5/15,A5 B4 的命中率是 ( 10 / 15 + 8 / 15 ) / 2 = 9 / 15 (10/15+8/15)/2=9/15 (10/15+8/15)/2=9/15,后面一种系统效率高。
4. Cache 组相联映像
历史考题:2021.10、2019.10、2017.10、2016.10
题目描述:画主存、Cache 地址字段对应关系图和空间块的映像对应关系图
课后习题 4-14 LRU
有一个 Cache 存储器。主存共分 8 个块 (0~7),Cache 为 4 个块 (0~3),采用组相联映像,组内块数为 2 块,替换算法为 LRU。
(1)画出主存、Cache 地址的各字段对应关系图(标出位数);
(2)画出主存、Cache 空间块的映像对应关系示意图;
(3)对于如下主存块地址流:1, 2, 4, 1, 3, 7, 0, 1, 2, 5, 4, 6, 4, 7, 2,如主存中内容一开始未装入 Cache 中,请列出 Cache 中各块随时间的使用状况;
(4)对于(3),指出块失效又发生块争用的时刻;
(5)对于(3),求出此期间 Cache 之命中率。
相关概念:
之前页面替换算法的题目是把 虚存 的地址存到 主存 时发生替换,这里是把 主存 的地址存到 高速缓存 Cache 时发生替换,替换方法并没有区别,但是地址映像之前是 全相连映像,这里是 组相联映像。
全相连映像:主存中任意一块都可映像装入到 Cache 中任意一块位置;就像之前的题目一样,每个虚地址都可以存到主存的任意一页中,没有限制。
直接映像:主存空间按 Cache 大小等分成区,每个区内的个块只能按位置一一对应到 Cache 的相应块位置上;举例说明比较直接:主存有 0~7 共 8 个块,Cache 有 0~3 共4 个块,那么主存的 0、4 只能存到 Cache 的 0:
( 0 , 4 ) → 0 (0,4)\to0 (0,4)→0
( 1 , 5 ) → 1 (1,5)\to1 (1,5)→1
( 2 , 6 ) → 2 (2,6)\to2 (2,6)→2
( 3 , 7 ) → 3 (3,7)\to3 (3,7)→3
组相联映像:Cache 分成若干组,主存按 Cache 分区,每个区也按 Cache 的样子分组,然后组和组之间直接映像,组和组内部的块相联映像;具体看本题答案可以直观理解。
解:
(2)先看第二问
Cache 4 块,每组 2 块 即分成 2 组;主存 8 块,即 2 区 2 组 2 块。组间直接映像,即 0 组对应 0 组,1 组对应 1 组;组内相联映像,即组内块和块可以随意存放。
(1)各字段对应关系图
根据(2)的结果,可以知道主存是 2 区 2 组 2 块,所以都用 1 个二进制位就能表示;Cache 就是比主存少个区号,别的都一样。有些题目还会给出每块的大小,可以标出块内地址的位数。
(3)根据映像关系 Cache 的 0, 1 只能存主存的 0, 1, 4, 5;Cache 的 2, 3 只能存主存的 2, 3, 6, 7;然后就和页面替换算法的题一样了。
这里就用到 LRU 替换算法了,近期最少访问的页作为被替换页;见表格 t=3 时,4 进来 0 组存满了,此时 4 刚用过,1 为最久没用过的所以 1 标记星号,当 t=4 时,又用到了 1,所以改为 4 标记星号。
时间t | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
主存块地址 | 1 | 2 | 4 | 1 | 3 | 7 | 0 | 1 | 2 | 5 | 4 | 6 | 4 | 7 | 2 | |
Cache 块 | 0 | 1 | 1 | 1* | 1 | 1 | 1 | 1* | 1 | 1 | 1* | 4 | 4 | 4 | 4 | 4 |
1 | 4 | 4* | 4* | 4* | 0 | 0* | 0* | 5 | 5* | 5* | 5* | 5* | 5* | |||
2 | 2 | 2 | 2 | 2* | 7 | 7 | 7 | 7* | 7* | 7* | 6 | 6 | 6* | 2 | ||
3 | 3 | 3* | 3* | 3* | 2 | 2 | 2 | 2* | 2* | 7 | 7* | |||||
命中情况 | 失 | 失 | 失 | H | 失 | 替 | 替 | H | 替 | 替 | 替 | 替 | H | 替 | 替 |
(4)块失效又发生块争用的时刻:6, 7, 9, 10, 11, 12, 14, 15(发生替换的时刻)
(5)命中率: H c = 3 / 15 = 0.2 H_c=3/15=0.2 Hc=3/15=0.2
5. 存储体系性能参数
历史考题:2020.10
题目描述:计算存储系统平均访问时间、访问效率、加速比。
2020.10 真题
有一个由 Cache 和主存组成的两级存储系统:主存的容量为 100MB,访问时间为 200ns,主存每 MB 的价格为 1 元;Cache 的容量为 4MB,访问时间为 10ns,Cache 每 MB 的价格为 50元。该系统运行某程序,在一段时间内,访问 Cache 的次数为 1980 次,访问主存的次数为 20 次。要求:
(1)计算该存储系统每 MB 的平均价格。
(2)计算系统运行该程序时 Cache 的命中率。
(3)计算该存储系统的平均访问时间。
(4)计算该存储系统的访问效率。
解:
(1) 100 × 1 + 4 × 50 100 + 4 ≈ 2.88 \frac{100\times 1+4\times 50}{100+4}\approx 2.88 100+4100×1+4×50≈2.88
(2) 1980 1980 + 20 = 99 % \frac{1980}{1980+20}=99\% 1980+201980=99%
(3) 20 × 200 + 1980 × 10 2000 = 11.9 n s \frac{20\times 200+1980\times10}{2000}=11.9\ \mathrm{ns} 200020×200+1980×10=11.9 ns
补充:标准公式是 T A = H T c + ( 1 − H ) T m \mathrm{T_A=HT_c+(1-H)T_m} TA=HTc+(1−H)Tm,有时题目会给命中率(访问 Cache 代表命中),也要会用这个公式算,原理是一样的。
(4)访问效率 e = T c / T a = 10 / 11.9 ≈ 84 % \mathrm{e=T_c/T_a=10/11.9\approx 84\%} e=Tc/Ta=10/11.9≈84%
稍微记一下公式,其实 T c \mathrm{T_c} Tc 也就意味着全部命中的平均时间,也就是最理想的时间,用他除以实际的平均时间自然可以代表效率;有的题是算关于加速比的 s = T m / T a \mathrm{s=T_m/T_a} s=Tm/Ta,也就是最慢时间除以实际平均时间。