龙空技术网

分页_分段_设备_IO_索引_位示图---软考高级系统架构师007

一只爱笑的程序猿 270

前言:

现在各位老铁们对“页面置换算法代码格式输出”大致比较看重,同学们都需要分析一些“页面置换算法代码格式输出”的相关知识。那么小编也在网上搜集了一些关于“页面置换算法代码格式输出””的相关资讯,希望各位老铁们能喜欢,朋友们一起来了解一下吧!

​编辑

​编辑

存储管理可以分为固定存储管理和分页存储管理。

现在固定存储管理已经不用也不考,但要知道因为固定存储管理指的是整存整取

也就是把一整个程序,比如说10G的游戏全部都存到内存里

这样的话是非常占用内存的,这个固定存储管理现在已经不用了。

然后这里我们主要看分页存储管:

1.分页存储管理,首先我们要知道什么是分页?这里的页也就是逻辑页。

也就是说,分页存储管理把进程也就是程序运行所需要的内存,分成一个个的页,

比如一个进程它的大小是1G,那么我们就可以把这1G分成1024乘以1024 kb,这么多个逻辑页,然后在实际的物理内存中我们也分出来,这么多的页,这样,逻辑页,就跟实际的

物理的页号就可以一一对应了,这样再运行的时候,就可以需要哪个页的内存,就加载哪个

页的内存,这样,就不用把所有程序都加载以后再运行程序了.

这里逻辑分页叫做逻辑页,而物理分页后的页,叫页框,或者叫做物理块号

--------------------------

那么这里的考点就是:怎么计算,逻辑页 和 物理页框的对应关系.

这个分页存储基于的是局部性原理,空间局部性原理 和 时间局部性原理.

​编辑

首先我们要明白什么是,逻辑页:

可以看到它由页号和页内地址组成,可以看到,比如我们有1GB的话,那么我们就有

1024 * 1024 KB对吧,也就是我们有1024* 1024个页,然后每个页,有1K个Byte字节对吧

所以可以看到,我们通过页号,和页内地址就可以确认一个逻辑地址了.

要注意这里,每个页号和业内地址,不一定是32位的,这个要看怎么划分的,但是不管怎么划分,高位,

肯定是页号,然后地位是页内地址对吧.

​编辑

然后我们继续来看这个,逻辑页地址和物理地址的转换关系,可以看到非常简单:

首先要明确的是,因为逻辑地址和物理地址是一一对应的,所以逻辑页的,页内地址可以看到和

物理地址的值是一样的,然后,页号不一样对吧,页号有个映射表,通过映射表,查找得到

对应的物理块号就可以了.

可以看到上面这个就是 15 256对吧,对应的物理块号是15,对应的物理地址是256对吧.

​编辑

​编辑

1.首先要明白为什么会有页面置换算法呢?首先我们上面已经说了,程序在执行的时候,会把程序用到的内存,首先进行分页对吧,分成逻辑页,而对应的物理内存,也会分页,物理页框对吧,然后,当我们的

物业页框已经都被程序占用满了以后呢?怎么弄?这个时候如果我们想要再去运行其他的程序的话,那么我们就需要把长时间不用的物理内存页给换下来,把不用的内存,换成有用的内存,因为我们知道,

程序在运行的时候,往往有些内存是很久都不会再用了,但是呢,没有被及时的释放,所以这个页面置换算法,就是把长时间没有用的内存置换出来,供需要的程序使用.

2.这些页面置换算法中:最常用的是:

​编辑

5.这个最近最少使用LRU算法使用的多,在进程执行过程中,过去一段时间,最少使用的页面被置换淘汰.这个是根据局部性原理的,就是空间局部性原理就是,假设空间上经常使用的内存相邻的内存还会被经常使用,时间局部性原理就是:假设时间上最近被使用的内存还会重复被使用.

3.还要知道这里的最优算法OPT是没有被使用的,它是个理想算法,是程序执行完以后,再去分析,显然马后炮算法了,但是它可以,在程序执行完以后,找到最长时间没有被访问的页面,显然这种算法,最精准但是没什么用,仅仅是用来,跟其他算法做对比用的,看看其他算法跟这个最优算法有多少差距.

