知识回顾
练习
习题一
内容:
某页式虚拟存储管理系统中,页面大小为1KB。给某一进程分配的内存块数为3 ,并按下列地址顺序引用内存单元:
3635、3632、1140、3584、2892、3640、0040、2148、1700、2145、3209、0000、1102、1100。
如果上述数字均为十进制数,而内存中尚未装入任何页。
(1) 给出使用LRU算法时的缺页次数。
(2)用流程图的方式解释地址变换的过程。(缺页时只需指出产生缺页中断以请求调页,具体的中断处理流程不需画出)
解答
(1)根据题意,页面的引用次序为3、3、1、3、2、3、0、2、1、2、3、0、1、1,则根据LRU算法依次访问各页,各内存块中的页面置换情况为(加粗页面表示刚调入内存):
访问页面 | 3 | 3 | 1 | 3 | 2 | 3 | 0 | 2 | 1 | 2 | 3 | 0 | 1 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
内存块1 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 0 | 0 | 0 |
内存块2 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 3 | 3 | 3 | 3 | ||
内存块3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 1 | ||||
是否缺页 | ✔ | ❌ | ✔ | ❌ | ✔ | ❌ | ✔ | ❌ | ✔ | ❌ | ✔ | ✔ | ✔ | ❌ |
故可以看出,LRU算法时的缺页次数为8次。
PS:解题过程中需要进行淘汰页面的选择时,可以通过逆向检查此时在内存中的几个页面号,在逆向扫描过程中最后一个出现的页面就是要淘汰的页面。
例如此时分析到需要页面0,而此时内存已满,需要选一个页面淘汰,进行页面置换:那此时内存中的页面是3、1、2,然后逆向扫描之前访问的页面,三个页面当中1是最早访问的,也是最近最久未使用的页面,故将页面1淘汰,将需要的页面0调入。
页面置换之后:
其他分析过程类似。
(2)假设没有快表机构,其地址变换过程为:
习题二
题目内容:
在一个请求分页系统中,假定分配给一个进程的物理块数为3,并且此进程的页面走向为2、3、2、1、5、2、4、5、3、2、5、2。
试用FIFO、LRU和OPT三种算法分别计算出在访问过程所发生的缺页次数。
解答:
FIFO算法:优先淘汰最早进入内存的页面,可以把进入内存的页面根据调入顺序形成一个队列,需要置换页面时将队列头淘汰
访问页面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
内存块1 | 2 | 3 | 2 | 2 | ||||||||
内存块2 | 3 | 3 | 3 | |||||||||
内存块3 | 1 | |||||||||||
是否缺页 | ✔ | ✔ | ✔ |
所以把2淘汰,页面5调入:
访问页面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
内存块1 | 2 | 3 | 2 | 2 | 5 | |||||||
内存块2 | 3 | 3 | 3 | 3 | ||||||||
内存块3 | 1 | 1 | ||||||||||
是否缺页 | ✔ | ✔ | ✔ | ✔ |
此时应该淘汰页面3,调入2:
访问页面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
内存块1 | 2 | 3 | 2 | 2 | 5 | 5 | ||||||
内存块2 | 3 | 3 | 3 | 3 | 2 | |||||||
内存块3 | 1 | 1 | 1 | |||||||||
是否缺页 | ✔ | ✔ | ✔ | ✔ | ✔ |
分析过程就是这样,所以最后的结果:
访问页面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
内存块1 | 2 | 3 | 2 | 2 | 5 | 5 | 5 | 5 | 3 | 3 | 3 | 3 |
内存块2 | 3 | 3 | 3 | 3 | 2 | 2 | 2 | 2 | 2 | 5 | 5 | |
内存块3 | 1 | 1 | 1 | 4 | 4 | 4 | 4 | 4 | 2 | |||
是否缺页 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
故使用FIFO算法在访问过程中所发生的缺页次数为9次。
LRU算法:
访问页面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
内存块1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 |
内存块2 | 3 | 3 | 3 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | |
内存块3 | 1 | 1 | 1 | 4 | 4 | 4 | 2 | 2 | 2 | |||
是否缺页 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
故使用LRU算法在访问过程中所发生的缺页次数为7次。
OPT算法:
访问页面 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
内存块1 | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 4 | 4 | 2 | 2 | 2 |
内存块2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | |
内存块3 | 1 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | |||
是否缺页 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
(倒数第三列,后面只会用到页面5,所以既可以用4号,也可以用3号页面进行替换,置换为页面2。)
故可以看出,使用OPT算法在访问过程中所发生的缺页次数为6次。
PS:OPT算法淘汰那些永不使用,或者在最长时间内不再被访问的页面(预知未来),所以在选择淘汰哪个页面时,和LRU算法刚好相反,可以使用前向扫描方法,在前向扫描过程中最后一个出现的页面就是要淘汰的页面。
比如此时内存已满,存放了2、3、1号页面,要将5号页面置换进来,淘汰页面可以从当前页面开始前向扫描,发现1是后面不会在访问的(1号是永不再使用的),所以淘汰1。
替换之后,变为:
个人理解,有误请指正~