Fork me on GitHub

存储管理

什么是虚拟存储器?

虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的,是在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大的多,可寻址的“主存储器”。

为什么要引入虚拟存储器?

1) 能提高操作系统的内存利用率和系统吞吐量
2) 在计算机系统中,主存的容量有一定的限制,不可能大大满足各种用户的需要,而在技术上辅助存储器却可以做的相当大。为了给大作业提供方便,使它们不再承担对主存和辅存的具体分配和管理工作,而由操作系统把主存和辅存统一管理起来。

虚拟存储器的特征?

虚拟存储器具有虚拟性、离散性、多次性及强对换性等特征,其中最重要的特征是虚拟性。
1> 虚拟性。虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际的内存容量,这是虚拟存储器所表现出的最重要的特征,也是虚拟存储器最重要的目标。
2> 离散性。离散性是指内存分配时采用离散分配的方式,没有离散性就不可能实现虚拟存储器。采用连续分配方式,需要将作业装入到连续的内存区域,这样需要连续地一次性申请一部分内存空间,以便将整个作业先后多次装入内存。如果仍然采用连续装入的方式,则无法实现虚拟存储功能,只有采用离散分配方式,才能为它申请内存空间,以避免浪费内存空间。
3> 多次性。多次性是指一个作业被分成多次调入内存运行。作业在运行时,只将当前运行的那部分程序和数据装入内存,以后再陆续从外存将需要的部分调入内存。
4> 对换性。对换性是指允许在作业运行过程中换进换出。允许将暂时不用的程序和数据从内存调至外存的对换区,以后需要时再从外存调入到内存。

设置你自己计算机上的虚存,并截图说明设置的过程

1、右键我的电脑, 选择属性
1
2、选择高级系统设置
2
3、选择高级, 点性能中的设置
3
4、选择高级, 选虚拟内存中的更改
4
5、选择自定义大小, 输入初始大小和最大值, 推荐设置自己内存大小的1.5~ 3倍, 在这输入2048, 点击设置, 根据提示选择确定。
5

虚存可以建立在分区分配管理的基础上吗?为什么?

不可以。在虚拟存储器中,允许将一个作业分多次调入内存。如果采用连续分配方式时,应将作业装入一个连续的内存区域中。为此,需事先为它一次性地申请足够的内存空间,以便将整个作业先后分多次装入内存,这不仅会使相当一部分内存空间都处于暂时或“永久”的空闲状态,造成内存资源的严重浪费,而且也无法从逻辑上扩大内存容量。因此,虚拟存储器的实现都是建立在离散分配存储管理方式的基础上。

页面置换算法的应用

题干:在请求分页存储管理系统中,若为进程分配的物理块为4,开始执行时内存中没有装入任何页面,若进程依次访问的页面号为:3,1,2,6,0,7,4,6,7,2,0,4,3,2,0,7,0,2,6,5,1,5,4,3,请按照下面的页面置换算法完成作业(低物理地址优先)
1、OPT页面置换算法
6

1
2
3
4
5
6
7
8
9
10
11
*为发生缺页中断
~为发生页面置换
页面被置换顺序 1 3 0 6 4 7 2 0 6
缺页率13/24
1234内存为空,页面不在内存中发生缺页
5 选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,页面1最长时间不被访问,因此被替换
6 同理,页面3最长时间不被访问被替换
7 同理,页面0最长时间不被访问被替换
8 同理,页面6最长时间不被访问被替换
9 同理,页面4最长时间不被访问被替换
10 页面0,2,6在后续的访问中没有出现以此按照内存块的顺序(从上往下)依次替换