4.FIFO先进先出算法,这个算法就是说,先调入内存的页被先置换淘汰,这样是有问题的,因为先进去的内存,有可能是经常访问的,后进去的也不一定就是用的多的,所以这种方式,经常有抖动现象,效率低,缺页率高.

5.然后再来看一下页表和快表,首先看什么是页表:

页表,上面我们已经说了,指的是我们说的程序的逻辑页 然后 物理内存上有页框,那么整个存储,

逻辑页和物理页框之间的映射关系的表,就是页表,然后什么是快表呢?

这里要注意:

页表:首先要知道页表是存储的程序逻辑页和物理页框的映射关系的一个表,他是存储在内存中的,那么,如果要访问程序的内存,那么就要怎么样?就需要两次读取了对吧,首先去内存中找到对应的页表,

然后根据页表找到对应的,物理内存的页框,然后再找对对应的物理地址,这个是需要访问两次内存的,

所以速度上就慢一些.

然后什么是快表呢?:

注意快表也是页表对吧,他也是存了程序的逻辑页和物理页框的对应关系,但是快表是存在cache中的对吧,我们说,cache比内存要快10倍,所以,当要访问程序的内存的时候,如果首先去cache中查询快表,通过快表再找到对应的物理页框,然后再去访问内存,这样的话,就相当于访问了一次内存对吧,速度要快了很多.

-----------所以页表和快表,区别就是页表访问两次内存,快表访问一次内存速度更快------------

​编辑

我们来看这个题目,可以看到,这里看看怎么解题:

​编辑

来看着这个题目,首先这里,进程A的逻辑地址是1111对吧,这个是十进制的,

然后,我们看到物理页的大小是512字节,所以,我们可以尝试这样:

把1111 = 512 * 2 + 87 = 1024 + 87 对吧

这里我们就可以看到了,这里,这个地址应该是放到第2号内存页的对吧,第0,1,2第2号物理页框对吧

因为一共是1111,那么两个512,不够,还需要额外的87,所以,就是第0 , 1 , 2 第下标是2的逻辑页中

对吧.因为注意这里1111,是逻辑地址.

所以这里解题的方法就是,如果你遇到10进制的话,你就可以把地址:转换成页的大小* 几,+ 几

这里的* 几,就是对应的页框的下标对吧.如果这里用的是逻辑地址,那么对应的页,就是逻辑页,

所以这里就是第下标为2的逻辑页,那么通过,页表查询,可以看到

逻辑页对应的物理页框号是4对吧.

所以第一问选择C 4

然后第二问就很简单了,所进程A的逻辑4 和 进程B的逻辑5 共享物理页8 ,所以

对应的进程A的逻辑4 和 进程B的逻辑5 对应的物理页都应该填写8对吧

答案是:D

​编辑

看这个题目,可以看到有4个页,一个是用来存储程序的,然后3个空着的,

那么如果是按行存放的话,

矩阵A[100][100]总共有100行、100列,若矩阵A按行序存放,那么每一个页面可以存放2行,也就是说矩阵的2行刚好放在1页内,访问它们需要中断1次,这样100行总共需要中断50次。

若矩阵A按列序存放,那么每一个页面可以存放2列,也就是说矩阵的2列刚好放在1页内,由于内循环“FORj:=l to 100

DO”是按列序变化,访问它们需要中断50次,这样100行总共需要中断50X100次。

这里要知道,按行1行,100个数据,一页放200个,所以,每200个就要中断一次,10000个数据

就是10000 / 200 = 50 次,

如果按列存放的话,那么,两列是一页数据,2列就是200个数据对吧,所以,

每读取2列数据,就要中断一次,所以就是,每行100个数据中断100 /2 = 50次

那么有100行,就是100 * 50 = 5000次中断.

就这样理解吧,不太好理解.

​编辑

这里再说一下,如果我们按列存放,那么,一页可以存放2列数据,对吧,

我们的数据是,1,2,3,4...这样的,但是按列存放的话就是,第一页,存放两列数据,

