当前位置:首页 » 服务存储 » 分页存储中找不到对应的块号
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

分页存储中找不到对应的块号

发布时间: 2023-01-24 10:09:50

Ⅰ 在二级页表分页存储管理中怎样由十进制的逻辑地址计算相对应的物理地址

1)092b(H)转换成二进制就是0000 1001 0010 1011 前6位为页号p得先转换成10进制为2 ,对应的块号为5,用5*1024加上后10位(0100101011转换成10进制为1+2+8+32+256=299)为5419即为物理地址
2)2A12转换成二进制为0010 1010 0001 0010 页号为001010就是10 而页号中缺页了 溢出
3)2A5C十进制就是10844再除以1024等于 10余604 10为块号 而题目中没有 也是溢出
不知道算对没.

Ⅱ (操作系统)已知页号怎么求块号(怎么对应快表,看不懂,求大神了)

物理地址 (physical address): 放在寻址总线上的地址。放在寻址总线上,如果是读,电路根据这个地址每位的值就将相应地址的物理内存中的数据放到数据总线中传输。如果是写,电路根据这个 地址每位的值就将相应地址的物理内存中放入数据总线上的内容。物理内存是以字节(8位)为单位编址的。
虚拟地址 (virtual address): 4G虚拟地址空间中的地址,程序中使用的都是虚拟地址。
如果CPU寄存器中的分页标志位被设置,那么执行内存操作的机器指令时,CPU会自动根据页目录和页表中的信息,把虚拟地址转换成物理地址,完成该指令。 比如 mov eax,004227b8h ,这是把地址004227b8h处的值赋给寄存器的汇编代码,004227b8这个地址就是虚拟址。CPU在执行这行代码时,发现寄存器中的分页标志位已 经被设定,就自动完成虚拟地址到物理地址的转换,使用物理地址取出值,完成指令。对于Intel CPU 来说,分页标志位是寄存器CR0的第31位,为1表示使用分页,为0表示不使用分页。对于初始化之后的 Win2k 我们观察 CR0 ,发现第31位为1。表明Win2k是使用分页的。
使用了分页机制之后,4G的地址空间被分成了固定大小的页,每一页或者被映射到物理内存,或者被映射到硬盘上的交换文件中,或者没有映射任何东西。对于一 般程序来说,4G的地址空间,只有一小部分映射了物理内存,大片大片的部分是没有映射任何东西。物理内存也被分页,来映射地址空间。对于32bit的 Win2k,页的大小是4K字节。CPU用来把虚拟地址转换成物理地址的信息存放在叫做页目录和页表的结构里。
物理内存分页,一个物理页的大小为4K字节,第0个物理页从物理地址 0x00000000 处开始。由于页的大小为4KB,就是0x1000字节,所以第1页从物理地址 0x00001000 处开始。第2页从物理地址 0x00002000 处开始。可以看到由于页的大小是4KB,所以只需要32bit的地址中高20bit来寻址物理页。
页表,一个页表的大小为4K字节,放在一个物理页中。由1024个4字节的页表项组成。页表项的大小为4个字节(32bit),所以一个页表中有1024 个页表项。页表中的每一项的内容(每项4个字节,32bit)高20bit用来放一个物理页的物理地址,低12bit放着一些标志。
页目录,一个页目录大小为4K字节,放在一个物理页中。由1024个4字节的页目录项组成。页目录项的大小为4个字节(32bit),所以一个页目录中有 1024个页目录项。页目录中的每一项的内容(每项4个字节)高20bit用来放一个页表(页表放在一个物理页中)的物理地址,低12bit放着一些标 志。
对于x86系统,页目录的物理地址放在CPU的CR3寄存器中。
CPU把虚拟地址转换成物理地址:
一个虚拟地址,大小4个字节(32bit),包含着找到物理地址的信息,分为3个部分:第22位到第31位这10位(最高10位)是页目录中的索引,第 12位到第21位这10位是页表中的索引,第0位到第11位这12位(低12位)是页内偏移。对于一个要转换成物理地址的虚拟地址,CPU首先根据CR3 中的值,找到页目录所在的物理页。然后根据虚拟地址的第22位到第31位这10位(最高的10bit)的值作为索引,找到相应的页目录项 (PDE,page directory entry),页目录项中有这个虚拟地址所对应页表的物理地址。有了页表的物理地址,根据虚拟地址的第12位到第21位这10位的值作为索引,找到该页表 中相应的页表项(PTE,page table entry),页表项中就有这个虚拟地址所对应物理页的物理地址。最后用虚拟地址的最低12位,也就是页内偏移,加上这个物理页的物理地址,就得到了该虚 拟地址所对应的物理地址。
一个页目录有1024项,虚拟地址最高的10bit刚好可以索引1024项(2的10次方等于1024)。一个页表也有1024项,虚拟地址中间部分的 10bit,刚好索引1024项。虚拟地址最低的12bit(2的12次方等于4096),作为页内偏移,刚好可以索引4KB,也就是一个物理页中的每个 字节。
一个虚拟地址转换成物理地址的计算过程就是,处理器通过CR3找到当前页目录所在物理页,取虚拟地址的高10bit,然后把这10bit右移2bit(因 为每个页目录项4个字节长,右移2bit相当于乘4)得到在该页中的地址,取出该地址处PDE(4个字节),就找到了该虚拟地址对应页表所在物理页,取虚 拟地址第12位到第21位这10位,然后把这10bit右移2bit(因为每个页表项4个字节长,右移2bit相当于乘4)得到在该页中的地址,取出该地 址处的PTE(4个字节),就找到了该虚拟地址对应物理页的地址,最后加上12bit的页内偏移得到了物理地址。

