os学习之每日疑问大总结-11.24

1。为什么分段会对内存有保护作用?
因为内存中每一个段都会对应着一个段描述符,如下图:
段描述符
其DPL(Descriptor Privilege Level)位规定了内存段的特权级,当cpu在访问内存段的时候,严格受段定义大小及访问特权级等信息的控制,任何越限和越权的访问都将会被拒绝,并引起异常中断。

2。GDTR和段选择子之间的区别
段选择子是存放在一个寄存器中的,其通过GDT/LDT找到所对应的段描述符,从而得到其段基址,然后于其逻辑地址部分的偏移地址加起来,得到线性地址。

而GDTR是一个硬件的部件,通过其就能知道GDT在内存中的位置。GDT本身不是一个段,而是线性地址空间中的一个数据结构。GDT的线性基地址和限长必须被装载入GDTR寄存器.

3.MMU和分段,分页之间的关系

MMU由一个或一组芯片组成,其功能是把逻辑地址映射为物理地址,即进行地址转换。MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件。

TLB
大部分程序倾向于对较少的页面进行大量的访问。因此,只有一小部分页表项经常被用到,其它的很少被使用。
采取的解决办法是为计算机装备一个不需要经过页表就能把虚拟地址映射成物理地址的小的硬件设备,这个设备叫做TLB(翻译后援存储器,Translation Lookside Buffer), 有时也叫做相联存储器(associative memory)。
它通常在MMU内部,条目的数量较少,80386有32个。每一个TLB寄存器的每个条目包含一个页面的信息:有效位,虚页面号,修改位,保护码,和页面所在的物理页面号,它们和页面表中的表项一一对应。

当一个虚地址被送到MMU翻译时,硬件首先把它和TLB中的所有条目同时(并行地)进行比较,如果它的虚页号在TLB中,并且访问没有违反保护位,它的页面会直接从TLB中取出而不去访问页表,如虚页面号在TLB但当前指令试图写一个只读的页面,这时将产生一个缺页异常,与直接访问页表时相同。
如MMU发现在TLB中没有命中,它将随即进行一次常规的页表查找,然后从TLB中淘汰一个条目并把它替换为刚刚找到的页表项。因此如果这个页面很快再被用到的话,第二次访问时它就能在TLB中直接找到。
在一个TLB 条目被淘汰时,被修改的位被复制回在内存中的页表项,其它的值则已经在那里了。当TLB从页表装入时,所有的域都从内存中取得。必须明确在分页机制中,TLB中的数据和页表中的数据的相关性,不是由处理器进行维护,而是必须由操作系统来维护,高速缓存的刷新是通过装入处理器(80386)中的寄存器CR3来完成的。(见刷新机制flush_tlb())这里要还提到命中率,即一个页面在TBL中找到的概率。一般来说TLB的尺寸大可增加命中率,但会增加成本和软件的管理。所以一般都采用8–64个条目的数量。假如命中率是0.85,访问内存时间是120那秒,访TLB时间是15那秒。那么访问时间是:0.85*(15+120)+(1-0.85)*(15+120+120)=153那秒。

4。段寄存器的构成
由16位的段选择子和64位的段描述符构成
段寄存器组成成分

猜你喜欢

转载自blog.csdn.net/qq_37414405/article/details/84421285