2、FIFO页面置换算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
FIFO:(按顺序置换)
1)详细执行过程
1.刚开始内存并没有这个作业,所以发生缺页中断一次。页3进入内存。(1次缺页中断)
2.1进入内存,页1又不在内存,又发生缺页中断一次。(2次缺页中断)
3.2进入内存,页2又不在内存,缺页中断。(3次缺页中断)
4.6进入内存,页6又不在内存,发生缺页中断(内存中为3126)。 (4次缺页中断)
5.0进入内存,页0又不在内存,发生缺页中断(内存中为1260)。 (5次缺页中断)
6.7进入内存,页7又不在内存,发生缺页中断(内存中2607)(6次缺页中断)
7.4进入内存,页4又不在内存,发生缺页中断(内存中为6074)。 (7次缺页中断)
8.6在内存内不发生中断。
9.7在内存内不发生中断。
10.2进入内存,页2又不在内存,发生缺页中断(内存中为0742)。 (8次缺页中断)
11.0在内存内不发生中断
12.4在内存内不发生中断
13.3进入内存,页3又不在内存,发生缺页中断(内存中为7423)。 (9次缺页中断)
14.2在内存内不发生中断
15.0进入内存,页0又不在内存,发生缺页中断(内存中为4230)。 (10次缺页中断)
16.7进入内存,页7又不在内存,发生缺页中断(内存中为2307)。 (11次缺页中断)
17.0在内存内不发生中断。
18.2在内存内不发生中断。
19.6进入内存,页6又不在内存,发生缺页中断(内存中为3076)。 (12次缺页中断)
20.5进入内存,页5又不在内存,发生缺页中断(内存中为0765)。 (13次缺页中断)
21.1进入内存,页1又不在内存,发生缺页中断(内存中为7651)。 (14次缺页中断)
22.5在内存内不发生中断。
23.4进入内存,页4又不在内存,发生缺页中断(内存中6514)。 (15次缺页中断)
24.3进入内存,页3又不在内存,发生缺页中断(内存中为5143)。 (16次缺页中断)
2)缺页次数:16
3)缺页频率:66.7
4)置换次数:12
5)被置换出的页面依次为:3,1,2,6,0,7,4,2,3,0,7,6

3、LRU页面置换算法
7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
*为发缺页中断
11234内存为空,页面不在内存中发生缺页
5选择的被淘汰页面将是最近最久未使用的页面,页面3最长时间不被访问,因此被替换
6同理,页面1最长时间不被访问被替换
7 同理,页面2最长时间不被访问被替换
8 同理,页面0最长时间不被访问被替换
9 同理,页面4最长时间不被访问被替换
10 同理,页面6最长时间不被访问被替换
11 同理,页面7最长时间不被访问被替换
12 同理,页面4最长时间不被访问被替换
13 同理,页面3最长时间不被访问被替换
14 同理,页面7最长时间不被访问被替换
15 同理,页面0最长时间不被访问被替换
16 同理,页面2最长时间不被访问被替换
16 同理,页面6最长时间不被访问被替换
2)缺页次数:17
3)缺页频率:70.8%
4)置换次数:13
5)被置换出的页面依次为:3 1 2 0 4 6 7 4 3 7 0 2 6

4、CLOCK页面置换算法
8

1
2
3
4
5
6
7
8
9
10
11
12
13
红色代表访问位为1,星号表示替换指针的位置
缺页次数:15
缺页率:15/24=62.5
置换次数:11
依次被置换出的页号:3,1,2,6,7,4,3,2,0,7,6
语言描述:1:进程分配的物理块为4,开始执行时内存中没有装入任何页面,当访问3号页面是,内存中没有,则将页面直接调入内存,根据低物理地址优先,将页面存入第一个物理块,并把访问位置为1
2:访问1号页面时,内存中没有,且内存中还有空位,直接将1号页面放入内存即可,并把访问位置为1
3:当访问0号页面时,发现内存中没有,且内存中无空位,则需要替换掉一个页面。根据CLOCK置换算法找到需要替换的页面,为了避免“抖动”,因此访问指针从替换指针的下一位开始检查,首先检查3号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查1号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查2号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查6号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,这时检查到最后一位,发现访问位仍为1,则返回队首去检查第一个页面3,发现访问位为0,则选择此页面替换,且替换指针此时指向被替换的页面。
4:当访问7号页面时,发现内存中没有,且内存中无空位,则需要替换掉一个页面。根据CLOCK置换算法找到需要替换的页面,为了避免“抖动”,因此访问指针从替换指针的下一位开始检查,首先检查1号页面,访问位为0,则选择此页面替换,且替换指针此时指向被替换的页面。
5:当访问6号页面时,发现内存中存在,则将其访问位置为1,替换指针不动。
6:当访问2号页面时,发现内存中没有,且内存中无空位,则需要替换掉一个页面。根据CLOCK置换算法找到需要替换的页面,为了避免“抖动”,因此访问指针从替换指针的下一位开始检查,首先检查6号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查0号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查7号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查4号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查6号页面,发现访问位为0,则选择此页面替换,且替换指针此时指向被替换的页面。
7:当访问3号页面时,发现内存中没有,且内存中无空位,则需要替换掉一个页面。根据CLOCK置换算法找到需要替换的页面,为了避免“抖动”,因此访问指针从替换指针的下一位开始检查,首先检查0号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查7号页面,发现访问位为0,则选择此页面替换,且替换指针此时指向被替换的页面。
8:当访问7号页面时,发现内存中没有,且内存中无空位,则需要替换掉一个页面。根据CLOCK置换算法找到需要替换的页面,为了避免“抖动”,因此访问指针从替换指针的下一位开始检查,首先检查4号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查2号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查0号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查3号页面,访问位为1,将其重新置为0,暂不换出,给予该页第二次驻留内存的机会,继续检查4号页面,发现访问位为0,则选择此页面替换,且替换指针此时指向被替换的页面。