Ⅲ 分页式存储管理系统

进程大小是64/16*3=12KB
起始地址分别是2*4、4*4、7*4
物理地址5276/(1024*4)=1.....1180
1对应的是4
4*4+1180就是物理地址

Ⅳ 基本分页存储管理

假设是按字节编址

考虑支持多道程序的两种连续分配方式

原因:连续分配要求进程占有的必须是一块连续的内存区域
能否讲一个进程分散地装入到许多不相邻的分区,便可充分利用内存

基本分页存储管理的思想:把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分

页框/页帧:内存空间分成的一个个大小相等的分区(比如4KB)
页框号:页框的编号,从0开始,从低地址开始

页/页面:用户进程的地址空间分为和页框大小相等的一个个区域
页号:页/页面的编号,从0开始

进程的最后一个页面可能没有一个页框那么大,页框不能太大,否则可能产生过大的内部碎片

操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中,也就是说,进程的页面与内存的页框有一一对应的关系
每个页面不必连续存放,也不必按照先后顺序,可以放到不相邻的各个页框中

进程在内存中连续存放时,通过动态重定位实现逻辑地址到物理地址的转换。在装入模块之后,内存中指令使用的依然是逻辑地址,直到指令执行的时候才会进行地址转换。系统会设置一个重定位寄存器,用来存放装入模块存放的起始位置,重定位寄存器中的值加上逻辑地址就是该逻辑地址实际对应的物理地址

如果采用分页技术

页框大小为4KB,地址空间为4GB的系统
页号为前20位,页内偏移量为后12位

页表:为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表

一个进程对应一张页表
进程的每一页对应一个页表项
每个页表项由页号和页框号组成
页表记录进程页面和实际存放的页框之间的对应关系

每个页表项的长度是相同的,页号是隐含的
各页表项会按顺序连续存放在内存中,如果该页表在内存中的起始地址是X,4GB/4KB系统的页框有

用于实现逻辑地址到物理地址转换的一组硬件机构

通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M(M个页表项)
进程未执行时,页表的起始地址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把他们放到页表寄存器中

基本分页存储管理中地址是一维的,即只要给出一个逻辑地址,系统就可以自动计算出页号、偏移量,不需要显式告诉系统偏移量是多少

