首页 文章

从逻辑地址转换为物理地址 . 逻辑地址是十六进制

提问于
浏览
0

如何将十六进制地址转换为物理地址来回答这个问题?我很困惑,由于语言障碍,我的老师没有帮助 .

假设逻辑地址空间为1KB,页面大小为16字节 . 假设最初没有页面在主存储器中用于该过程,并且使用纯需求分页 . 当前的空闲帧列表是 {2,5,8,1,...} . 无论何时需要,都将使用空闲帧列表中的第一帧 . 假设TLB有两个条目 . TLB和页表最初都是空的 . FIFO用作TLB替换算法 . 假设按顺序访问以下逻辑地址: 0x3d0x300xe50x7d0x330xef . 对于以下每个地址访问:

  • 指定映射到它的物理地址 .

  • 假设访问TLB需要10 ns,访问内存需要100ns,处理页面错误需要8ms . 访问此地址需要多长时间?

1 回答

  • 1

    进程启动时,cpu需要访问地址 . 所以cpu在TLB条目中查找地址,如果找不到该条目,那么它就是TLB未命中,否则就是TLB命中 . 如果它是TLB未命中,则它在主存储器中寻找地址并用该地址的TLB条目更新TLB . 要记录操作系统的每个虚拟页面放置在物理内存中的位置,操作系统会将每个进程的数据结构保留为页表 .

    主存储器分为16字节大小的页面 . 内存总大小= 1KB . 因此页数为1KB / 16 = 2 ^ 10/2 ^ 4 = 2 ^ 6 = 64页 . 要将逻辑地址转换为物理地址,必须将其拆分为两个组件VPN(虚拟页码)和偏移量 . 由于地址空间为1KB,因此虚拟地址总共需要10位 . 由于页面大小为16字节,您可以进一步划分虚拟地址,VPN高6位,偏移低4位 .

    最初,主内存中没有页面 . 为了访问0x3d . 它查找了TLB . 因为缓存最初是空的 . 这是一个TLB未命中,转到主存 . 0x3d的二进制形式是0000111101.offset(4bits)= 1101和VPN = 000011.因此offset是第3页的13字节 . 因为页表是空的 . 这是一个页面错误 . 将物理页面置于空闲帧2并尝试再次访问此内存并更新页面表 . 现在将虚拟地址转换为物理地址 . 物理地址是第2页的第13个字节(因为虚拟页面3映射到物理帧2),即0010(帧号)和1101(偏移量),0x2d(十六进制) . 第二次尝试访问时,按照相同的步骤进行操作,因为0x30没有页面错误 .

相关问题