常见知识点:
1、虚拟内存:内存管理的技术(1)由虚拟内存将最久未使用的页面放到交换分区中。活动的页面放在内存中。(2)给每个进程分配一个4G的虚拟地址空间。(3)它保证了每个进程的地址空间是隔离的。
2、虚拟地址空间:
3、交换分区:只有被修改的页面才会被交换,没有修改的页面直接被覆盖 LRU算法。
4、缺页异常是MMU在进行地址映射时发生的:(1)先分配页表项、在触发缺页异常分配物理页面,
5、Intel中刚开始的CPU的位数代表ALU可以运算的的数据位数,与数据总线相连,地址总线代表访问的地址空间。一开始CPU的位数为8位、地址总线的位数为16位,8086的CPU位数为16位,地址总线的位数为20位。所以增加了有四个段寄存器CS DS SS ES。
地址映射:软硬件结合,有内核提供页目录、页表、段寄存器、CR0-4寄存器,以及地址,MMU硬件进行地址映射计算。
1、实模式下的地址映射
在CPU刚启动起来,还没有操作系统,强制进入实模式,没有任何的权限,可以直接修改内存,是不安全的。访问的1M的空间。
地址映射方式:段寄存器>>4+IP寄存器(偏移量 逻辑地址)=物理内存的地址。
逻辑地址:一个内存段中的偏移量。
2、保护模式下的内存分段映射:(从1M开始加载,1M是实模式下使用的内存)增加了GDTR、LDTR两个寄存器,寄存器中存放全局描述符表的地址,全局段描述符表类似一个数组,每个数组元素描述了内存的大小、内存的起始地址、内存的访问权限。如图
数组的索引用四个段寄存器来表示,这个段寄存器16位的高13位代表索引,后两位代表是在内内核态还是在用户态。
所以,保护模式下的内存分段的地址映射为:
GDT[段寄存器>>3].基地址+ip(逻辑地址)=线性地址(如果没有开启分页机制,这得到的就是物理地址) 当然这个逻辑地址要与内存长度进行比较。
3、保护模式下的内存分页映射:
页目录、页表、物理页面
有四个有关页面映射的寄存器
这里的页表、物理页面均是以4K对齐的,所以在pgd、 pmd、pte中只需要高20位即可保存下标。64位下要四级映射、32位下只需两级映射。将虚拟地址分为10、10、12分别作为页目录、页表、页面偏移的下标进行映射。
4、缺页异常
物理内存只有在程序运行时必须的时候才会分配物理页面,程序运行的局部性原理。当程序开始执行时,MMU在进行地址映射时出现了缺页异常,发现页表还未进行分配和映射,先分配 页表,在执行又触发了缺页异常,对应的那个页表项还未分分配物理页面,然后再分配物理页面。当然在这个过程中物理页面不够用的话就选某个页面交换到交换分区中。
5、缺页中断和缺页异常的区别:中断有中断处理程序,异常有异常处理程序。中断有硬件中断和软件中断,中断时已经确切的告诉是发生了什么中断,如int中断,中断处理完之后返回执行下一条指令
异常处理程序由于代码的异常,异常处理程序执行完之后将发生异常的代码再重新执行一遍。