精华内容
下载资源
问答
  • 确定虚拟内存的页表大小
    千次阅读
    2020-12-30 21:34:41

    那么,如果问题只是“页面表的大小”?不管它是否适合物理记忆,可以计算出答案:

    第一物理记忆有512K页物理内存(512M / 1K)。这需要19位来表示每个页面。将它添加到4位的会计信息,你得到23位。

    现在虚拟内存。使用38位地址空间和10位(1K)页面大小,您的页面表中需要228个条目。

    因此,每页23位的228页表项为6,174,015,488位或736M。

    这是每个进程的单级VM子系统所需的最大大小。

    现在显然,如果你只有512M的物理RAM,这样你就可以选择几个选项,那就不行了。

    >可以减少物理页面的数量。例如,只允许一半的内存被分页,保持另一半驻留在所有时间。这将为每个条目节省一位,不够真实,无法改变。

    >如果可能,增加页面大小。 38位地址空间的1K页面是非常大的页面表的原因。例如,我认为’386,其32位地址空间,使用4K页。这将导致百万页表项,远低于此处所需的2.6亿页。

    >去多层次。更高级,但它基本上意味着页表本身可以进行分页。您必须保持第一级页面表驻留在物理内存中,但第二级可以根据需要进出。这将大大降低物理需求,但是以速度为代价,因为可能会发生两个级别的页面错误以获得实际的进程页面(一个用于辅助页面表,另一个用于进程页面)。

    我们再来看一下选项3。

    如果我们允许32M用于主分页表,并给每个条目4个字节(32位:只需23个,但是我们可以在这里进行总结),这将允许8,388,608页的辅助页表。

    由于这些次页面页面每个长度为1K(允许我们以每个4个字节的形式存储256个次页表项),因此可以共计2,147,483,648个虚拟页面。

    这将允许8,192个满载(即,使用其整个28位地址空间)进程并行运行,假设您有一大块磁盘空间来存储非驻留页面。

    现在显然,主分页表(和VM子系统,并且可能是OS的其余部分的一大块)必须始终保持驻留。您不能被允许打开一个主页面,因为您可能需要该页面才能将其重新插入:-)

    但是,对于主分页表来说,这是512M的只有32M的驻留费用,远远优于736M的(至少一个完全加载的进程)。

    更多相关内容
  • 展开全部一、理解这样一个概念,操作系统为了方便管理内存e69da5e887aa...二、4B大小页表项,意味着支持最大页表数是2的32次方=4294967296 (4B=32bit),一个页的大小4K,那么4B大小页表项,表示...

    展开全部

    一、理解这样一个概念,操作系统为了方便管理内存e69da5e887aa3231313335323631343130323136353331333431353936,将内存划分成很若干个页,每个页表项就代表一个页的地址(页的地址,不是内存地址)。

    二、4B大小的页表项,意味着支持最大的页表数是2的32次方=4294967296 (4B=32bit),一个页的大小4K,那么4B大小的页表项,表示操作系统支持4294967296*4K = 16GB大的内存。

    三、现在问题是页表占用一定的内存。

    (一)现在假设有2GB(一定要小于16GB)内存。

    1、那么它一共有2GB/4KB=512K个页,也就是说页表项有512K项,而每个页表项的大小4B,那么页表在内存中占用的大小是:512K*4B=2MB,意味着,只要2MB就可以表示512K个页(每个页是4KB,总内存大小是2G),它页表本身占用了2MB/4K=512个页。

    2、这一题 就是问你1个页可以表示多少个页表项,4KB/4B=1024个页表项。页面大小与页表项没有绝对的关系,但它们有这样关系:

    (二)页面大小 * 2 ^(页表项大小)=操作系统最大支持内存大小(虚拟内存)

    1、本题是 4K * 2^(4B) = 16GB

    2、页表占用内存 = 操作系统内存/页面大小 * 页表项大小,本题是,假设操作系统内存为2GB。 2GB/4KB*4B = 2MB

    3、页表占用的页数是=页表占用内存/页面大小,这题同上假设2MB/4

    展开全文
  • 两级页表

    千次阅读 2021-07-26 07:59:41
    本文是在基本分页存储管理...1单级页表存在的问题假设某计算机系统按字节寻址,支持32位逻辑地址,采用分页存储管理,页面大小为4KB,页表项长度为4B。4KB = 212B,因此页内地址要用12位表示,剩余20位表示页号。—...

    本文是在基本分页存储管理的基础上对分页管理的优化。在上篇文章中说到,操作系统会为每个进程建立一张页表,实现页号和内存块号之间的对应关系。本文从单级页表存在的问题引出两级页表,以及两级页表如何实现地址的变换。

    1单级页表存在的问题

    51c2286a6268

    假设某计算机系统按字节寻址,支持32位逻辑地址,采用分页存储管理,页面大小为4KB,页表项长度为4B。

    4KB = 212B,因此页内地址要用12位表示,剩余20位表示页号。——上篇文章 第三节的结论。

    因此,该系统中用户进程最多有220页。相应的,一个进程的页表中,最多会有220个页表项,所以一个页表最大需要220 * 4B = 222B。一个页框(内存块)大小为4B,所以需要222/212 = 210个页框存储该页表。而页表的存储是需要连续存储的,因为根据页号查询页表的方法:K号页对应的页表项的位置 = 页表起始地址 + K * 4B(页表项长度),所以这就要求页表的存储必须是连续的。

    回想一下,当初为什么使用页表,就是要将进程划分为一个个页面可以不用连续的存放在内存中,但是此时页表就需要1024个连续的页框,似乎和当时的目标有点背道而驰了....

    此外,根据局部性原理可知,很多时候,进程在一段时间内只需要访问某几个页面就可以正常运行了。因此也没有必要让整个页面都常驻内存。

    所以,单级页表存在以上两个问题。

    2 两级页表

    如何解决页表过大需要连续存储的问题呢?这个问题可以参考进程太大需要连续存储的答案。因为页表必须连续存放,所以可以将页表再分页。

    解决方案:可以将长长的页表进行分组,使每个页面中刚好可以放下一个分组(如上面的例子中,页面的大小4KB),每个页表项4B,所以每个页面中可以存放1K个(1024)个页表项,因此每1K个连续的页表项为一组,每组刚好占一个页面,再讲各组离散的放在各个内存块中)。这样就需要为离散的页表再建立一张页表,称为页目录表,或外层页表,或顶层页表。

    还是面的例子,32位的逻辑地址空间,页表项大小为4B,页面大小4KB,则页内地址占12位,单级页表结构逻辑结构图如下图所示

    51c2286a6268

    使用单级页表的情况

    51c2286a6268

    将页表分为分为1024个表,每个表中包含1024个页表项,形成二级页表。二级页表结构的逻辑地址结构如下图

    51c2286a6268

    两级页表如何实现地址转换:

    (1) 按照地址结构将逻辑地址拆成三个部分。

    (2) 从PCB中读取页目录起始地址,再根据一级页号查页目录表,找到下一级页表在内存中存放位置。

    (3) 根据二级页号查表,找到最终想要访问的内存块号。

    (4) 结合页内偏移量得到物理地址。

    下面以一个逻辑地址为例。将逻辑地址(0000000000,0000000001,11111111111)转换为物理地址的过程。

    51c2286a6268

    3 虚拟存储技术

    再解决了页必须连续存放的问题后,再看如何第二个问题:没有必要让整个页表常驻内存,因为进程一段时间内可能只需要访问某几个特定的页面。

    解决方案:可以在需要访问页面时才把页面调入内存——虚拟存储技术(后面再说)。可以在页表中增加一个标示位,用于表示该页表是否已经调入内存。

    51c2286a6268

    4 几个问题

    (1) 若采用多级页表机制,则各级页表的大小不能超过一个页面。

    举例说明,某系统按字节编址,采用40位逻辑地址,页面大小为4KB,页表项大小为4B,假设采用纯页式存储,则要采用()级页表,页内偏移量为()位?

    页面大小 = 4KB,按字节编址,因此页内偏移量为12位。

    页号 = 40 - 12 = 28位。

    页面大小 = 4KB,页表项大小 = 4B,则每个页面可存放1024个页表项。因此各级页表最多包含1024个页表项,需要10个二进制位才能映射到1024个页表项,因此每级页表对应的页号应为10位二进制。共28位的页号至少要分为3级。

    51c2286a6268

    (2) 两级页表的访问次数分析(假设没有页表):

    (1) 第一次访问:访问内存中的页目录表。

    (2) 访问内存中的二级目录。

    (3) 访问目标内存单元。

    从上面可以看出,两级页表虽然解决了页表需要连续存储的问题,但是同时也增加了内存的访问次数。

    4 小结

    51c2286a6268

    展开全文
  • 页表项多大? 首先需要抛开一级二级x级页表的概念。...最大页号2^20 - 1,十六进制 0xFFFFF,占了20位。所以数组元素囊括的数据要保证可使用到20位,也就是 0 ~ 0xFFFFF。 好了,就按0xFFFFF来算吧,它占用多大?

    咱们用通俗的语言聊聊这个世纪性跨时代的问题。

    #页表项多大?

    首先需要抛开一级二级x级页表的概念。对于32位的地址空间,规定按4K一页来管理,可以分成2^32B / 4K = 2^20 个页。

    所以32位机器,页号范围是 0 ~ 2^20-1,这点毋庸置疑。

    现在要建造一样东西来管理这些页号,首先想到的就是数组,那数组每个元素定义多大才能保证覆盖所有的页号呢?

    最大页号2^20 - 1,十六进制 0xFFFFF,占了20位。所以数组里每个元素的大小至少可存放20位的数据,也就是 0 ~ 0xFFFFF中的任意一个。

    好了,就按0xFFFFF来算吧,它占用多大?按字节来算,最多给他3B,就够用了。所以每项给它3B大小绰绰有余,但是为了整数操作,给它4B吧,这样正好一个页面存放整数个元素。当然多余的12bit也不是浪费的,留着做标志位权限位。

    聊到这,给这个数组取个名吧,好了就要页表(page table)吧,里面的元素就叫页表项吧(page table entry)。

    #聊聊页表

    很多人看见一级二级三级四级页表就开始慌了

    如一级的格式

    如32位机器的二级的格式

    如64位机器的三级的格式

    擒贼先擒王,哪个才是代表页表?

    一级中的page index代表页表,二级中的PTX代表页表,三级中的PTX代表页表。很多人一开始学这个就是从左往右看,然后被自己带到沟里了。实质上根据一级到三级的变化发展趋势,其实是从右往左看的。按照进化论最最本质的需求就是建立页表,然后发现页表的缺点才会在la地址上割出什么PTX啊,PMX啊这些玩意。

    一级原始时代,page index就作为一个庞大的页表存在,整个大小4B * 2^20  = 4 MB,之前咱们聊过,页表就是个数组,数组就是一个顺序表,里面的内容是连续的,想想一下子开一个连续的4M空间给它,你乐意不。这么一大坨占用连续内存块,然且它是个整体,假设有个程序一直只访问它前面的一小块区域,那么后面的大部分区域可不可以让它呆在内存外面,用到在放进来?

    二级农耕时代,有了需求就要去实现,把这个庞然大物分割一下吧,好主意,就按10bit来分,这样一个页表含有1024个页表项,大小为4K,4K放在内存中相比原始时代并不占地。现在划分了很多个页表,总归要有东西来管理吧,那就剩下的bit位来干这件事吧。有多少个页表,看剩下的bit。PDX的作用就是管理页表的,就像页表管理页表项,这样分割的零零落落的页表在PDX下连接了起来。PDX定义为10bit,代表PDX里也有1024个项,这里的每个项指向一个页表,所以页表总大小4B * 1024 * 1024 = 4MB, 还是4MB大小,但是只占用4K的连续内存空间,其余用不到的暂时就可以不放进内存了,用连续的PDX项,寻找离散的页表是个时代进步的表现。给PDX取个名,页目录项吧,就像书的目录,要找某个内容,先去找到目录,然后找到目录中给的页号,去定位到那一页,页里的某一行或几行就是我们要找的内容了。

    当然有些页表像老赖一样常驻内存就不出去了,这时候就要搞个机制来清理它们了,吃老本不干活的直接请出去,干活的留下,这就涉及到快表的问题了,这边不讨论。

    有人急了,听说页目录表项也是4B,不是只有1024项吗?给10bit,2B够了丫?是这样吗?肯定不是,按这个理解,1号页表起始地址为1,2号为2,1023号为1023??要知道页表里面是货真价实的页号,那页目录项肯定也是货真价实的东西,里面存的是某组页号所在的页表的开头,也就是,页目录表也存页号,页表也存页号,只不过页目录项每隔1024存一个页号,所以大小还是要根据页号来,也就是20bit = 3B,为了整存选4B, 剩下12bit做标志或权限位。所以页目录大小为4B * 1024 = 4K

    实际代码中pdx是地址,*pdx存放1024间隔页号的某个页号,也就是就找到了ptx,*ptx存放含有物理地址相关的内容了

     

    三级牛逼时代我就不说了,只不过分割了页目录表。

     

    至于如何定位页号,就不说了。

    所以,页表问题也就是著名的数组问题和数组里寻找数组问题。

     

    本文页表计算基于32位系统。64位系统,一个表项8B

    关于表项里内容的探究,可查看基于ARM64的内核杂谈——页表项存放的是物理地址还是虚拟地址?

    展开全文
  • 我在学习操作系统的时候在遇到页表大小页表项,页面大小的的误区,百度了好久也是很迷糊,现如今恍然大悟,今天给大家分享一下,希望大家不用迷路。 之前百度到了一个这样的问题,我曾经也有过这样的问题,如图...
  • 页面大小页表

    千次阅读 2020-08-14 10:47:44
    因为一个页框大小等于页面大小为4KB,每个进程对应一个页表存储在内存中,页表页表项组成。若取3字节存储页表项,则一个页4096/3=1365个页表项4096%3=1产生1B的内部碎片,若取4字节存储页表项(至少3字节,所以...
  • I found this example.Consider a system with a 32-bit logical address space. If the pagesize in such a system is 4 KB (2^12), then a page table may consist ofup to 1 million entries (2^32/2^12)....
  • 多级页表内存

    2021-07-24 16:42:27
    多级页表内存 table of table 二级页表的内存占用 假设虚拟地址空间为32位,即4GB ...12代表offset位数,也就是页表大小4KB。20代表是哪个页表,总共有2^20个页表。这里分割地非常自然。 二级页表管理:2^(10+12)=2^2
  • 二级页表理解与计算

    千次阅读 多人点赞 2020-11-12 10:25:57
    页表大小如何计算? 页表项大小取决于需要表示的页号+需要表示的页内偏移量(取决于页面大小)如一个页面大小是4KB,那么它需要表示的页内偏移量为212B2^{12}B212B,即需要12位,若系统为32位,则剩下的20位可以用来...
  • 已知系统为32位实地址,采用48位虚拟地址,页面大小4KB,页表大小为8B;每段最大为4GB。 (1)假设系统使用纯页式存储,则要采用多少级页表,页内偏移多少位? (2)假设系统采用一级页表,TLB命中率为98%,TLB...
  • 内存之页表

    2022-04-18 19:07:06
    内存管理中页表小结
  • 页表管理及多级页表

    千次阅读 2019-08-02 14:17:18
    页表说需空间大小计算: 1、32 位地址空间、4KB 的页大小页表的每项大小为 4Byte。 32 位地址空间可寻址2^32 = 4GB 每4KB=3^12为1个物理页,故需要总TLB项为2^32/2^12=2^20 每个TLB项的大小为4B,故...
  • 通过内存管理(一):虚拟地址空间布局我们知道,arm64支持64位地址宽度,但64bit并不是都用到了,linux最大支持的虚拟地址宽度为48bit,我们以39bit地址宽度为例1、[63:39]指示页表的基地址寄存器,如果全为1,表示这...
  • 虚拟内存- MMU 和 TLB - 多级页表 在计算机中,我们直接操作物理地址,是一种效率底下的的方式,而虚拟内存的出现,则大大加速了程序员的开发能力。(虽然这降低了性能,不过是 Trade off 罢了)。 在 CPU 中内存管理...
  • 如果一个页面的大小为4K,页表大小为4B,那么为什么可以存2^10个页表项?我的意思就是问为什么要拿4K/4B=2^10?页表项不应该是存在于内存里面的?和页面大小有什么关系?   Mr_无所不知 | 浏览 13070 次 |...
  • 二级页表分页存储需要目录页表数形象解释

    千次阅读 多人点赞 2020-02-18 15:50:39
    某计算机采用二级页表的分页存储管理方式,按字节编址,页面大小为1024B,每个页表项占2B,若逻辑地址空间的大小为 64K 个页面,则表示整个逻辑地址空间的页目录表中包含的表项的个数至 少为__128_____ 在解决这个...
  • arm32 一个 vma 中 有 两个 index // armv6 RM ref P730 L1(一级页表,即页目录表)index 为 12位,所以一级页表的大小为 2^12*4B=16KB ... // 一级页表大小 + 所有的 二级页表大小 arm32 硬件上 有 TTBR0 TTBR1
  • 内存管理之二级页表详解

    千次阅读 2021-01-13 11:57:05
    参考这位仁兄https://blog.csdn.net/qq_34419607/article/details/98862804,我把自己的理解和额外的计算公式加进去了,应该要比他的写的好一点哈哈哈。...二级页表由此诞生,就是把页表当数据,再建立页表 .
  • 题目: 假设一个机器有38位的虚权地址和32位的物理地址。...(b) 计算偏移量: 页面大小为16KB则为14位计算最大能有多少个页:238/214=224个页则我们可以计算出一级页表占用的空间:224*22B=226B二级页表
  • 已知系统为32位实地址,采用48位虚拟地址,页面大小4KB,页表大小为8B;每段最大为4GB。 (1)假设系统使用纯页式存储,则要采用多少级页表,页内偏移多少位? (2)假设系统采用一级页表,TLB命中率为98%,TLB...
  • 页表最大占用多少字节? 先说答案再分析: 页的大小=页内偏移量的大小=2^12B=4KB 页表项个数=2^20 页表占用字节=(2^20)*4B=4MB 分析: 页的大小为什么等于页内偏移量的大小? 这个应该很好理解吧,寻址的时候...
  • 2013年页表408大题

    千次阅读 多人点赞 2020-06-26 20:59:24
    【解析】页的大小为2^12B=4KB,页表最大占用页表最大占用2^20 *4B=2^22B=4MB 2.若使用二级页表的分页存储管理方式,逻辑地址结构为 页目录号(10位) 页表索引(10位) 页
  • ARM linux 建立页表过程

    2021-05-11 19:35:05
    paging_init 用来建立页表,初始化zone的memory mapvoid *zero_page; sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL); build_mem_type_table(); sanity_check_meminfo(); ...
  • 在每一个进程中,每个进程都有自己的虚拟内存空间,这能使进程与进程之间相互独立,互不影响,当运行一个进程的时候,cpu是先看到进程的虚拟内存上的数据,然后在通过页表的映射关系找到物理内存中代码和数据,而...
  • 在块大小为4K的32位系统中,逻辑地址的低12位为页内偏移,高20位为页索引。CPU通过查找页表将20位的页索引转换为数据块的物理地址(同样也是20位),然后与低12位的页内偏移拼接,形成最后的物理地址。 操作系统中...
  • Linux内核页表的建立

    2021-06-07 23:00:35
    Linux内核页表的临时映射背景初始阶段内存的使用情况 背景 由于Linux由BIOS加载后,起始阶段其实是运行在实模式,此时并没有开启分页机制。那Linux在开启分页机制之前需要先做哪些准备工作以支持分页机制?答案是页...
  • --------------------- 作者:Yngz_Miao 来源:CSDN ... --------------------- ...当处理器试图访问一个虚存页面时,首先到页表中去查询该页是否已映射到物理页框中,并记录在页表中。如果在,则...
  • 【Linux】Linux的虚拟内存详解(MMU、页表结构)

    万次阅读 多人点赞 2018-07-16 20:16:28
    用户可以在配置文件config中根据自己的需要对页表进行配置,以决定是使用三级页表还是使用二级页表。 在系统编译时,会根据配置文件config中的配置,把目录include/asm符号连接到具体CPU专用的文件目录中。例如,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,153
精华内容 8,061
关键字:

最大页表大小

友情链接: 10.zip