理论上,页表项长度为3即可表示内存块号的范围,但是为了方便页表查询,会让页面恰好能装得下整数个页表项,令每个页表项占4字节
4KB页面,可以放4096/3 =1365个页表项,有4096%3 =1B的碎片,访问1365及之后的页表项时,还要考虑前面的页框中的碎片,才能得到页表项的物理地址,比较麻烦

进程页表通常存放在连续的页框中,这样就能用统一的计算方式得到想要得到的页表项存储的位置

地址变换过程中有两次访存操作:查询页表、访问目标内存单元

局部性原理

如果这个程序将程序对应的指令存放在10号内存块,将程序中定义的变量存放在23号内存块,当这个程序执行时,会很频繁地反问10、23号内存块

时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能被再次执行;如果某个数据被访问过,不久之后该数据很有可能再次被访问(因为程序存在大量循环)
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问(因为很多数据在内存中连续存放)

基本地址变换机构中,每次要访问一个逻辑地址,都要查询页表,由于局部性原理,可能连续多次查询同一个页表项

快表:又称联想寄存器(TLB),是一种访问速度比内存块很多的高速缓存,用来存放当前访问的若干页表项,以加速地址变换的过程。内存中的页表常称为慢表

引入快表后地址的变换过程

一般来说,快表的命中率可以达到90%以上

单级页表存在的问题

对问题1

可将页表进行分组,使每个内存块刚好可以放入一个分组。为离散分配的页表再建立一张页表,称为页目录表,或外层页表
各级页表的大小不能超过一个页面

针对两级页表

对问题2

可以在需要访问页面时,才把页面调入内存(虚拟存储技术),可以在页表项中增加一个标志位,用于表示该页面是否已经调入内存
若想访问的页面不在内存中,会产生缺页中断(内中断),然后将目标页面从外存调入内存
之后的文章会有展开

两级页表访存次数分析:如果没有TLB,第一次访存是访问内存中的页目录表,第二次访存是访问内存中的二级页表,第三次访存是访问目标内存单元

Ⅳ 操作系统,某分页存储管理系统,

是不是这个意思:
int main(int argc, char *argv[])
{
int page[]={0,1,2,3};
int block[]={2,3,1,6};
int addr[]={1011,2148,3000,4000,5012};
int i3,i4;
int i,j;

for(i=0;i<5;i++)
{
i3=addr[i]/1024;//页号
i4=addr[i]%1024;//块内地址

for(j=0;j<4;j++)
{
//查找页对应的块
if(i3==page[j])
{
i3=block[j];
cout<<addr[i]<<"对应块号:"<<i3<<" 块内地址:"<<i4<<endl;
break;
}
}
}

system("PAUSE");
return 0;
}