也就是会存放1,2 这两个数据,然后第二页,存放 3,4 这两列对吧...

以此类推,第50页,存放99,100 对吧,所以这样的话,每一行数据的读取,就要读取

50个页,也就是中断50次,而有100行,所以就是50 * 100 = 5000 中断5000次对吧

这样就说明白了.

​编辑

​编辑

然后我们再来看这个什么是内存的分段存储,可以看到,这里

内存分段,需要知道每个段他的物理大小不同,因为分段是按照逻辑整体划分的,其实就是按照一个软件的功能划分的,因为功能不一样,所以段的大小不一样,用的内存不一样对吧.

那么怎么找一个段的地址呢,怎么确定呢?

首先要知道一个段存的时候,存了段号 和 段内地址

然后通过段号,去一个段表里面去查询,根据段号,就能在段表中找到,这个段,对应的,段长是多少,

以及这个段的基地址是多少,也就是,比如第1号段,段长100,基地址是200,那么第2段的内存就是

从200 到300这个范围对吧,要知道段内地址跟物理地址也是一样的.

​编辑 这个题目比较简单,可以看到

给出的选项是0 是段号,然后后面790 是 从基地址开始的,段内地址,可以看到D选项

第0号段,段内地址810,已经超过800段长了.

然后再看第二问:

这里自然就选择C了.

​编辑

​编辑

1.可以看到,这里

IO请求,然后层次,这里层次要记住,会考,中间那3个过程,往往,删除几个问你是啥

2.要知道这个过程:

1.当用户程序试图读取一个硬盘文件时:

首先需要操作系统实现这一操作。首先 与设备无关软件 这个软件去检查过高速缓存中有无要读取的数据块。

2.若没有,则调用设备驱动程序。向io硬件发出请求。这个时用户进程阻塞并等待硬件磁盘读取文件操作完成。当磁盘读取操作完成时,磁盘硬件会产生一个中断。

3.然后转入中断处理程序,中断处理程序会检查中断的原因。中断处理程序检查到中断产生的原因是由于磁盘的读取操作已经完成。

5.这个时候就会唤醒用户进程,然后用户进程取回从磁盘中读取的信息。从而结束此次IO请求。

6.用户进程在得到了所需的硬盘文件的内容以后就可以进行后续的运行了。

​编辑

​编辑

文件的索引结构有三种:

1.直接索引,可以看到图中0~9就是直接索引。直接索引指的是每个索引节点存放的直接就是内容,假设每个物理盘块大小为4KB,那么0~9就这10个直接索引,就可以存储4 KB×10=40 KB的数据。

2.第二种索引文件结构是:一级间接索引节点,要理解一级间接索引节点,这里首先要知道物理盘块的大小,比如物理盘块大小为4 kb。可以看到上图,第10号就是一级间接索引节点。他所占用的大小就是一个物理盘块,比如说他的大小是4KB。如果每个地址对应的大小是4B,那么也就是说,这个一级间接索引节点,对应了1024个地址,那么这1024个地址,每个地址又对应一个物理盘块,因为我们知道每个物理盘块大小是4KB,所以说这个一级间接索引节点,对应的内存大小是1024*4 kb=4096 kb的数据。

3.然后再来看二级索引节,二级索引节点指向的是一级索引节点的地址,然后一级间接索引节点的地址再去对应物理盘块,所以说如果二级索引节点的大小是4 kb的话,假设一个物理地址是4B的话,那么这个二级索引节点,他就有1024个一级间接索引地址,然后这1024个一级间接索引地址,每一个一级索引地址,因为物理地址需要4B来存储,每个一级索引地址大小也是4KB的话,那么每个一级索引节点,也对应1024个,物理地址,也就是对应着1024个物理盘块,每个物理盘块存储的数据又是4KB,所以说这一个二级索引节点,最终对应的大小就是:(1024 * 1024 * 4)KB的大小。

​编辑

1.然后我们来看这个题目,可以看到这里.

这里索引地址项,这来要知道因为有直接索引所以这里这个iaddr1到iaddr7,标注的里面,50,67...

