1、区分三种不同的地址:
a、逻辑地址,操作系统将程序分段,逻辑地址包含一个段和一个偏移量,通过段和偏移量进行寻址
b、线性地址,也称虚拟地址,32位无符号整数,可表达4GB地址,地址范围从0x00000000~0xffffffff
c、物理地址,用于内存芯片级的内存寻址,物理地址通常是32位或者36位的

2、内存控制单元:
简称MMU,通过一种称为分段单元的硬件电路将逻辑地址转换为线性地址,接着,成为分页单元的硬件电路将线性地址转换为物理地址

3、内存仲裁器:
多处理器中,所有CPU共享同一个内存,意味内存将存在来自CPU的并发访问,从而产生了一种称之为内存仲裁器的硬件电路插在总线和每个RAM芯片之间,作用是当某个RAM芯片空闲了,就准许一个CPU去访问,类似代码中的锁。仲裁器由硬件电路管理,对于编程来说是隐藏的。

4、Intel的分段:
a、实模式,存在的主要原因是要维持处理器与早期模型兼容,让操作系统自举
b、段选择子,一个16位长的字段
c、段寄存器,为了方便找到段选择子,处理器提供段寄存器存储段选择符,其中有CS、SS、DS、ES、FS、GS,这些段寄存器可以用于不同的目的,方法是先保存到内存中,用完再恢复,其中CS是代码段寄存器,SS是栈段寄存器,DS是数据段寄存器,包含静态数据或全局数据段
d、CS寄存器可以指明当前CPU特权级CPL,0代表最高优先级,3代表最低优先级。Linux只使用0级和3级分别称为内核态和用户态

5、段描述符:
描述了段的特征,存放在全局描述符表或者局部描述符表中
段描述符的格式
Base:包含段的首字节的线性地址
G:粒度标志,0为以字节大小为单位,否则为4096字节的倍数计算
Limit:存放段中最后一个内存单元的偏移量,从而决定段的长度,如果G被置为0,则一个段的大小在1个字节到1MB之间变化,否则,在4KB~4GB变化
S:如果置零,则代表该段是系统段,存储如LDT这种关键数据,否则是普通的代码段或者数据段
Type:描述了段的类型特征和它的存取权限
DPL:描述特权级字段,用于限制对这个段的存取。它表示访问这个段所需要的最小优先级
P: Present标记,如果为0则当前不在主存中,否则在,Linux总是置为1,因为Linux总是不把整个段交换到磁盘中去
D或B,是D还是B取决是是数据段还是代码段,如果偏移量地址是32位长,就基本置为1,如果是16位长,基本置为0
AVL:可由操作系统控制,但是被Linux忽略
6、Linux中的段描述符
a、代码段描述符,可放在GDT或者LDT中,代表一个代码段,该描述符置S标志为1
b、数据段描述符,代表一个数据段,可以放在GDT或者LDT中,置S为1
c、TSSD,代表一个任务状态段,也就是说这个段用来保存处理器寄存器的内容,只能出现在GDT中,根据相应的进程是否正在CPU上运行,其Type字段值分别为11或9
d、LDTD,代表这个段描述符描述一个包含LDT的段,相应的Type的值为2,S的标志为0

7、快速访问段描述符
每当一个段选择符被装入段寄存器时,相应的段描述符就由内存装入到对应的非编程CPU寄存器,从而接下来访问那个段都只需要访问寄存器而不需要访问主存中的GDT或者LDT

总而言之,寻址就是段选择符+段描述符产生线性地址,而找段描述符需要到LDT或者GDT中去找(段选择符的作用)