-
2020-07-03 23:28:19
今天看到一个关于分页系统中页表项的计算问题。首先要了解页表项是由【页号】【页框号】组成,因为是分页系统每一个页面大小都是一样的所以可以根据逻辑地址的大小推算出【页号】,也就是说页表项中的【页号】可以省略。
下边给出一个例子:
一个32位系统分页系统,页面大小为4KB,则100MB的进程其页表大小为多少,占多少个页面存储页表?
【页面大小】为4KB,既212B 也就是说占了12个bit , 进而可以计算出【页号】为220B 即占了20个bit,因为逻辑地址是由【页号】【页内偏移量】(页面大小)组成,【页框号】(物理块号)232 /212=220 ,也占了20个bit ,一般情况下在题目中都会给出【页框号】占多大的位置,但是这个没有给出,我们其实可以大概的估算一下,就是就【页号】+【页框号】的占了多少bit,即20+20=40bit (8bit 比特= 1Byte 字节) 40/8=5字节,如果把【页号】省略掉也就是只算【页框号】占的字节数 ,即20/8=2…4 也就是3字节(因为2个字节没有办法存储20位)。
但是这个题计算的时候用的【页表项】大小并不是3字节和5字节,而是4字节。(具体为什么我个人认为是32位系统默认就是按照4字节来计算,没有特别要求的话)
下边我们来计算一下这个题
1、100MB的进程占用页表项数 = 100MB/4KB=100 x 28 项
每一个页表项大小是4B,则所占页表大小=100*28 *4B=100KB
2、一个页面可以存储的大小=(212B /4B )x 4KB =2MB,其中212B /4B算出的是页表项的个数
100MB/2MB = 50页这个题是次要的主要是上边对页表项大小的计算问题的分析。
萌新博主,还有些不适应这个编辑方式还有语言表达不知道是否清晰,如有问题大家可以提出来,望大家见谅。更多相关内容 -
逻辑地址、物理地址、页、页框(帧)、页框号
2020-11-12 11:39:42物理地址=页框号+偏移量(页框长度),所以用内存大小/页框大小可获得页框号,即为22位页框号 d.逻辑地址中有多少页就有多少页表项,216 项 e.页表项内存放的是页框号和标志位,当标志位为1位,则页表项为22+1=23位 ...
采用分页存储时,进程、内存会被分成多个大小相同的页面
进程中每个页面被称为页
内存中每个页面被称为页框
逻辑地址=页号+偏移量
物理地址=页框号+偏移量(页框长度)
页框大小=页大小a.逻辑地址空间包含216 页,所以用页大小210 乘以逻辑地址空间大小,可以获得逻辑地址位数。26位
b.页框有210 字节
c.物理地址=页框号+偏移量(页框长度),所以用内存大小/页框大小可获得页框号,即为22位页框号
d.逻辑地址中有多少页就有多少页表项,216 项
e.页表项内存放的是页框号和标志位,当标志位为1位,则页表项为22+1=23位
-
虚拟内存、虚拟地址-页-页号、物理地址-页框-页框号
2021-04-16 11:11:39 -
内存管理之:页和页框&地址变换结构
2018-03-19 15:01:131、页和页框的区别 划重点::逻辑地址空间分为若干页;物理内存空间分为若干页框(也叫作块) 页 分页存储管理是将作业的逻辑地址划分为一系列同等大小的部分,称为页。 并为各页加以编号,每个作业的...一、基本概念
1、页和页框的区别
划重点::逻辑地址空间分为若干页;物理内存空间分为若干页框(也叫作块)
页
分页存储管理是将作业的逻辑地址划分为一系列同等大小的部分,称为页。
并为各页加以编号,每个作业的页的编号都是从0开始的。页框
与之类似,把可用的物理内存也划分为同样大小的连续的部分,称为块或页框。同样为块也进行标号,从0#开始。
在为进程分配内存空间时,以页为单位,每个内存中的块存放一页用户作业。只要内存中有足够多的块,这些块可以相邻也可以不相邻,就可以存放整个作业了。页面的大小对于内存利用和系统开销来说非常重要,页面太大,在作业的最后一页必然会剩余较大不能利用的空间–内碎片。页面太小,虽然可以减小内碎片的大小,但是一个作业的页太多,会使得作业页表太长而占用内存,同时系统频繁地进行页面转化,加重系统开销。
因此,页面的大小应该适中,通常为512B - 8KB,windows系统的页面大小为4KB。
2、地址结构
分页系统中的地址结构由两部分组成,页号和页内偏移量。
可以解释为一个二元组(p,w),其中p是页号,w是页面p中的偏移量或者相对于p页开始的位置。
下图(a) 中的地址长度为32位,其中0 - 9位为页内偏移量,每页的大小为2的10次方 = 1k;10 - 31位为页号,共计2的22次方 = 4M页。在图(b)中,地址长度同样为32位,其中0 - 11位页内偏移量,每页的大小为2的12次方 = 4k;12 - 31位为页号,共计2的20次方 = 1M页,由此可知不同的系统页的大小是不一样的。
图(a)页面大小为1KB(2的10次方)
图(b)页面大小为4KB(2的12次方)对于特定的机器来说,其地址结构是一定的。
若给定逻辑地址A,页面大小为L,则页号p和页内偏移量w分别为
p = INT [A/L]
w = [A]MODL
例如:系统的页面大小事1K,设A = 3096,则由上式得出 p =3,w =24
3、页表(在MMU中)
在分页存储管理中,页的存放可以是连续的,也可以是不连续的,这就增加了逻辑地址到物理地址转换的难度。如何在内存中找到页所对应的物理块是地址转换的关键。
为此,系统为每个进程创建了一个页表。在进程逻辑地址空间中的每一页,依次在页表中有一个表项,记录了该页对应的物理块号。如下图所示
在配置了页表之后,通过查找页表就可以很容易地找到该页在内存中的位置。页表具有逻辑地址到物理地址映射的作用。
对于页的保护通常设置一个存取控制字段。当这个字段占一位时,用于规定该页中的内容允许写还是读;如果存取控制字段占两位,那么它可以表示存取控制为读写、只读和只运行三种。当进程写一个只读页时,系统就会通过中断来报错。
二、 地址变换结构
为了实现分页管理逻辑地址到物理地址的转换,系统中必须设置地址变换机构,用来实现地址映射。由于页的大小和块的大小是一样的,当把进程的某一页放入内存时,该页内地址的页偏移量和块内偏移量是一致的,因此地址转换时就不必考虑偏移量,只考虑逻辑页号和实际物理号的对应即可。页表中存放的就是页号和其对应的物理块号(即物理页框号),所以地址变换就要借助页表来完成。
1、 基本地址变换
地址变换的第一步就是检索页表。
为了实现快速的检索页表,最好把页表放在寄存器中,每一个表项都用一个寄存器。但是有一个问题,通常计算机中的寄存器都不多,而页表可能非常大,现代计算机的虚拟地址至少是32位的,比如,页的大小为4KB,那么32位的地址空间将有1M个页面,64位的地址空间则更多。虚拟空间中的1M个页面需要1M个表项。并且,每个进程都有自己的页表。
因此,页表通常存放在内存中。在系统中只设置一个页表寄存器,其中存放页表的开始地址和页表长度。平时进程未执行时,页表的开始地址和页表的长度放在PCB中,当进程运行时,把这两个数据装入页表寄存器中。当进程要访问某个地址中的数据时,地址变换机构首先自动地将地址转换成页号和页内偏移量,然后根据页号来检索页表。在检索之前要判断页号是否大于等于页表长度,如果页号大于等于页表长度,说明超出了有效地址范围,于是产生一个错误中断。否则,把页号和页表项长度相乘得到的结果与页表开始地址相加,就得到了该页表项在页表中的地址,从而找到对应的物理块号,把物理块号装入物理地址寄存器中,同时把页内偏移量送入物理地址寄存器对应的块内偏移量中,由此得到真正的物理地址。
由于页表是放在内存中的,那么一次数据访问需要两次访问内存,第一次访问页表,找到对应的物理号,然后与偏移量拼接形成物理地址;第二次从第一次得到的物理地址结构中访问数据。
页表遇到的问题:系统的运行速度一般都受到CPU从内存中取得指令和数据的速率的限制,一次数据两次访问内存会使计算机的处理速度降低50%。如何有效的解决这个问题?
采取的解决方法是:
快表:TLB
快表解决了两次访问内存的问题,降低系统的开销
- 在地址变换结构中增加一个具有并行查找能力的特殊的高速缓冲寄存器,这种设备称为转换检测缓冲区,又称为快表,用于存放当前访问过的页表项。此时,当给出一个有效地址时,地址变换机构首先通过将该页号p同TLB中的所有表项同时进行比较,判断该表是否在其中,如果发现可匹配的页面,则直接取出其页表项得到物理块号,而不必通过页表。如果地址变换机构没有可匹配的项,就进行正常的页表查询。首先从TLB中淘汰一个表项,然后用新找到的页表项替换它。这样,如果这一页很快再次被访问,那么第二次自然将会命中。
因为寄存器的价格原因,快表的结构不可能很大,通常能存放16 - 512个页表项,这对中小型作业来说,有可能把全部页表放入快表中,对于大型作业,可以将常用的页表项放入其中。由于程序的局部性原则,快表的引入极大改善了系统的效率,数据显示,从快表中查找到页表项的概率可以达到90%。这样因为访问快表而访问内存的次数就会大大减少,从而降低系统的开销。
2、 多级页表
现代的计算机都有非常大的逻辑地址空间,以32位计算机为例,假设页的大小为4KB,那么一个作业的页最多可以达到2的20次方个,这意味着该作业的页表现为2的20次方。假设一个页表现占用一个字节,那么该页表的大小为2的20次方B,即需要1MB的内存空间。并且要求者1MB的内存空间是连续的。这显然是不现实的,
解决需要大容量页表的最好方法是:把页表页看成普通的文件,对它进行离散分配,即对页表再分页,由此形成多级页表的思想。
以二级页表为例,将页表进行分页后,离散的存放在不同的物理块中,这样,对这些离散分配的页表再建立页表,即二级页表。在下图中,32位的虚地址划分成10位的外层页表域,10位的内层页表域和12位的页内偏移量。
32位逻辑地址空间使用两级页表映射到32位物理地址空间,每个页面大小为4KB。一级页表的开始物理地址被存放在页表基址寄存器中,一级地址映射使用逻辑地址的最高10位来索引,并产生第二级页表的物理地址。下面10位用来索引第二级页表,产生出的物理页的地址和逻辑地址的最低12位相结合以生成物理地址。如果某二级页表中没有实际映射,就可将其删除并在顶级页表中标记为不可用。许多分页方案在构造的时候都使各级页表的大小和页的大小一致,这样存储它们占用的空间可以和进程使用的内存页使用相同的分配方案。
对于32位的机器,采用二级页表是合适的;但对于64位的机器,采用二级页表是不合适的,因此必须采用多级页表。分页存储管理方式虽然可以解决程序和数据无需连续存储空间的问题,但是这种内存管理方式依然要求整个作业都要装入内存运行,既没有解决大作业小内存的问题,此外,该种管理方式纯粹从存储的角度去考虑,没有考虑到程序本身的存储问题。
说明总结:单页时,由于页表项是连续的(对应着物理地址空间),造成必须占用一整块连续地址空间,是不可取的,所以采用多页表(主要是二级页表),但造成整个逻辑块被分散。
3、基本分段分配方式
分页存储管可以实现内存利用率的提高,但是分页的纯物理解决方案,一个逻辑段被离散的放在很多个物理块中。很多时候,程序员希望把一个程序按照它的逻辑结构存放在内存中。
一个程序的逻辑段在程序运行过程中有的大小会发生变化,如数据段和堆栈;而有的逻辑段的大小在运行过程中不发生变化,如代码段。在分页存储管理方式中,对于随时动态增长的段的存储管理是非常困难的,一旦断的增长涉及重新分配物理块,那么就涉及页表的修改等问题。
一个具有n个过程的程序,在分页存储管理中,过程被一个一个紧紧地放在一起,中间没有间隙,结果是修改一个过程的大小会影响其他进程的起始地址,进而又需要修改所有调用被移动进程的进程,以使它们的访问指向这些过程的新地址。在一个有数百个过程的程序中,这个操作的开销是相当大的。
在分页存储管理中,一个逻辑段可能存放在n个物理块中,如果几个程序共享这个逻辑段就需要在每个程序的页表中添加n项,以便实现地址转换。这样势必会增加页表的大小,进而增加系统的开销,对于逻辑页的保护也是同样的道理。针对这些问题,一个非常通用的办法是为一个程序提供多个相互独立的称为段的地址空间。
每个段由一个从0到最大的线性地址序列构成。各个段的长度可以是0到某个允许的最大值之间的一个值。不同段的长度可以不同,而且通常也不同。段的长度在运行期间可以改变,堆栈段的长度在数据被压入时会增长。在数据被弹出时又会减小。
因为每个段都是一个独立的空间,它们可以独立地增长或减小而不会影响到其他的段。段是一个逻辑实体,一个段可能包括一个过程,一个数组,一个堆栈,一组数值变量,但一般它不会同时包含多种不同类型的内容。分段分配方式实现段长度的扩充,段的动态链接以及段的保护和共享都比页式存储容易实现。3.1 、段表
在分段存储管理中,逻辑地址结构是二维的,即段号和段内偏移量。如下图所示。在该地址结构中,允许一个作业最长有64K个段,每个段的最大长度为64KB。
在分段分配方式中,系统为每个分段分配一个连续的分区,进程中的各个段可以离散地装入内存中的不同分区中。为了实现逻辑地址到物理地址的转换,在系统中为每个进程建立一张段表。每个段在段表中都占有一个表项,其中记录了该段的起始地址和段的地址,如图所示,段表可以存放在一组寄存器中,这样有助于提高地址转换速度;但更常见的是放在内存中。在配置了段表之后,执行中的进程可以通过查找段表找到每个段所对应的内存区。
3.2、 采用大小不等的段,逻辑地址和物理地址之间不再是简单的对应关系。
考虑一个 n+m 位的地址,左边的n位为段号,右边的m位为段内地址。当进程进入运行状态时,它的段表地址被装入到段表寄存器中。
-
段、页、页框、页表、页表项
2020-05-05 15:01:14段、页、页框、页表、页表项分页式虚拟内存:页、页框、页表、页表项段页式虚拟内存...页框号: 页的大小=页框大小(进程中的块和内存中的块大小相同) 页放入页框中的(进程的某一块放入内存中的某一个块中)(... -
linux内核页框管理的实现
2017-04-11 22:18:44一、页框描述 二、页框组织 三、空闲页框的组织 四、页框的分配与释放 五、每CPU页框高速缓存 六、页框分配数据结构关系图 七、页框分配时,node和zone的选择 -
Linux页框管理
2012-01-30 10:46:59在前面的博文里,我们讲解了基于80x86体系的Linux内核分段和分页机制,并详细地讨论了Linux的...内核必须记录每个页框的当前状态,例如,区分哪些页框包含的是属于进程的页,而哪些页框包含的是内核代码或内核数据。内 -
页式管理--物理地址计算问题小结
2016-10-04 19:47:05页式存储,物理地址计算,页框号计算,页表项地址推算 -
页框,页表,页表项,页面大小,页表项 长度的理解
2022-04-29 10:46:551.页框(物理块):将内存空间分成一个个大小相等的分区(页框号或物理块号从0开始)。 2.页(页面):将用户进程的地址空间分为与页框大小相等的一个个区域(页号一般也从0开始)。 因为要将进程中的页分别装入多... -
页框page
2017-06-13 20:00:36物理内存被划分成固定大小的块,称为页框 内核以页框为基本单位管理物理内存。 内核为每个页框都建立了一个page结构,...从线性地址空间角度,所有page结构都依页框号依次存放在vmemmap开始的地方 在2.6的内核版本中, -
页 页表 页表项
2016-04-26 21:11:56//操作系统和计算机组成原理里都讲到内存管理的页式管理,但是本人以及很多初次学习分页的时候,都会迷茫页表大小和页表项大小之间的关系,本人仔细分析了后写了这篇blog,仅当学习交流,个人理解之用,如果有错或者... -
操作系统:求解页式存储管理物理地址
2021-12-03 16:26:01物理地址=块号*块长(等于页面大小)+页内地址 逻辑地址=页号+页内地址 二:逻辑地址转换为物理地址 1:十进制逻辑地址转物理地址 步骤如下: (1)求逻辑地址的页号 =逻辑地址/页面大小(“/”表示整除... -
操作系统【四】分页存储管理
2020-05-11 11:21:20连续分配方式的缺点: 固定分区分配:缺乏灵活性,产生大量的内部碎片,内存的利用率较低 ...每一个页框有一个编号,叫做页框号/页帧号/内存块号/物理块号,从0开始 我们将用户进程的地址空间也... -
linux-----页、页表、页框(块)
2018-07-05 12:47:17linux-----页、页表、页框(块) -
页框管理
2014-03-07 10:57:46对内存的管理涉及两个部分: 对物理内存的管理对虚拟内存的管理 对物理内存的管理 是指对“RAM的管理”,对虚拟内存的管理 是指对进程地址空间的管理,...对于i386这种32位的处理器结构,Linux采用4KB页框大 -
分页存储逻辑地址转物理地址
2017-07-03 09:34:24在存储管理中分为连续存储和非连续存储,非连续存储又分为分页存储、分段存储和段页式存储。 分页存储逻辑地址转物理地址:例如:已知某个分页系统,页面大小为1K(即1024字节),某一个作业有4个页面,分别... -
基本分页存储管理的基本概念
2019-10-18 07:50:29(2)“页框号、页帧号、内存块号、物理块号”和“页号、页面号” 分页存储管理的基本概念: 注:页框的页框号是从0开始的。页号也是从0开始的。页的大小除了最后一个其他的都和页框的大小相等。页框是对内存... -
前端页面弹出框展示详情
2020-07-04 10:15:49第一种方法:在控制层查询到数据返回给页面,在页面上写js触发弹出层。 css: <style> .compareDiv { padding: 5px; position:absolute; width: 450px; /*display:none;*/ z-index:100;...% -
彻底解决微软EDGE浏览器新建标签页后出现Bing搜索框
2021-03-12 10:55:34最近彻底不能接受的是,每次点击edge浏览器的+号,打开新的标签页的时候就会出现bing的搜索框,很难受,想要改变。 --------------------------------------解决方法---------------------------------------------... -
操作系统学习笔记(二十四)~页框分配和颠簸+内核内存分配+虚拟内存中的其他考虑
2020-04-26 11:34:489.4 页框分配和颠簸 1、系统"抖动"现象的发生可能是由()引起。A A.置换算法选择不当 B.交换的信息量过大 C.内存容量充足 D.请求页式管理方案 2、允许进程在所有的页框中选择一个替换页面,而不管该页框是否已分配... -
内存管理(一)页框管理概论
2013-10-25 10:48:13在RAM管理这一节,我们主要讲解页框管理和内存区管理,分别介绍对连续物理内存处理的两种不同技术。而“非连续内存区管理”分别介绍处理非连续内存区的第三种技术。内存管理这个系列,我们将讲到“内存管理区、内核... -
TLB的理解
2016-10-02 22:30:14正常来说,一个页表项分为两个部分,高位部分是虚页号,低位部分是对应的物理页号,有时也叫它页框号。而TLB主要是针对这个虚页号做文章,而页框号反正都是一样的,因此可以类比为Cache中的页内寻址。 对了,TLB的... -
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2021-01-12 11:13:39本篇文章主要介绍了js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示,具有一定的参考价值,有兴趣的同学可以了解一下。题目中问题一拆为二:1.文字在超出长度时,如何实现用省略号代替?2.超长长度的文字在省略... -
北航操作系统课程-第五次作业-虚拟内存管理-页面置换
2020-03-26 03:17:59虚拟地址格式: 10位 10位 12位 页目录号 二级页表号 页内偏移量 页目录项、页表项格式: 20位 11位 1位 物理页框号 其他页面标志 页面有效标志 请问进程整个的地址空间有多少字节?一页有多少字节? 如果当前进程... -
2013年页表408大题
2020-06-26 20:59:24某计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4B。 1.若使用一级页表的分页存储管理方式,逻辑地址结构为 ... 页目录号(10位) 页表索引(10位) 页 -
虚拟地址空间 及 页表 详解
2019-05-06 13:24:03内存描述符的 pgd 域指向的就是进程的页全局目录。 由于几乎每次对虚拟内存中的页面访问都必须先解析它,从而得到物理内存中的对应地址,所以页表操作的性能非常关键。因此多数体系结构都实现了一个翻译后缓冲器 ... -
bootstrap 同一个页面实现2个模态框,一个可以正常显示、一个不能
2018-11-28 09:44:531、当一个页面中只存在一个模态框时,大家可以使用菜鸟教程中的例子 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Bootstrap 实例 - 模态框(Modal)插件</...