5、CLOCK页面置换算法 第5题中进程依次访问的页面号为:其它条件、要求与前面的题干一样7,1,6,4,6,2,3,0,3,1,0,7,6,0,1,3,6,3,0,7,2,0,5
9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
红色代表访问位为1,星号表示替换指针的位置
缺页次数: 14次
缺页率: 14/23=60.9%
置换次数: 10次
依次被置换的页号: 7 1 6 4 2 3 0 1 7 6
7号页面:进程分配的物理块为4,开始执行的时候没有装入任何页面,当开始访问7号页面的时候,内存中没有该页面号,将页面直接调入内存,低物理地址优先,将页面放入第一个物理块,把访问位置为1.
1、6、4号页面:访问1号页面的时候,内存中没有该页面号,且内存中还有空位,将1、6、4号页面放入内存,把访问位置为1,替换指针指向最高地址的物理块。
6号页面:访问6号页面的时候,内存中有,将其访问位置为1,替换指针不动。
2号页面:访问2号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查7号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查1号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查6号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查4号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会。检查到队列的最后一个页面时,访问位仍为1,返回队首检查第一个页面,发现访问位为0,则选择此页面替换,访问位置为1,替换指针指向被替换的页面。
3号页面:访问3号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查1号页面,访问位为0,选择此页面替换,访问位置为1,替换指针指向被替换的页面。
0号页面:访问0号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查6号页面,访问位为0,选择此页面替换,访问位置为1,替换指针指向被替换的页面。
3号页面:访问3号页面的时候,内存中有,将其访问位置为1,替换指针不动。
1号页面:访问1号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查4号页面,访问位为0,选择此页面替换,访问位置为1,替换指针指向被替换的页面。
0号页面:访问0号页面的时候,内存中有,将其访问位置为1,替换指针不动。
7号页面:访问7号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查2号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查3号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查9号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查1号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会。检查到队列的最后一个页面时,访问位仍为1,返回队首检查第一个页面,发现访问位为0,则选择此页面替换,访问位置为1,替换指针指向被替换的页面。
6号页面:访问6号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查3号页面,访问位为0,选择此页面替换,访问位置为1,替换指针指向被替换的页面。
0号页面:访问0号页面的时候,内存中有,将其访问位置为1,替换指针不动。
1号页面:访问1号页面的时候,内存中有,将其访问位置为1,替换指针不动。
3号页面:访问3号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查0号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查1号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查7号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查6号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会。检查到队列的最后一个页面时,访问位仍为1,返回队首检查第一个页面,发现访问位为0,则选择此页面替换,访问位置为1,替换指针指向被替换的页面。
6号页面:访问6号页面的时候,内存中有,将其访问位置为1,替换指针不动。
3号页面:访问3号页面的时候,内存中有,将其访问位置为1,替换指针不动。
0号页面:访问0号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查1号页面,访问位为0,选择此页面替换,访问位置为1,替换指针指向被替换的页面。
7号页面:访问7号页面的时候,内存中有,将其访问位置为1,替换指针不动。
2号页面:访问2号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查7号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查6号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查3号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会;检查0号页面,访问位为1,将其置为0,暂不换出,给予该页第二次驻留内存的机会。检查到队列的最后一个页面时,访问位仍为1,返回队首检查第一个页面,发现访问位为0,则选择此页面替换,访问位置为1,替换指针指向被替换的页面。
0号页面:访问0号页面的时候,内存中有,将其访问位置为1,替换指针不动。
5号页面:访问5号页面的时候,内存中没有,且内存中没有空位,需要替换掉一个页面。将内存中所有的页面链成一个循环队列,从替换指针的下一位开始检查。先检查6号页面,访问位为0,选择此页面替换,访问位置为1,替换指针指向被替换的页面。

Your support will encourage me to continue to create!