Ⅵ 基本分页存储管理

  阅读前请先阅读 内存管理基础 。从本文开始就介绍不连续分配的几种方式,本文主要介绍基本分页存储管理。

  假设进程A的大小为23MB,但是每个分区的大小只有10MB,如果进程只能占用一个分区,显然是放不下的。
  解决思路:如果允许进程占用多个分区,那么可以把进程拆分成 10MB + 10MB + 3MB三个部分 ,再把这三个部分别放在三个分区中(这些分区不要求连续).....

  将内存空间分为一个个大小相等的分区(如每个分区4KB,每个分区就是一个 “页框” ,或称 “内存块” “物理块” 。每个页框有一个编号,即 “页框号” ,或 “内存块号” “物理块号” ,页框号 从0开始 )。将用户进程的地址空间也分为与页框大小相等的一个个区域,称为 页面 。页框的大小不能太大,否则可能会产生过大的内存碎片。
  操作系统 以页框为单位为各个进程分配内存空间。 进程的每个页面分别放入一个页框中,即进程的 页面和内存的页框 一一对应 的关系。

  进程分页后,进程的各个页面可以放在不连续的页框中,所以如何实现逻辑地址到物理的地址的转换?
  如下图,将下面的进程分页,假设每页大小为50B,那么就分为4个页面。

  手动计算方法:
   页号 = 逻辑地址 / 页面长度(取整数部分)。
   页内偏移量 = 逻辑地址 % 页面长度
   页面在内存中的起始位置 :操作系统需要用某种数据结构记录进程各个页面的起始位置。
  对于计算机,通常将 页面的大小划分为2的整数次幂 。假设用32个二进制位表示逻辑地址,页面大小为取2 12 B = 4096B = 4KB。

  如逻辑地址2,用二进制表示00000000 00000000 0000 0000 00000010 ,前24位二进制对应的十进制值就是逻辑地址2对应的页号,即0号页,而后12二进制位对应的十进制值就是偏移量。如果0号页在内存中的起始地址为X,那么逻辑地址2对应的物理地址就是 X + 2.
  同理,逻辑地址4097,用二进制表示00000000 00000000 0001 0000 00000001 ,前24位二进制对应的十进制值就是逻辑地址4097对应的页号,即1号页,而后12二进制位对应的十进制值就是偏移量。如果0号页在内存中的起始地址为Y,那么逻辑地址4097对应的物理地址就是 Y + 1.
  结论: 如果每个页面的大小为2 k B,用二进制表示逻辑地址,则末尾的K位表示页内偏移量,其余部分就是页号。
  因此,如果让 每个页面的大小为2的整数次幂, 计算机就可以很方便的得出一个逻辑地址对应的页号和页内偏移量。
  如果一个页面的大小为2KB,那分页存储管理的逻辑地址结构为:

  地址结构包括两个部分:前一个部分表示页号,后一个部分表示页内偏移量W。

  在知道如何计算页号和偏移量后,要计算实际的物理地址,还需要知道页号在内存中的起始地址,如何知道每个页面在内存中存放的位置——操作系统要为 每个进程建立一张页表。

  按照之前的方法计算出逻辑地址所对应的页号N,然后根据页表区查询实际的内存块号M,由于每个内存块号的大小都是相等的,所以实际地址 = M * 内存块大小 + 偏移量。

  在实际上,页表中是没有页号的,那怎么找到实际对应的内存块号呢?
  假设某系统物理内存大小为4GB,页面大小为4KB,则每个页表项至少应该占用多少字节?

  各页表项会 按顺序连续地 存放在内存中,如果该页表在内存中存放的地址为X,则M号页对应的页表项存放的地址为:X + M * 3B
  因此,页表的页号可以是隐含的。只需要知道 页表存放的起始地址 页表项长度 ,即可找到各个页号对应的页表项存放的位置,找到位置后就可以读取该位置的值,即实际内存块号。
  举个例子,如果按照逻辑地址计算出了偏移量为20,页号为1,页表中的页号是隐藏的,那么根据页表在内存中的起始地址20(假设的值),以及页表项长度3B,那么页号为1所对应的实际内存块号的值所在的地址就是:20 + 3 * 1 = 23的位置,然后在该位置的值,该值就是实际内存块号,如果是4的话,那么实际地址就是: 4 * 页面大小(4096B) + 20 = 16404。

  基本地址变换结构可以借助进程的页表将逻辑地址转换为物理地址。
  通常在系统中设置一个 页表寄存器(PTR Page-Table Register) ,存放 页表在内存中起始地址F 页表长度M
  进程在未执行时,页表的起址和页表长度放在 进程控制块(PCB)中 ,当进程被调度时,操作系统内核会把它们放在页表寄存器中。

  逻辑地址到物理地址变换的过程:

  比较页表长度,页表项长度和页面大小三个概念:

  在分页存储管理(页式管理)系统中,只要确定了每个页面的大小,逻辑地址结构就确定了。因此, 页式管理中地址是一维的。 即只要给出一个逻辑地址,系统就可以自动算出页号、页内偏移量两个部分,并不需要显示告系统这个逻辑地址中,页内偏移量占多少位。
  基本地址变换结构需要访问两次内存: 第一次访问内存查找页表;第二次访问物理内存对应的内存单元。

  对于上图,会很频繁地访问10号块中的指令、23号块。
   时间局部性 :如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行:如果某个数据被访问过,不久之后该数据很有可能再次被访问。(因此程序中存在大量循环)。
   空间局限性 :一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的。如上面的数组,每次循环一次都会访问邻近的下一个元素地址)。
  在基本地址变换机构中,每次访问一个逻辑地址,都需要查询内幕才能中的页表。由于局部性原理,可能连续很多次查找到的都是一个页表项。既然如此,就可以利用这个特性减少访问页表的次数——快表。

   快表 ,又称 联想寄存器(TLB) ,是一种 访问速度比内存快很多 的高速缓冲存储器,用来存储当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为 慢表。
  快表的地址包换过程:
  (1) CPU给出逻辑地址,由某个硬件算得页号、页内偏移量,将页号与快表中的所有页号进行比较。
  (2) 如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再根据内存块号中与页内偏移量算地物理地址。最后访问该物理地址对应的内存单元。因此如果快表命中,则访问某个逻辑地址只需 一次 访问内存即可。
  (3) 如果没有找到匹配的页号,则就需要访问页表,需要两次访问内存,在第一次访问内存查询得到页号后,需要将页号添加到快表中,以便后面再次被访问。如果快表已满,则必须按照一定的算法对旧的页表项进行替换。
  由于查询快表比查询页表的速度快很多,因此只要快表命中,就可以节省很多时间。因为局部性原理,一般来说快表的命中率可以达到90%以上。