这个是物理索引号对吧,然后实际上逻辑索引号是从0对应50 1 对应67 ....这样对吧.

2.然后我们还需要明确这里物理索引块大小是1KB,每个索引地址项有4个字节,所以,这个物理索引块,就有1KB = 1024B / 4B = 256 个 索引地址项对吧.

3.然后我看第一题,说File1对应的逻辑号为5,和261的信息对应的物理块号是多少,那么,我们知道

逻辑号是从0,1,2,3...这样的对吧,所以上面,iaddr0到iaddr4都是直接索引,所以对应的逻辑号就是:

0,1,2,3,4...然后再看,iaddr5,iaddr6是一级间接索引对吧,那么首先看这个iaddr5,这个索引块,

大小是1KB对吧,他包含了,1KB / 4B = 256 个索引地址对吧,前5个,0,1,2,3,4 逻辑号都是直接索引,

从第6个开始,也就是逻辑号是5的时候,可以看到图中对应的物理块号是58对吧,这里是一级间接索引iaddr5对吧,这就找到了,逻辑号5对应的物理块号是58对吧,然后继续看,261,这个逻辑号对应的物理块号是多少呢?

这个,首先要知道,比如5,6,之间有2个数怎么算的? 6 - 5 +1 对吧,那么,我们知道,iaddr5,这个磁盘索引块有256个索引地址,那么这个256是怎么算的,首先我们知道了,iaddr5,这个逻辑块号的开始是5对吧,结束呢是多少? 也就是 256 = ? - 5 + 1 对吧,就得出,结束标志是: 260对吧,所以,那么逻辑号261,就对应,iaddr6,这个一级间接索引的,第一个索引号对吧,也就是:他对应的物理块号是187对吧.

所以第一题答案就是:C

然后看第二题,可以看到:101号物理块对应的,可以看到101,上面已经标注了是iaddr7对吧,这个对应的是二级地址索引表,这个题目中都给出答案了.

​编辑

文件目录这里就非常简单了,可以看到这里

这里要知道相对路径,绝对路径,全文件名就可以了

​编辑

​编辑

1.然后再来看这个位示图法:这个是用来表示文件存储器的使用情况的,比如一个文件如果是1000MB

然后一个物理块号是1MB的话,那么,就是有1000个物理块,来存储这个文件.

2.那么这个位示图呢,就有1000个bit,每个bit都对应一个物理块,这个物理块号从0开始,0,1,2,3...这样

然后比如这个位示图中的,1个位,是1的时候,表示某个物理块号在使用中,是0的时候,表示某个物理块号是空闲状态.

3.然后来看这个题目:已经说明了物理块号是从0,1,2,3...这个编号的,然后位示图字的编号也是0,1,2,3... 这里的字,注意其实就是对应着,第几个物理块号对吧.并且说明了,系统字长是32位,

这里要注意字长,实际上就可以认为是计算机是多少位的.

“一个字的位数,即字长,是计算机系统结构中的一个重要特性。字长在计算机结构和操作的多个方面均有体现,计算机中大多数寄存器的大小是一个字长。 计算机处理的典型数值也可能是以字长为单位。CPU和内存之间的数据传送单位也通常是一个字长,还有内存中用于指明一个存储位置的地址也经常是以字长为单位的

4.那么说16385号物理块对应的是位示图中的第几个字,要知道这里16385号物理块,其实是第

16386个物理块,对吧,因为是从0开始的,所以也就是求16386这个物理块号,对应的是多少字,那么

因为一个字是32位,而位示图,又是以位来存储的所以就是,16386 / 32 = 512 对吧.

5.然后第二问:如果磁盘容量是1000GB 那么位示图需要多少个字来存储,1000GB其实,

有多少物理块呢?因为一个物理块大小是4MB所以,1000GB / 4MB = 1024000MB / 4MB =

256000个物理块对吧,也就是256K个物理块,对吧,也就是对应256000个物理块号,那么一个

字可以表示32个物理块号,那么,就需要256000 / 32 = 8000个字对吧.

所以答案是C D

标签: #页面置换算法代码格式输出