Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2171495
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: LINUX

2012-12-03 23:26:30

 通过对《深入理解LINUX》第二章有关内存寻址方面的内容的阅读以及相关资料的查阅,对内存寻址及管理方面有了初步的认识。

1.  内存寻址主要任务:将逻辑地址转换为物理地址。

逻辑地址:包含在机器语言指令中用来指定一个操作数或一条指令的地址。

线性地址:一个32位无符号整数,也称虚拟地址。

物理地址:用于内存芯片级内存单元寻址,与从微处理器的地址引脚发送到内存总线上的电信号相对应。

 

 

      逻辑地址---通过分段单元-线性地址----通过分页单元---》物理地址

   

2.  在多处理器系统中,所有CPU都共享同一内存,这意味着,RAM芯片可以由独立的CPU并发地访问。由于RAM芯片上的读或写操作必须串行地执行,因此一种所谓内存仲裁器的硬件电路插在总线和每个RAM芯片之间,其作用是如果某一个RAM芯片空闲,就准予一个CPU访问,如果该芯片忙于为另一个处理器提出的请求服务,就延迟这个CPU的访问。

3.  内存寻址的工作是由Linux内核和MMU共同完成的,其中Linux内核负责cr3gdtr等寄存器的设置,页表的维护,页面的管理,MMU则进行具体的映射工作。

4.  硬件MMU,通过分段单元的硬件电路把一个逻辑地址转换成线性地址,再通过分页单元把线性地址转换成物理地址。

5.  分段
6个段寄存器:csssdsesfsgs
其中cs 代码段寄存器,指向包含程序指令的段(一个进程中)
重要:两位字段CPLCurrent Privilege Level),为0表示最高优先级,为3表示最低优先级。Linux只用0级 和 3级,分别称为 内核态、用户态。
ss
栈段寄存器,指向包含当前程序栈的段(一个进程中)
ds
数据段寄存器,指向包含静态数据或任意的数据段(一个进程中)
其他三个寄存器做一般用途,可以指向任意的数据段。

分页
1
) 常规分页:
32
位被分为3个域,Directory(高10位),Table(中间10位),Offset(最低12位)。

2)扩展分页
允许页框大小是 4MB,(之前是4Kb
Directory
:高10
Offset
:低22

PAEphysical Address Extend)。

3Linux中的分页
页全局目录(Page Global Directory
页上级目录(Page Upper Directory
页中间目录(Page Middle Directory
页表(Page Table
偏移(Offset
进程页表:从0x0000 0000 0xbfff ffff,用户态、内核态都可以寻址
0xc000 0000
0xffff ffff,(3G~ 4G-1),只有内核态进程才能寻址。
0xc000 0000
3G)这个值PAGE_OFFSET的值。进程在线性地址空间的偏移量。也是内核生存空间的开始之处。
Linux
在初始化阶段一般是将896MBRAM窗口 映射到 内核线性地址空间。(所以程序对RAM<896MB, 896MB<= x <=4096Mb,x>4096Mb)

 

 

问题:

分段和分页的主要区别,因为感觉它们好像差不多。

虚拟地址为什么可以保护操作系统?

LINUX内核安装在RAM中从物理地址0x0010000开始的地方,也就是从第二个MB开始,那为什么不从第一个MB开始呢?   
阅读(460) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

xuyuanchao_cnu2012-12-05 10:03:25

问的问题很好,但是提交的时间 不在规定的时间范围内。