lab2总结

发布时间 2023-08-28 15:54:29作者: Big_Hunzi

感觉这部分很细节,我就总结下几个点吧。

大致过程总结

  • 先是物理内存:
    申请内存先把物理页组织好。此时有几个页已经被占用了,需要处理对应PageInfo结构体。然后再封装物理内存的申请过程。此处就完成了。之后就进入虚拟内存操作过程。
  • 然后是虚拟内存,即管理页表:
    插入和删除虚拟地址到物理地址映射,并在需要时创建页表页等组件函数。
  • 然后利用这些组件要把虚拟内存初始化:
    按照inc /memlayout.h显示的布局。来设置适当的虚拟到物理映射。此时我们所规定的内核空间全都被映射占用。

PageInfo结构体

其实在cs:app的书中讨论过空闲物理内存的组织方式,更好的办法应该是内嵌链表。
PageInfo结构体中有pp_ref记录虚拟页引用数。

Linux如何屏蔽段。

先讲下怎么访问段:
全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址。GDT表中有段描述符。段寄存器CS SS等存段选择子,根据段选择子可以访问段描述符。段描述符中有起始地址和size。

现在再讲如何屏蔽就很简单了。每个段基址0,size4G即可。

当前页目录的物理地址存储在CPU寄存器CR3中,也称为页目录基寄存器(PDBR)。