为您找到与将逻辑地址转换为物理地址的公式相关的共200个结果:
物理地址是明确的、最终用在总线上的编号。那么逻辑地址转物理地址怎么转?读文网小编为大家介绍逻辑地址转物理地址的解决方法。希望大家喜欢。
物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privilege checks)。
逻辑地址:CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。
(具体步骤 共三步)
1.确定虚拟地址(物理地址)的有效位
例如:假设页面大小1KB,共32页。(页面:逻辑地址 页框:物理地址)
由32(KB)=32×1024(B) 即等于32×1024 字节
二进制用多少位能有效表示这么多字节呢——答是:15位 因为32×1024=2^5×2^10=2^15
2.再次确定逻辑地址页面位数 你应该知道:逻辑地址=页号+页面
还是以上假设,那么页面大小为1KB=1024字节 同样的方法计算出表示位数:10位
如果给你逻辑地址:0000 1111 1000 0000
那么由:011+11100000000(相当于 页号+页面(10位))推得出页号011=3
3.根据页号找出对应的页框号
由 物理地址=页框号×页块大小(页块大小是等于页面大小的)+页内位移(即页面逻辑地址)
根据上面 物理地址=页框号×1024B + 1110000000 ( 这里的相加是指位置上而言)
例如:110+110=110110(即高地址+低地址)
提问:在一分页存储管理系统中,逻辑地址长度为16位,页面大小为4096B,现有一逻辑地址为2F6AH,且第0、1、2页依次存放在物理块5、10、11中,问相应的物理地址为多少?
答:4096B=2^12B
16位寻址一共2^16B
分页存储。共分的页:2^16/2^12=2^4=16 共分16页。
第0页的地址范围 0 - FFFH
第1页的地址范围 1000H - 1FFFH
第2页得地址范围 2000H - 2FFFH
.....
第11页 B000H - BFFFH
第15页 F000H - FFFFH
2F6AH=10 1111 0110 1010 在2页的范围对应物理块11
所以物理地址为:
2F6AH - 2000H + B000H = F6AH + B000H= BF6AH
看过“ 逻辑地址转换物理地址公式 ”
浏览量:2
下载量:0
时间:
逻辑地址和物理地址是什么?逻辑地址如何转换成物理地址?看到很多人都在问这个问题,小编为大家分享了逻辑地址如何转换成物理地址的方法,下面大家跟着读文网小编一起来了解一下吧。
在对硬盘进行故障维护或者进行相关软件开发时,不仅需要将硬盘的物理地址转换成逻辑地址,有时还需要知道逻辑地址转换为物理地址的方法。
根据计算机中符号的常用法则,我们用“div”表示除法运算,用“mod”表示取余数运算,其他参数如C、H、S依然表示硬盘当前的柱面、磁头和扇区号,C1、H1、S1、NS和NH含义也和上面一致。在已知硬盘逻辑地址即逻辑扇区号LS的情况下,求硬盘对应的物理地址的柱面号C、磁头号H和扇区号S的方法如下:
C=((Ls div NS)div NH)+ C1
H=((Ls div NS)mod NH)+ H1
S=(Ls mod NH)+ S1
实例:设硬盘的磁头号为4,每磁道17个扇区,其中逻辑硬盘D的第一个扇区在硬盘的柱面120、磁头1、扇区1上,求逻辑D盘上逻辑扇区为2757编号对应的物理地址是多少?
分析:根据上面的已知条件,我们可知C1=120, H1=1,S1=1,NS=17,NH=4,Ls=2757,则将这些数据代入上面的公式可得:
C=((2757 div 17)div 4)+120=160
H=((2757 div 17)mod 4)+1=3
S=(2757 mod 17)+1=4
即逻辑扇区号Ls为2757的硬盘对应的物理地址为柱面号是160、磁头号是3和扇区号为4。
看过“ 逻辑地址如何转换成物理地址”
浏览量:3
下载量:0
时间:
Excel中经常需要把公式形式转换成数值形式,公式形式转换成数值形式具体该如何操作呢?下面是读文网小编带来的关于excel单元格公式转换数值形式的方法,希望阅读过后对你有所启发!
公式转换数值步骤1:如图Excel表格中一份促销产品表,裸价列价格等于零售价的2折。
公式转换数值步骤2:可鼠标放在裸价列中任意单元格中查看到公式。
公式转换数值步骤3:如图标示。让裸价价格以数值形式表现,该怎样做呢?
公式转换数值步骤4:首先鼠标放到G列中右击--插入,单元格右移,插入一个空白列,G2单元格中输入:裸价1,。
公式转换数值步骤5:然后鼠标复制裸价1单元格数据,复制选框,或选中后按快捷复制键:Ctrl+C,接着鼠标放在G3单元格中右击:“选择性粘贴”
公式转换数值步骤6:在弹出的粘贴窗口中,选择:“数值”并点击:“确定”。
公式转换数值步骤7:完成复制,在点击G列裸价1中价格,此时就是数值形式显示咯。
浏览量:21
下载量:0
时间:
Excel中经常需要使用到金额大小写转换公式对金额进行转换,金额大小写转换公式具体该如何使用呢?接下来是读文网小编为大家带来的excel金额大小写转换公式的用法,供大家参考。
步骤1:通过宏VBA自定义函数实现第一步:按下ALT+F11组合键,或者是单击工具——宏——Visual Basic编辑器,进入Visual Basic编程环境,单击“插入” 菜单——模块,复制下面代码,保存,退出关闭。Function N2RMB(M)
y = Int(Round(100 * Abs(M)) / 100)
j = Round(100 * Abs(M) + 0.00001) - y * 100
f = (j / 10 - Int(j / 10)) * 10
A = IIf(y < 1, "", Application.Text(y, "[DBNum2]") & "元")
b = IIf(j > 9.5, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(y < 1, "", IIf(f > 1, "零", "")))
c = IIf(f < 1, "整", Application.Text(Round(f, 0), "[DBNum2]") & "分")
N2RMB = IIf(Abs(M) < 0.005, "", IIf(M < 0, "负" & A & b & c, A & b & c))
End Function
步骤2:返回excel操作界面,在B1单元格输入:= N2RMB (A1),就可以将A1单元格的数字转为人民币大写,然后向下复制公式即可将全部的数字转为人民币大写。
浏览量:6
下载量:0
时间:
虚拟地址转换为物理地址的第一步是将从处理器得到的虚拟地址和TLB中的虚拟地址进行比较。,今天读文网小编与大家分享下虚拟地址与物理地址的转换,有需要的朋友不妨了解下。
CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。
物理地址示意图
如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示[1]。
虚拟地址示意图
MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU通常一页为4K。例如,虚拟地址0xb700 1000~0xb700 1fff是一个页,可能被MMU映射到物理地址0x2000~0x2fff,物理内存中的一个物理页面也称为一个页框(Page Frame)。
内核也不能直接访问物理地址.但因为内核的虚拟地址和物理地址之间只是一个差值0xc0000000的区别,所以从物理地址求虚拟地址或从虚拟地址求物理地址很容易,+-这个差就行了
物理地址(physical address)
用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。
虚拟内存(virtual memory)
这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;
之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。
有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换后的物理地址并非相同的。
——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。
打住了,这个问题再说下去,就收不住了。
逻辑地址(logical address)
Intel为了兼容,将远古时代的段式内存管理方式保留了下来。逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址。以上例,我们说的连接器为A分配的0x08111111这个地址就是逻辑地址。
——不过不好意思,这样说,好像又违背了Intel中段式管理中,对逻辑地址要求,“一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为 [段标识符:段内偏移量],也就是说,上例中那个0x08111111,应该表示为[A的代码段标识符: 0x08111111],这样,才完整一些”
线性地址(linear address)或也叫虚拟地址(virtual address)
跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。
-------------------------------------------------------------
CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。
这样做两次转换,的确是非常麻烦而且没有必要的,因为直接可以把线性地址抽像给进程。之所以这样冗余,Intel完全是为了兼容而已。
物理地址就是,机器内主存的地址,包括RAM和ROM
逻辑地址就是,程序运行在内存中,使用的地址。
虚拟地址就是,cpu支持的内存空间远远大于机器主存的大小,这些多出来的空间对于程序来说是可以用的,这个时候的所有地址都称为虚拟地址
物理地址:最小系统下的存储器的实际地址,一般只是由CPU内存控制器(地址线)可以管理的容量为最大地址,而实际上这个容量(由地址产生的)远大于实际存在的容量;实际的存储器容量所需要的地址(内存)控制器管理的容量;它的大小一般由芯片决定
逻辑地址:相对程序员而言使用的地址,或说程序无需知道具体的实际地址管理数,而只要在系统(操作)允许范围内使用就行了(这时使用的是一种算法控制下的地址,实际上它只是借用地址概念产生的程序运行模式),它所要说明的是方便,也就是一个线性的(最好)的程序(指令)排列方式。它的大小一般由操作系统决定
虚拟地址:将具有存储功能的所有存储器(不仅仅是最小系统概念下的),进行“统一”编址,而不考虑存储器之间的差异(快慢等),这时的地址是一个比逻辑地址理会数学化的编号(地址),它的大小等往往由应用程序决定
看过“虚拟地址与物理地址的转换”
浏览量:2
下载量:0
时间:
Excel中经常需要使用到公式转换文本的技巧,公式具体该如何转换为文本呢?下面是读文网小编带来的关于excel公式转换文本的教程,希望阅读过后对你有所启发!
公式转换文本步骤1:首先,我们来看一下为本次经验制作的数据模型,主要是实现一个单元格的乘法运算。
公式转换文本步骤2:接下来,我们对带有公式的单元格进行转换,选择数据区域。
公式转换文本步骤3:复制数据区域,然后右键,选择性粘贴。
公式转换文本步骤4:在选择性粘贴里,我们选择数值。
公式转换文本步骤5:这样的话,我们就实现了对于公式的转化,转成数值以后,可以设置设置单元格样式。
公式转换文本步骤6:然后选择文本,点击确定。
公式转换文本步骤7:我们就会看到单元格的左上角出现绿色的小三角号,这就表示已经转化成文本格式。
公式转换文本步骤8:接下来呢,我在这里还说一中更为简单的方法,首先,我们将数据区域复制。
公式转换文本步骤9:然后我们新建一个txt文档,将复制的数据粘贴到txt文档中。
公式转换文本步骤10:然后复制txt文档中的数据。
公式转换文本步骤11:设置Excel的单元格格式为本文格式后,直接粘贴到Excel中。
公式转换文本步骤12:最终也会实现公式转文本的效果。
浏览量:3
下载量:0
时间:
IP地址与物理地址怎么转换?对于这个问题,相信网管们都会说很简单,不过我们小白朋友不知道啊,那么IP地址与物理地址怎么转换呢?今天读文网小编与大家分享下IP地址与物理地址转换的解决方法,有兴趣的朋友不妨了解下。
为什么要将IP段地址转化成数字地址?
根据TCP/IP协议规定,IP地址是由32位二进制数组成,而且在INTERNET范围内是唯一的。例如,某台联在因特网上的计算机的IP地址为:
11010010 01001001 10001100 00000010
很明显,这些数字对于人来说不太好记忆。人们为了方便记忆,就将组成计算机的IP地址的32位二进制分成四段,每段8位,中间用小数点隔开,然后将每八位二进制转换成十进制数,这样上述计算机的IP地址就变成了:118.123.15.102。
由于在同一个区域里,IP段都是很相近的,如果拿IP段(118.123.15.102)直接进行比较,在操作上很是麻烦,而且数据的存储也不易实现,所以才会把IP转换成数字地址,再来确定IP段的物理地址。
理解了IP的概念之后,诸如IP(118.123.15.102)怎样转换成数字地址呢?
IP本是32为二进制,为了方便记忆才转化成了四段十进制,所以只要把IP还原成二进制,再转换成十进制就可以得到IP的数字地址。
.NET C# IP与数字地址相互转化:
//IP转换成数字地址
public static uint IPToInt(string ipAddress)
{
string disjunctiveStr = ".,: ";
char[] delimiter = disjunctiveStr.ToCharArray();
string[] startIP = null;
for (int i = 1; i <= 5; i++)
{
startIP = ipAddress.Split(delimiter, i);
}
string a1 = startIP[0].ToString();
string a2 = startIP[1].ToString();
string a3 = startIP[2].ToString();
string a4 = startIP[3].ToString();
uint U1 = uint.Parse(a1);
uint U2 = uint.Parse(a2);
uint U3 = uint.Parse(a3);
uint U4 = uint.Parse(a4);
uint U = U1 << 24;
U += U2 << 16;
U += U3 << 8;
U += U4;
return U;
}
//数字地址转换成IP
public static string IntToIP(uint ipAddress)
{
long ui1 = ipAddress & 0xFF000000;
ui1 = ui1 >> 24;
long ui2 = ipAddress & 0x00FF0000;
ui2 = ui2 >> 16;
long ui3 = ipAddress & 0x0000FF00;
ui3 = ui3 >> 8;
long ui4 = ipAddress & 0x000000FF;
string IPstr = "";
IPstr = System.Convert.ToString(ui1) + "."
+ System.Convert.ToString(ui2) + "."
+ System.Convert.ToString(ui3)
+ "." + System.Convert.ToString(ui4);
return IPstr;
}
转换成数字地址以后是不是查询起来很是方便,只要介于某个IP段,就可以找出具体的物理地址了。当然,前提是有个巨大的IP库。手头上还有一个IP库,大概有36W+的记录。
IP段转换成真实的物理地址可以用在什么地方?
用途有很多啦,
1、比如流量统计啦,
2、I/M聊天工具里的地理位置显示啦,网页上的地理位置显示啦,
3、门户网站有诸多城市区分的,会根据访问者IP来判断访客应该去访问哪个城市的网站板块,
4、有的天气预报网站,默认的就是访客所在的城市。
看过“IP地址与物理地址怎么转换”
浏览量:3
下载量:0
时间:
Excel中的公式转换数值具体该如何转换呢?接下来是读文网小编为大家带来的excel 公式转换成数值的教程,供大家参考。
公式转换数值步骤1:CTRL+C复制,CTRL+V粘贴,打开粘贴选项,用鼠标单击123按按钮。
公式转换数值步骤2:兰色平时也是这样做的,今天无意中发现在“粘贴下拉图标”旁,有一个单词:CTRL,用了excel2010好几年,竟然以前没注意到它。
公式转换数值步骤3:只要松开所有键,再按CTRL键就可以打开选择性粘贴的下拉菜单,接下来需要用光标选择123按钮吗? NO!!我们把光标放在123按钮上,你会发现提示一个字母 V ,这告诉我们,按V就可以完成公式转变为数值了。
浏览量:3
下载量:0
时间:
Excel中公式具体该如何转换成数值呢?下面是由读文网小编分享的excel 公式转换数值的教程,以供大家阅读和学习。
公式转换数值步骤1:如图标示。让裸价价格以数值形式表现,该怎样做呢?
公式转换数值步骤2:首先鼠标放到G列中右击--插入,单元格右移,插入一个空白列,G2单元格中输入:裸价1,。
公式转换数值步骤3:然后鼠标复制裸价1单元格数据,复制选框,或选中后按快捷复制键:Ctrl+C,接着鼠标放在G3单元格中右击:“选择性粘贴”
公式转换数值步骤4:在弹出的粘贴窗口中,选择:“数值”并点击:“确定”。
公式转换数值步骤5:完成复制,在点击G列裸价1中价格,此时就是数值形式显示咯。
浏览量:3
下载量:0
时间:
在Excel中录入好数据以后经常需要用到公式进行格式的转换,比如把数字转换成文本,下面是读文网小编带来的关于excel利用公式把数字转换文本格式的教程,希望阅读过后对你有所启发!
数字转换文本步骤1:首先找出需要转换成文本格式的数字列,比如下图中的A列,然后在空白列中,比如B列的B2,输入公式“=TEXT(A2,”0.00“),其中B2与A2对应,”0.00“指的是小数点为2位数,如果小数点为1位数的可以写上”0.0“,或者为整数的可以写上”0“。(如下图)
数字转换文本步骤2:写完公式之后,直接点击”Enter“回车键,结果就显示出来了,然后把鼠标放到B2边框的右下角。(如下图)
数字转换文本步骤3:当鼠标在B2边框右下角时,会有一个“+”号出现,这是双击鼠标左键进行下拉,这时B列将会显示与A列相对于的数值。(如下图)
数字转换文本步骤4:然后全选B列的所有数列,复制再粘贴,就会出现右下角一个类似粘贴的图标,点击这个图标,再点击一个123数值。(如下图)
数字转换文本步骤5:这时候B列的数字全部都是文本格式显示,再把B列的所有数列复制,然后粘贴到A列中,接着再把B列全部删除,这样A列的所有数字都转化成文本格式了。(如下图)
浏览量:2
下载量:0
时间:
在Excel中经常需要用到公式,其中数字转化成文本也是需要用到公式进行转化的,下面是由读文网小编分享的excel利用公式数字转换文本的方法,希望对你有用。
数字转化文本步骤1:将数字格式转化为文本格式:TEXT(value, format_text),参数含义:
value 数值(可以是对包含数值的单元格的引用);ormat_text (注:使用双引号括起来作为文本字符串的数字格式,例如, "#,##0.00"
如有下表,F列中都是文本格式分数,现在要将这些分数转化为文本格式:
数字转化文本步骤2:鼠标点到H2单元格输入函数“=TEXT(F2,"###")”点击enter。
数字转化文本步骤3:这种格式在Excel表格中是可以复制引用的,所以用这种方法可以对表格中格式进行批量处理。
数字转化文本步骤4:通过这种方法可以再format_text中输入想要的对应格式。
数字转化文本步骤5:同样我们可以用函数将文本格式转化为数字格式。可用VALUE(text),VALUE函数只有一个参数text,表示需要转换成数值格式的文本。text参数可以用双引号直接引用文本,也可以引用其他单元格中的文本。如将下图中文本格式生日转化为数值格式。
数字转化文本步骤6:如将C2单元格的文本可是日期转化为数值格式存在D2单元格,可以将鼠标点击C2单元格输入“=VALUE(C2)”后回车。这种格式同样可以复制。
浏览量:2
下载量:0
时间:
有网友问到小编:什么是逻辑地址和物理地址?怎么转换?针对此问题,读文网小编为大家分享了具体的操作方法,希望对你有帮助!
存储器中每一个单元的地址可以用两种方法表示:
1.逻辑地址:其表达形式为“段地址:段内偏移地址”。
2.物理地址:CPU与存储器进行数据交换时在地址总线上
提供的20位地址信息称为物理地址。
物理地址=段地址×10H+段内偏移量
CPU一次处理的数据是16位,地址总线实际上代表CPU的寻址能力,地址线为20条那么CPU实际的寻址能力就是2的20次方就是1M。实际的物理地址是这样形成的:
段地址*10H+偏移地址,偏移地址用IP指向,IP是16位的。
例如段地址是1234H,偏移地址是4321H
那么实际的物理地址怎么算呢:1234H*10H+4321H=12340H+4321H=16661H
实际上可以这么来理解,就是段地址左移一位后加上偏移地址就得出实际的物理地址。
这里逻辑地址和物理地址的关系又可以用一个比喻来说明:
比如你的学号是0102,这是你的真实地址亦即物理地址,那么又假如01表示你的班级名称,02表示你相对整个班级的位置,这就是逻辑地址,道理是一样的,只不过在实际由逻辑地址合成物理地址的时候需要将物理地址左移一位,再加上偏移地址。
浏览量:3
下载量:0
时间:
在计算机科学中,逻辑地址是什么?线性地址是什么?物理地址优势什么?逻辑地址线性地址物理地址三个地址有什么联系?读文网小编整理了逻辑地址,线性地址以及物理地址的相关资料,下面大家跟着读文网小编一起去了解一下吧。
前面说了Linux中逻辑地址等于线性地址,那么线性地址怎么对应到物理地址呢?这个大家都知道,那就是通过分页机制,具体的说,就是通过页表查找来对应物理地址。
准确的说分页是CPU提供的一种机制,Linux只是根据这种机制的规则,利用它实现了内存管理。
在保护模式下,控制寄存器CR0的最高位PG位控制着分页管理机制是否生效,如果PG=1,分页机制生效,需通过页表查找才能把线性地址转换物理地址。如果PG=0,则分页机制无效,线性地址就直接做为物理地址。
分页的基本原理是把内存划分成大小固定的若干单元,每个单元称为一页(page),每页包含4k字节的地址空间(为简化分析,我们不考虑扩展分页的情况)。这样每一页的起始地址都是4k字节对齐的。为了能转换成物理地址,我们需要给CPU提供当前任务的线性地址转物理地址的查找表,即页表(page table)。注意,为了实现每个任务的平坦的虚拟内存,每个任务都有自己的页目录表和页表。
为了节约页表占用的内存空间,x86将线性地址通过页目录表和页表两级查找转换成物理地址。
32位的线性地址被分成3个部分:
最高10位 Directory 页目录表偏移量,中间10位 Table是页表偏移量,最低12位Offset是物理页内的字节偏移量。
页目录表的大小为4k(刚好是一个页的大小),包含1024项,每个项4字节(32位),项目里存储的内容就是页表的物理地址。如果页目录表中的页表尚未分配,则物理地址填0。
页表的大小也是4k,同样包含1024项,每个项4字节,内容为最终物理页的物理内存起始地址。
每个活动的任务,必须要先分配给它一个页目录表,并把页目录表的物理地址存入cr3寄存器。页表可以提前分配好,也可以在用到的时候再分配。
还是以 mov 0x80495b0, %eax 中的地址为例分析一下线性地址转物理地址的过程。
前面说到Linux中逻辑地址等于线性地址,那么我们要转换的线性地址就是0x80495b0。转换的过程是由CPU自动完成的,Linux所要做的就是准备好转换所需的页目录表和页表(假设已经准备好,给页目录表和页表分配物理内存的过程很复杂,后面再分析)。
内核先将当前任务的页目录表的物理地址填入cr3寄存器。
线性地址 0x80495b0 转换成二进制后是 0000 1000 0000 0100 1001 0101 1011 0000,最高10位0000 1000 00的十进制是32,CPU查看页目录表第32项,里面存放的是页表的物理地址。线性地址中间10位00 0100 1001 的十进制是73,页表的第73项存储的是最终物理页的物理起始地址。物理页基地址加上线性地址中最低12位的偏移量,CPU就找到了线性地址最终对应的物理内存单元。
我们知道Linux中用户进程线性地址能寻址的范围是0 - 3G,那么是不是需要提前先把这3G虚拟内存的页表都建立好呢?一般情况下,物理内存是远远小于3G的,加上同时有很多进程都在运行,根本无法给每个进程提前建立3G的线性地址页表。Linux利用CPU的一个机制解决了这个问题。进程创建后我们可以给页目录表的表项值都填0,CPU在查找页表时,如果表项的内容为0,则会引发一个缺页异常,进程暂停执行,Linux内核这时候可以通过一系列复杂的算法给分配一个物理页,并把物理页的地址填入表项中,进程再恢复执行。当然进程在这个过程中是被蒙蔽的,它自己的感觉还是正常访问到了物理内存。
看过“ 逻辑地址线性地址物理地址三个地址有什么联系”
浏览量:4
下载量:0
时间:
内核也不能直接访问物理地址.但因为内核的虚拟地址和物理地址之间只是一个差值0xc0000000的区别,所以从物理地址求虚拟地址或从虚拟地址求物理地址很容易。那么虚拟地址和物理地址怎么转换?读文网小编整理了修改硬盘物理地址的相关资料。供大家参考!
MVA (Modified Virtual address,修改过的虚拟地址,这个地址由CPU产生#1)
step1.通过TTBR找到粗表描述符
转换表基地址#2 + MVA的粗页表索引 = 粗页表的物理地址
step2.通过粗表描述符找到小页描述符
粗页表基地址#3 + MVA的小页表索引 = 小页表的物理地址
step3.通过小页描述符找到物理地址
小页基地址#4 + MVA的页索引 = 物理地址
step1得到的粗页表的物理地址位定义
step2得到的小页表的物理地址位定义
step3得到的物理地址位定义
注1:严格的说,这个地址是可能是FCSE或ARM926ej-s处理器产生
注2:转换表基地址保存在TTBR,详见TTBR
注3:粗页表基地址保存在粗页表描述符中,详见粗页表描述符
注4:小页表基地址保存在粗页表描述符中,详见小页表描述符
--------------------------------------------------------------------------------------
CP15
系统控制协处理器(CP15)被用来配置和控制ARM926ej-s处理器。cache、mmu都通过CP15的寄存器来控制。需要使用专门的指令访问CP15的寄存器。
ARM926ej-s系统中的地址
ARM926ej-s产生的地址为虚地址(VA),FCSE(快速上下文切换控制器)将VA转换为修改过的虚地址(MVA)供MMU使用,MMU将MVA转换为TCM和AMBA总线的物理地址(PA)。
CP15的c1寄存器
c1寄存器是ARM926ej-s处理器的控制寄存器。该寄存器用来使能或禁用cache、配置MMU。
I 0: 禁用iCache,1使能iCache
C 0:禁用dCache,1使能dCache
如果c1寄存器禁用了cache,小页表的C、B位是无效的。
TLB
MMU是OS分页内存管理的硬件基础。MMU使用TLB(Translation lookaside buffer,即旁路转换缓冲,或称为页表缓冲;用来存放虚拟地址到物理地址的转换表)将虚拟地址转换为物理地址。
TLB保存在SDRAM中。
TTBR
TTBR是Translation Table Base Register的缩写,中文全称是:转换表基地址寄存器。TTBR是协处理器CP15的c2寄存器。
由于读取TTBR时Bit13~Bit0是不可预测的,所以粗页表的起始地址必须是按64K对齐的。
粗表描述符
填充为红色的位固定为0/1。Bit8~Bit5为域控制位,可以定义16个域。
小页描述符
填充为红色的位固定为0/1。AP3~AP0为访问控制位,访问控制位和域控制位配合完成了对内存访问权限的管理。在boot中,禁用域控制,同时将AP3~AP0全部设置为3(任何人都可以读写)。只关注 C cache控制位,B buffer控制位。
#写通。读命中,从Dcche读取数据,读未命中,(cache)行填充;写命中,写数据带Dcache,并缓冲到外边存储器写未命中,缓冲到外部存储器
#写回。读命中,从Dcache读取数据,读未命中,(cache)行填充;写命中,写数据带Dcache ;写未命中,缓冲到外部存储器
虚拟地址到物理地址的转换步骤
已知一个虚拟地址0x01AF5518, 则转换的过程如下:
注意: *这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况*
1.首先把虚拟地址拆分成3个部分(低12位, 中10位, 高10位), 换成2进制如下:
-> 0000 0001 1010 1111 0101 0101 0001 1000
按照10, 10, 12的位数重新排列后
-> (页目录索引)00 000 00110, (页表项索引)10 1111 0101, (偏移)0101 0001 1000
换算成十六进制后可以得到如下结果
页目录索引 = 6, 页表项索引 = 0x2f5 , 偏移 = 0x518
2. 根据当前的CR3寄存器中的物理地址定位页目录表基址
Cr3中存放的是物理地址, 这个物理地址指向进程的页目录表基址, 由此可以得到
页目录表基址(PDE) = Cr3 = 0xAA0E5000
3. 计算页表项的地址
页表地址存放在页目录表(PDE)中的第6个项目中, 也就是
[0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867为该页表属性值, PTE = 0x3D955000
3. 计算页面物理地址
我们要找的页面在这个页表中的第0x2f5项, 所以虚拟地址所在的页的物理地址为
[0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =
假设[0x3D955BD4] = 0x7095e847, 页面的物理地址 x0x7095e000, 0x00000847表示的是页面属性
4. 计算最终的物理地址
由虚拟地址分离的偏移可以计算出最终的物理地址为
0x7095E000 + 0x00000518 = 0x7095E518.
看过“虚拟地址和物理地址转换 ”
浏览量:2
下载量:0
时间:
最近不少朋友问到关于物理地址到逻辑地址这样的问题,那么物理地址到逻辑地址是什么呢?读文网小编整理了物理地址到逻辑地址的相关资料,下面大家跟着读文网小编一起去了解一下吧。
存储器中每一个单元的地址可以用两种方法表示:
1.逻辑地址:其表达形式为“段地址:段内偏移地址”。
2.物理地址:CPU与存储器进行数据交换时在地址总线上
提供的20位地址信息称为物理地址。
物理地址=段地址×10H+段内偏移量
CPU一次处理的数据是16位,地址总线实际上代表CPU的寻址能力,地址线为20条那么CPU实际的寻址能力就是2的20次方就是1M。实际的物理地址是这样形成的:
段地址*10H+偏移地址,偏移地址用IP指向,IP是16位的。
例如段地址是1234H,偏移地址是4321H
那么实际的物理地址怎么算呢:1234H*10H+4321H=12340H+4321H=16661H
实际上可以这么来理解,就是段地址左移一位后加上偏移地址就得出实际的物理地址。
这里逻辑地址和物理地址的关系又可以用一个比喻来说明:
比如你的学号是0102,这是你的真实地址亦即物理地址,那么又假如01表示你的班级名称,02表示你相对整个班级的位置,这就是逻辑地址,道理是一样的,只不过在实际由逻辑地址合成物理地址的时候需要将物理地址左移一位,再加上偏移地址。
逻辑地址: 机器语言指令,用于指定一个操作数或一条指令的地址
表示为[段标识符:段内偏移量]
偏移量:段开始的地方到实际地址之间的距离
线性地址:也称虚拟地址,32位,0x00000000—0xffffffff
物理地址:用于内存芯片级的单元寻址,与处理器和cpu连接的地址总线相对应(与实物内存相联系)
逻辑地址转换物理地址:
内存控制单元(MMU)通过分段单元把逻辑地址转换成线性地址;接着分页单元把线性地址转换成物理地址。
看过“ 物理地址到逻辑地址”
浏览量:2
下载量:0
时间:
物理地址是明确的、最终用在总线上的编号。那么逻辑地址转物理地址怎么转?读文网小编为大家介绍逻辑地址转物理地址的解决方法。希望大家喜欢。
1. 物理地址和逻辑地址
物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privilege checks)。
逻辑地址:CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。
为什么会有这两种地址?
个人觉的原因在于逻辑地址分配更加灵活,可以允许不唯一,看起来也较为直观,例如,一段代码中分配数组,逻辑地址上是连续的,然而在物理地址上,这个数组所占用的页可能分散开来,物理地址上就是不连续的,这样对程序的可理解性上有影响。另外,有了逻辑地址这个概念,才能使用虚拟内存技术。
CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。
物理地址(physical address)
用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。
虚拟内存(virtual memory)
这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;
之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。
有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换后的物理地址并非相同的。
——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。
逻辑地址(logical address)
Intel为了兼容,将远古时代的段式内存管理方式保留了下来。逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址。以上例,我们说的连接器为A分配的0x08111111这个地址就是逻辑地址。
——不过不好意思,这样说,好像又违背了Intel中段式管理中,对逻辑地址要求,“一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为 [段标识符:段内偏移量],也就是说,上例中那个0x08111111,应该表示为[A的代码段标识符: 0x08111111],这样,才完整一些”
线性地址(linear address)或也叫虚拟地址(virtual address)
跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。
浏览量:2
下载量:0
时间:
今天读文网小编给大家介绍一下物理地址和逻辑地址的区别。供大家参考!
参考如下
MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的。MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,
1.MAC地址
网卡MAC地址不是随便定义的,它的组成结构如图所示。
1>后3个字节代表该制造商所制造的某个网络产品(如网卡)的系列号,前3个字节表示代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配
2>以太网的地址为48位,由IEEE统一分配给网卡制造商,每个网卡的地址都必须是全球唯一的。共6个字节的长度。FF:FF:FF:FF:FF:FF为广播地址,只能用在目的地址段,不能作为源地址段。目的地址为广播地址的数据包,可以被一个局域网内的所有网卡接收到。合法的以太网地址第32位组播标志必须为0。作为组播地址时,只能作为目的地址,不能作为源地址。组播地址可以被支持该组播地址的一组网卡接收到。组播地址主要用在视频广播,远程唤醒(通过发一个特殊的数据包使网卡产生一个中断信号,启动电脑),游戏(多个人在局域网里联机打游戏)里等。
逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。
虚拟内存(Virtual Memory) 是指计算机呈现出要比实际拥有的内存大得多的内存量。因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux 0.11内核中,给每个程序(进程)都划分了总容量为64MB的虚拟内存空间。因此程序的逻辑地址范围是0x0000000到0x4000000。
有时我们也把逻辑地址称为虚拟地址。因为与虚拟内存空间的概念类似,逻辑地址也是与实际物理内存容量无关的。
逻辑地址与物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的。
读文网小编介绍了物理地址和逻辑地址区别的相关知识,希望你喜欢。
浏览量:1
下载量:0
时间: