《3、1_6_基本分页存储管理的基本概念.pdf》由会员分享,可在线阅读,更多相关《3、1_6_基本分页存储管理的基本概念.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2019/6/26王道考研/1本节内容基本分页存储管理的基本概念王道考研/CSKAOYAN.COM王道考研/CSKAOYAN.COM知知识识总总览览连续分配:为用户进程分配的必须是一个连续的内存空间。非连续分配:为用户进程分配的可以是一些分散的内存空间。2019/6/26王道考研/2王道考研/CSKAOYAN.COM什什么么是是“地地址址空空间间”内存低地址高地址指指令令0指指令令1数据1数据2进程的逻辑地址空间0116K-216K-1指指令令0指指令令1数据1数据210K10K+126K-226K-1进程的物理地址空间概念回顾:逻辑地址(相对地址)物理地址(绝对地址)进程A在在内内存存中中连
2、连续续存存放放王道考研/CSKAOYAN.COM什什么么是是分分页页存存储储将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”(页框=页帧=内存块=物理块=物理页面)。每个页框有一个编号,即“页框号”(页框号=页帧号=内存块号=物理块号=物理页号),页框号从从0开开始始。将进程的逻辑地址空间也分为与与页页框框大大小小相相等等的一个个部分,每个部分称为一个“页”或“页面” 。每个页面也有一个编号,即“页号”,页号也是从从0开开始始。Tips:初学易混页、页面 vs 页框、页帧、物理页页号、页面号 vs 页框号、页帧号、物理页号操作系统以页框为单位为各个进程分配内
3、存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框有一一对应的关系。各个页面不必连续存放,可以放到不相邻的各个页框中。(注:进程的最后一个页面可能没有一个页框那么大。也就是说,分页存储有可能产生内部碎片,因此页框不能太大,否则可能产生过大的内部碎片造成浪费)内存页框2 (4KB)页框3 (4KB)进程A (16KB)页框 n-2页框 n-1进程A_0 (4KB)页框0 (4KB)页框1 (4KB)低地址高地址进程A_1 (4KB)进程A_2 (4KB)进程A_3 (4KB)指指令令0指指令令1数据1数据2进程的逻辑地址空间0116K-216K-1进程A2019/6/26
4、王道考研/3王道考研/CSKAOYAN.COM重重要要的的数数据据结结构构页页表表为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。注:页表通常存在PCB(进程控制块)中0页1页2页n页进程的逻辑地址空间031624n8页号块号内存012345678内存块号/页框号页表1. 一个进程对应一张页表2. 进程的每个页面对应一个页表项3. 每个页表项由“页号”和“块号”组成4. 页表记录进程页面和实际存放的内存块之间的映射关系5. 每个页表项的长度是相同的王道考研/CSKAOYAN.COM重重要要的的数数据据结结构构页页表表0页1页2页n页进程的逻辑地址空间031624n
5、8页号块号内存012345678内存块号/页框号页表1. 每个页表项多大?占几个字节?2. 如何通过页表实现逻辑地址到物理地址的转换?2019/6/26王道考研/4王道考研/CSKAOYAN.COM问问题题一一:每每个个页页表表项项占占多多少少字字节节?0页1页2页n页进程的逻辑地址空间031624n8页号块号内存012345678内存块号/页框号页表Eg:假设某系统物理内存大小为 4GB,页面大小为 4KB,则每个页表项至少应该为多少字节?内存块大小=页面大小=4KB= 212B4GB 的内存总共会被分为 232/ 212= 220个内存块内存块号的范围应该是 0 220-1内存块号至少要用
6、 20 bit 来表示至少要用3B来表示块号(3*8=24bit)那页号又要占多少字节呢?重要重要重要考点:计算机中内存块的数量页表项中块号至少占多少字节王道考研/CSKAOYAN.COM0页1页2页n页进程的逻辑地址空间031624n8页号块号内存012345678内存块号/页框号页表页表项连续存放,因此页号可以是隐含的,不占存储空间(类比数组)3648每个页表项占3B,且都是连续存放012n假设页表中的各页表项从内存地址为 X 的地方开始连续存放如何找到页号为 i 的页表项?i 号页表项的存放地址 = X + 3*I因此,页表中的页号可以是隐含的,即页号不占用存储空间X问问题题一一:每每个
7、个页页表表项项占占多多少少字字节节?2019/6/26王道考研/5031624n8王道考研/CSKAOYAN.COM问问题题一一:每每个个页页表表项项占占多多少少字字节节?0页1页2页n页进程的逻辑地址空间031624n8页号块号内存012345678内存块号/页框号页表Eg:假设某系统物理内存大小为 4GB,页面大小为 4KB,则每个页表项至少应该为多少字节?内存块大小=页面大小=4KB= 212B4GB 的内存总共会被分为 232/ 212= 220个内存块内存块号的范围应该是 0 220-1内存块号至少要用 20 bit 来表示至少要用3B来表示块号(3*8=24bit)由于页号是隐含的
8、,因此每个页表项占3B,存储整个页表至少需要 3*(n+1)B注意:页表记录的只是内存块号,而不是内存块的起始地址!J 号内存块的起始地址 = J *内存块大小王道考研/CSKAOYAN.COM问问题题二二:如如何何实实现现地地址址的的转转换换进进程程在在内内存存中中连连续续存存放放时时,操操作作系系统统是是如如何何实实现现逻逻辑辑地地址址到到物物理理地地址址的的转转换换的的?相对于起始位置的“偏移量”内存100101物理地址(绝对地址)1002791801指指令令1:往地址为 80的存储单元中写入 1指指令令2:181279100重定位寄存器:指明了进程在内存中的起始位置目标逻辑地址:80+
9、2019/6/26王道考研/6进程A_0 (4KB)进程A_1 (4KB)进程A_2 (4KB)进程A_3 (4KB)王道考研/CSKAOYAN.COM问问题题二二:如如何何实实现现地地址址的的转转换换内存页框2 (4KB)页框3 (4KB)进程A (16KB)页框 n-2页框 n-1进程A_0 (4KB)页框0 (4KB)页框1 (4KB)低地址高地址进程A_1 (4KB)进程A_2 (4KB)进程A_3 (4KB)将将进进程程地地址址空空间间分分页页之之后后,操操作作系系统统该该如如何何实实现现逻逻辑辑地地址址到到物物理理地地址址的的转转换换?特点:虽然进程的各个页面是离散存放的,但是页面
10、内部是连续存放的如果要访问逻辑地址 A,则确定逻辑地址A 对应的“页号”P找到P号页面在内存中的起始地址(需要查页表)确定逻辑地址A 的“页内偏移量”W逻辑地址A 对应的物理地址 = P号页面在内存中的起始地址+页内偏移量W王道考研/CSKAOYAN.COM如何计算:页号 = 逻辑地址 / 页面长度 (取除法的整数部分)页内偏移量 = 逻辑地址 % 页面长度(取除法的余数部分)页号 = 110 / 50 = 2页内偏移量 = 110 % 50 = 10逻辑地址 可以拆分为(页号,页内偏移量)通过页号查询页表,可知页面在内存中的起始地址页面在内存中的起始地址+页内偏移量 = 实际的物理地址子子问
11、问题题:如如何何确确定定一一个个逻逻辑辑地地址址对对应应的的页页号号、页页内内偏偏移移量量?Eg:在某计算机系统中,页面大小是50B。某进程逻辑地址空间大小为200B,则逻辑地址 110 对应的页号、页内偏移量是多少?进程 (200B)0号页面(50B)1号页面(50B)2号页面(50B)3号页面(50B)逻辑地址0501001502019/6/26王道考研/7王道考研/CSKAOYAN.COM页号 = 逻辑地址 / 页面长度 (取除法的整数部分)页内偏移量 = 逻辑地址 % 页面长度(取除法的余数部分)在计算机内部,地址是用二进制表示的,如果页面大小 刚好是 2 的整数幂,则计算机硬件可以很
12、快速的把逻辑地址拆分成(页号,页内偏移量)假设某计算机用32 个二进制位表示逻辑地址,页面大小为 4KB= 212B = 4096B0号页的逻辑地址范围应该是 04095,用二进制表示应该是:00000000000000000000000000000000 000000000000000000001111111111111号页的逻辑地址范围应该是 40968191,用二进制表示应该是:00000000000000000001000000000000 000000000000000000011111111111112号页的逻辑地址范围应该是 819212287,用二进制表示应该是:0000000
13、0000000000010000000000000 00000000000000000010111111111111Eg:逻辑地址 2,用二进制表示应该是 00000000000000000000000000000010页号 = 2/4096 = 0 = 00000000000000000000,页内偏移量 = 2%4096 = 2 = 000000000010Eg:逻辑地址 4097,用二进制表示应该是 00000000000000000001000000000001页号 = 4097/4096 = 1 = 00000000000000000001,页内偏移量 = 4097%4096 = 1
14、 = 000000000001子子问问题题:如如何何确确定定一一个个逻逻辑辑地地址址对对应应的的页页号号、页页内内偏偏移移量量?结论:如果每个页面大小为 2KB,用二进制数表示逻辑地址,则末尾 K 位即为页内偏移量,其余部分就是页号王道考研/CSKAOYAN.COM页号 = 逻辑地址 / 页面长度 (取除法的整数部分)页内偏移量 = 逻辑地址 % 页面长度(取除法的余数部分)在计算机内部,地址是用二进制表示的,如果页面大小 刚好是 2 的整数幂,则计算机硬件可以很快速的把逻辑地址拆分成(页号,页内偏移量)假设某计算机用32 个二进制位表示逻辑地址,页面大小为 4KB= 212B = 4096B
15、Eg:逻辑地址 4097,用二进制表示应该是 00000000000000000001000000000001页号 = 4097/4096 = 1 = 00000000000000000001,页内偏移量 = 4097%4096 = 1 = 000000000001子子问问题题:如如何何确确定定一一个个逻逻辑辑地地址址对对应应的的页页号号、页页内内偏偏移移量量?结论:如果页面大小刚好是2的整数幂,则只需把页表中记录的物理块号拼接上页内偏移量就能得到对应的物理地址假设物理地址也用32个二进制位表示,则由于内存块的大小=页面大小,因此:0号内存块的起始物理地址是 00000000000000000
16、0000000000000001号内存块的起始物理地址是 000000000000000000010000000000002号内存块的起始物理地址是 000000000000000000100000000000003号内存块的起始物理地址是 00000000000000000011000000000000假设通过查询页表得知1号页面存放的内存块号是9(1001),则9号内存块的起始地址 = 9*4096 = 00000000000000001001000000000000则逻辑地址4097对应的物理地址 = 页面在内存中存放的起始地址 + 页内偏移量=(00000000000000000011
17、000000000001)根据页号可以查询页表,而页表中记录的只是内存块号,而不是内存块的起始地址!J 号内存块的起始地址 = J *内存块大小2019/6/26王道考研/8王道考研/CSKAOYAN.COM如何计算:页号 = 逻辑地址 / 页面长度 (取除法的整数部分)页内偏移量 = 逻辑地址 % 页面长度(取除法的余数部分)总结:页面大小 刚好是 2 的整数幂有什么好处?逻辑地址的拆分更加迅速如果每个页面大小为 2KB,用二进制数表示逻辑地址,则末尾 K 位即为页内偏移量,其余部分就是页号。因此,如果让每个页面的大小为 2 的整数幂,计算机硬件就可以很方便地得出一个逻辑地址对应的页号和页内
18、偏移量,而无需进行除法运算,从而提升了运行速度。物理地址的计算更加迅速根据逻辑地址得到页号,根据页号查询页表从而找到页面存放的内存块号,将二进制表示的内存块号和页内偏移量拼接起来,就可以得到最终的物理地址。在计算机内部,地址是用二进制表示的,如果页面大小 刚好是 2 的整数幂,则计算机硬件可以很快速的把逻辑地址拆分成(页号,页内偏移量)Tips:学有余力的同学建议看看二进制数的运算(计组内容),才更能理解本质原因子子问问题题:为为何何页页面面大大小小要要取取2的的整整数数幂幂?王道考研/CSKAOYAN.COM逻逻辑辑地地址址结结构构分页存储管理的逻辑地址结构如下所示:3112110页号 P页
19、内偏移量 W地址结构包含两个部分:前一部分为页号,后一部分为页内偏移量 W。在上图所示的例子中,地址长度为 32 位,其中 011位 为“页内偏移量”,或称“页内地址”;1231 位为“页号”。如果有 K 位表示“页内偏移量”,则说明该系统中一个页面的大小是 2K个内存单元如果有 M 位表示“页号”,则说明在该系统中,一个进程最多允许有 2M个页面Tips:有些奇葩题目中页面大小有可能不是2的整数次幂,这种情况还是得用最原始的方法计算:页号 = 逻辑地址 / 页面长度 (取除法的整数部分)页内偏移量 = 逻辑地址 % 页面长度(取除法的余数部分)重要重要重要!页面大小 页内偏移量位数逻辑地址结构2019/6/26王道考研/9王道考研/CSKAOYAN.COM知知识识回回顾顾与与重重要要考考点点内存块的数量 页表项大小