实模式和保护模式虚拟地址映射

1、CPU位数:CPU的计算能力,ALU数字逻辑单元一次性能计算的最长的整数,

                            ALU一次能处理的的数据宽度

                            数据总线的条数。

2、CPU的数据位数和地址位数不对等

8080、8085 :8位芯片,地址总线都是16条,寻址2^16=64K

====================================================

从8086开始,cpu增加了CS DS SS ES 四个(16位)寄存器

IP寄存器:16位,IP寄存器放偏移量:(偏移量,偏移地址,逻辑地址,一个内存段上的偏移量)

X86体系

8086、80186:16位芯片,地址总线是20位,寻址2^20=1M

80286、80386:32位芯片,地址总线为

====================================================

3、8086芯片时,操作系统不存在,不存在权限控制,访问模式为实模式,直接访问物理地址

【****8086*****】===访问模式: 实地址模式 , 实模式

段寄存器用来放内存起始地址的高16位 (段基址)

为了将20位地址存放到16位的段寄存器,规定每个内存段起始地址都是16的倍数,即低四位全为0。所以段寄存器用来存内存起始地址的高16位

寻址方式:首先指令译码器翻译指令确定需要访问的段寄存器

CS DS SS ES 四个(16位)寄存器

 

实模式地址映射:(内存分段的地址映射)

       段寄存器 <<4          +         IP寄存器                            ===》          物理地址

(内存段的起始地址        (一个内存段上的偏移量

   放到地址总线                       逻辑地址)

   段基址)          

4、保护模式应该记录

内存段的起始地址、内存段的大小、内存的访问权限

【****80386*****】

段寄存器用来存段描述符表的下标

GDTR用来存全局段描述符表GDT的起始地址

保护模式下内存分段的地址映射

GDT[段寄存器>>3].BaseAddr      +       (IP,Length)                 ==》      线性地址

                                                     (IP偏移量与Length比较

                                                         防止访问越界

                                                        逻辑地址)

得到线性地址后,检测内核是否开启内存分页机制(CR0 PG位),

未开启(CR0 PG位为0):线性地址就是物理地址

开启(CR0 PG位为1):线性地址(虚拟地址)=》页面多级映射=》物理地址

实模式和保护模式虚拟地址映射_第1张图片

实模式和保护模式虚拟地址映射_第2张图片

实模式和保护模式虚拟地址映射_第3张图片

保护模式下内存分页的地址映射

线性地址(虚拟地址)分为三部分:10   10   12

10位              10位             12位

xxxxxxxxxx      xxxxxxxxxx      xxxxxxxxxxxx

页目录的下标    页表的下标      物理页面上的偏移量

PG                       PT                    物理页面(物理页面的框号)

一个页面 4K     一个页表4K     2^12=4K

4*1024=4K       1024个页表

实模式和保护模式虚拟地址映射_第4张图片

二级映射:

一个PG有1024项,一个PG项映射了1024个PT,1个PT映射4K的物理页面     1024*1024*4K=4G

二级页目录页表映射能映射4G的物理内存。把32位Linux内核下一个进程4G的地址空间全部映射完。

                                   

每个进程都有自己的页目录和页表。

(1)在页目录的一项中有4个字节,32位。因为所存的PT都是4K的整数倍,所以低12位都是0,不用存。所以在PG中用20位存PT的起始地址,多余的12位存权限。

(2)在PT的一项中有4个字节,32位。因为所存的物理页面都是4K的整数倍,所以低12位都是0,不用存。所以在PT中用20位存物理页面的地址0x00001,0x00002,0x00003,多余的12位存权限。其中最后一位是:

present位,0:页表项所对应的物理页面在交换分区中;

1:页面在物理内存当中

 

(1)物理页面还没分配过

(2)物理页面在交换分区中

(3)物理页面是一个活动页面

(3)在物理页面中,物理页面地址为32位,因为所存的物理页面的起始地址都是4K整数倍,所以低12位都为0,不用存。则地址都为0x00001,0x00002,0x00003

 

5、段页式虚拟地址映射

CPU内总线发出的地址,逻辑地址

软件:进程页目录,页表,CR3寄存器,全局段描述符表存在内存上

硬件计算:逻辑地址====MMU内存管理单元映射=====》物理地址

实模式和保护模式虚拟地址映射_第5张图片


你可能感兴趣的:(实模式和保护模式虚拟地址映射)