热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

已知物理地址求逻辑地址例题,虚拟地址逻辑地址物理地址

逻辑地址:CPU所生成的地址。物理内存被划分为一小块一小块,每块被称为帧。分配内存时,帧是分配时的最小单位,最少也要给一帧。逻辑地址的表示方式是:前部分是页码后部分是页偏移。例如


1. 物理地址和逻辑地址


物理地址:加载到存储器地址寄存器中的地址、存储器单元的真实地址。 通过前端总线传输的所有内存地址都是物理内存地址,编号从0开始,一直到可用物理内存的顶部。 “北桥”(Nortbridge chip )将这些数字映射到实际的记忆棒。 物理地址是在总线上最终使用的明确编号,没有转换、分页或特权级别检查(no translation、no paging、no privilege checks )。


逻辑地址:CPU生成的地址。 逻辑地址用于内部和编程,且不是唯一的。 例如,在c语言的指针编程中,可以读取指针变量本身的值(操作)。 实际上,该值是逻辑地址,是当前进程数据段的地址(偏移地址),与绝对物理地址无关。


为什么有这两种地址?


个人感受的理由是,逻辑地址分配更灵活,可以接受不唯一,看起来更直观。 例如,在代码中分配了一个数组,该数组在逻辑地址中是连续的,但在物理地址中,该数组占用的页面可能会分散开来,在物理地址中可能会变得不连续,从而影响程序的可理解性。 另外,只有有逻辑地址的概念,才能使用虚拟存储器技术。


2.Paging,分页内存管理方案


)寻呼的最大作用是允许进程的物理地址空间不连续。


物理内存被划分成小块,每个块称为帧。 在分配存储器的情况下,帧是分配时的最小单位,至少必须给出一帧。 在逻辑存储器中,与帧相对应的概念是页。


逻辑地址的前一部分用页码表示,后一部分用页面偏移量表示。


例如,已知逻辑地址为2^m字节,即逻辑地址的长度为m位,而页面大小为2^n字节。 总共有2^(m-n )页。 因此,页码部分占m-n位,之后的n位用于存储页面偏移量。


例如,由于页面大小为4B,逻辑存储器为32b(8页),逻辑地址0的页号为0,页号0对应于帧5,因此逻辑地址映射到物理地址5*4 0=20。 逻辑地址3映射物理地址5*4 3=23。 由于逻辑地址13(4*31、页编号3和偏移1 ),帧编号被映射到物理地址9。


即使采用寻呼技术也不会发生外部碎片。 所有内存都分为帧,但可能会产生内部碎片。 因为框架已经是最小单位,所以框架内部可能有未使用的空间。


按概率计算,每个过程平均可以有一半框架大小的内部片段。


(2)页表的硬件实现


上一节中在页表中所写的内容是将逻辑地址转换为物理地址的关键。 页面表是如何保存的?


每个操作系统都以自己的方式保存页表。 在大多数情况下,会为每个进程分配一个页面表。 现在页表比较大,所以放在内存中。 以前被放在一组专用寄存器中。 它的指针位于进程控制块(PCB )中,当调度程序选择进程并投入运行时,系统会从进程控制块中取出该页表指针并将其发送到用户寄存器。 然后,可以通过此起始地址访问页面表。


页表的存储方法为TBL(Translation look-aside buffer, 翻译后备缓冲器)存储器。 TBL实际上是一组与硬件缓冲区相关的高速内存。 如果没有TBL,操作系统需要两次内存访问才能完成逻辑地址到物理地址的转换,一次访问页面表,一次在页面表中进行搜索。 TBL存储页表条目的一部分,而条目以键值对存储。


(3)页表的数据结构


a.


今年是2013年,在现有的笔记本电脑中,内存地址空间通常在2^32字节以上。 对于具有32位逻辑地址空间的计算机系统,对于4kb(2^12b )的系统页面大小,页表可以具有2^ ) 32-12 )个条目,也就是说,假设每个条目占用4B 此外,页表本身必须分配给连续存储器。


因此,建议Hierarchical Paging(层次化分页),实际上将页码分成两部分,以第一部分为索引,第二部分作为页码的偏移。


例如,考虑一个4kb页面大小的32位系统。 一个逻辑地址分为20位页号和12位页偏移量。 页码分为10位页码和10位页面偏移量,以便重新分页页面表。 这样的逻辑地址可以表示为:


地址转换过程如下。


此方法也称为forward-mapped page table(向前映射表),因为地址是从外向内转换的。


推荐阅读
author-avatar
温济鸿_345
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有