一、内存寻址

1.内存地址分类: 逻辑地址、线性地址、物理地址

  逻辑地址:段选择符+偏移量

  线性地址:C语言中取地址符&打印出来的地址就是这个地址,也叫虚拟地址。

  物理地址:内存总线寻址的具体地址,是真实存在的。

  逻辑地址通过分段单元转换成线性地址,线性地址通过分页单元转换成具体的物理地址。

  逻辑地址---->分段单元---->线性地址------>分页单元------>物理地址

2.硬件分段

  6个段寄存器:存放段选择符,cs,ss,ds,es,fs,gs

  cs:代码段寄存器 

  ds:数据段寄存器

  ss:栈段寄存器

  段描述符:GDT(全局描述符表). LDT(局部描述符表)

  快速访问段描述符。

  分段单元:先检查TI字段找到段描述符所在的描述符表寄存器(GDTR or LDTR),将段选择符中的index字段乘8再加上TI指向的寄存器的值得到段描述符的具体地址,

  把逻辑地址的偏移量加上之前找到的段描述符中Base字段的值则得到了对应的线性地址。

  Linux中的分段:Linux下逻辑地址和线性地址总是相同的。

3.硬件分页: 4KB的页 32位:页目录(最高10位)  页表(中间10位) 偏移量(最低12位) 

  物理地址扩展分页机制(PAE)

  Linux分页:2.6内核版本采用4级分页模型: 

    页全局目录、页上级目录、页中间目录、页表

 

posted @ 2019-03-20 10:21  ciel-coding杂记  阅读(506)  评论(0编辑  收藏  举报