Ⅶ (存储管理)01.分页式存储管理

将内存划分为若干个大小相等的分区,叫做块;将逻辑空间划分出与块大小一致的分区,叫做页。作业运行时,通过地址重定位技术,实现页与块的对应。这样就以页的方式来管理存储块,就叫分页式存储管理。

在分配存储块时,会根据作业的逻辑地址的大小计算所需要多少个存储块,然后查找空闲块并更新空闲块的状态为占用;回收存储块时,会将作业关联的所有空闲块的状态设置为空闲。记录空闲块状态的方法有两种:位图法和链表法。

在分配存储块之后,就在页表中,增加页和块对应关系的记录;同理,回收存储块时,就会删除对应记录。

访问存储块时,就会根据逻辑地址的页号,在页表找到对应的块号,然后再通过块号计算出物理地址,找到对应的存储块。如下图:

补充

页表:记录页号与块号对应关系的表,包含页号和块号两个字段。

逻辑地址:由 “页号” 和 “页内地址” 组成。其中页内地址是通过页大小来决定。

例如:逻辑地址长度为 16 位,页大小是 1kb (二的十次幂),那么页内地址占低十位,高六位是页号。如下:

在重定位存储块时,需要访问页表。为了加快重定位,就会通过快表(联想存储器,记录常用的页号和块号的对应关系)来快速通过页号找到对应的块号。但是如果不能通过快表找到对应的块号,那么就会按照查找页表的方式来完成重定位。

Ⅷ 分页式存储管理

进程有3页, 那就是3* 64/16=12 K,
0块 1块 2块 3块 4块 5块 6块 7块
0 4K-1 4K 8K-1 8K --12k_1 12K 16K-1 16K -- 20K-1 20K 24K 28K----32K-1
逻辑地址=块号 + 块内地址,5276 ,应该是在第5块的276字节处, 20*1024+276 应该是物理地址

Ⅸ 若一分页存储管理系统中

1011/1024=0(页号)----余1011(页内偏移地址),说明它的页号为0,查页表得相应块号为2,页面大小为1024字,所以1011的物理地址为:2*1024+1011=3059;
同理,下面的那些地址就自己算了。
至于5012,因为页表内不存在页号为4的,所以5012会产生一个越界中断