`
cp1985chenpeng
  • 浏览: 44144 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

保护模式-内存寻址

阅读更多

好久以前就想系统的学习一下linux源码了,由于懒得一直没有执行,最近终于下定决定开始学习了。

 

首先从保护模式开始吧。

 

1、系统标志寄存器EFLAGS

系统标志寄存器EFLAGS控制这I/O,可屏蔽中断,调试,任务切换以及保护模式和多任务环境下虚拟8086程序的执行。其中系统标志:VM-虚拟8086模式,RF恢复标志;NT-嵌套标志;IOPL-I/O特权标志;IF-中断允许标志。

 

2、控制寄存器

80386共有4个控制寄存器,分别是CR0,CR1,CR2,CR3。

其中控制寄存器CR0含有系统整体的控制标志。其中:

PE - 保护模式开启位(0bit位)。如果设置了该比特位,就会使处理器开始在保护模式下运行。

MP - 协处理器存在标志(1bit位)。用于控制WAIT指令的功能,以配合协处理的运行。

EM - 仿真控制(2bit位)。指示是否需要仿真协处理器的功能。

TS - 任务切换(3bit位)。每当任务切换时处理器就会设置该比特位,并且在解释协处理器指令之前测试该位。

ET - 扩展类型(4bit位)。该位指出了系统中所含有的协处理器类型。

PG - 分页操作(31bit位)。该位指示出是否使用页表将线性地址变换成物理地址。

 

控制寄存器CR1为保留位,暂时不做任何事情。

控制寄存器CR2用于发生页异常时报告出错信息。当发生页异常时,处理器把引起页异常的线性地址保存在CR2中。操作系统中的页异常处理程序可以检查CR2的内容,从而查出线性地址空间中的哪一页引起的本次异常。

控制寄存器CR3用户保存页目录表页面的物理地址,因此被称为PDBR。由于目录是页对齐的,所以仅高20位有效,低12位保留供更加高级的处理器使用。向CR3中装入一个新值,低12位必须为0;但从CR3中取值时,低12位被忽略。每当用MOV指令重置CR3的时候,会导致分页机制高速缓冲区的内容无效,用此方法,可以在启动分页机制之前,即把PG位置1之前,预先刷新分页机制的高速缓存。

 

3、内存管理

内存管理主要涉及处理器的内存寻址机制。80x86使用两步将一个分段形式的逻辑地址转换为实际物理内存地址。

段变换,将一个由段选择符和段内偏移构成的逻辑地址转换为一个线性地址;

页变换,将线性地址转换为对应的物理地址。

在分页机制开启的时候,通过将前面所述的段转换和页转换组合在一起,即实现了从逻辑地址到物理地址的转换。

 

4、段变换

段变换指的是在保护模式下把逻辑地址转换成线性地址的过程。

逻辑地址中的选择符部分是用于指定一描述符的,它是通过指定一描述符表并且索引其中的一个描述符项完成的。选择符中的索引值(3bit位-15bit位)用于选择指定描述符中8192个描述符中的一个。处理器将该值乘以8,并加上描述符表的基地址即可访问表中指定的段描述符。表指示器(TI,2bit位)用于指定选择符所引用的描述符表。0为GDT表,1为LDT表。请求特权级(RPL,0-1bit位)用于保护机制。

所谓的描述符表分为两类:

GDT(全局描述符表)- 通过GDTR寄存器定位的,指令lgdt和sgdt用于访问GDTR寄存器,lgdt使用内存中一个6字节操作数来加载GDTR寄存器。头两个字节代表描述符长度, 后4字节是描述符表的基地址。

LDT(局部描述符表) - 通过LDTR寄存器定位的,指令lldt和sldt用于访问LDTR寄存器,用法基本与GDTR相同,不过lldt指令所使用的操作数却是一个2字节的操作数,表示全 局描述符表GDT中的一个描述符项的选择符。该选择符所对应的GDT表中的描述符项应该对应一个局部描述符表。

在描述符表中存放的是段描述符,段描述符有两种一般格式。取出描述符表中的基地址部分加上逻辑地址中的偏移值的结果,就是我们所需要的线性地址。

 

5、页变换

页变换指的是将段变换形成的线性地址转化成内存中的物理地址。

首先32位的线性地址被分为页目录项(22-31bit位),页表项(12-21bit位),页内偏移值(0-11bit位)。

我们从CR3中获取页目录的基地址加上线性地址中的页目录项,从中获取到页表项的基地址再加上线性地址中的页表项就是我们所需要的页表项。页表项共32位,其中12-31bit位为页框地址,我们把页框地址左移12bit位再加上页内偏移值,就得到该线性地址对应的逻辑地址了。

分享到:
评论

相关推荐

    保护模式与虚拟内存

    ### 保护模式与虚拟内存详解 #### 一、保护模式的理解与重要性 在深入探讨保护模式之前,我们首先需要明确一点:80x86系列的处理器支持多种工作模式,其中最重要的是**实模式**和**保护模式**。这两种模式在内存...

    Linux内核分析与应用课件第2章(一)内存管理之内存寻址.pdf

    Linux内核分析与应用课件第2章(一)内存管理之内存寻址 ...本节课程主要讲解了内存寻址技术的概念、重要性和发展史,以及保护模式下的寄存器变化。这些知识点对于理解Linux内核分析与应用中的内存管理非常重要。

    保护模式与实模式

    - 在保护模式下,处理器使用32位的地址和指令指针,每个段寄存器可以寻址高达4GB的内存空间(Pentium Pro及以后的处理器可以寻址更大的内存空间)。 ##### 2. 寻址方式 - 保护模式下的寻址方式更加灵活和强大。 - ...

    x86汇编语言-从实模式到保护模式 配套源码及资料

    《x86汇编语言-从实模式到保护模式》是一本深入探讨x86架构汇编语言的经典著作,涵盖了从计算机启动时的实模式到引入内存管理和硬件保护的保护模式的转换过程。这本书的配套源码和资料是学习过程中不可或缺的辅助...

    x86汇编语言 从实模式到保护模式.zip

    此外,通过分页机制,保护模式还可以实现虚拟内存,使得程序可以使用超出物理内存大小的地址空间。 总结,从实模式到保护模式的转变是x86处理器发展历程中的一个重要里程碑,它使得计算机系统从单一任务、有限内存...

    同济大学微机原理保护模式

    在保护模式下,内存寻址机制相比实地址模式发生了显著变化,主要体现在以下几个方面: 1. **段描述符表**: 段描述符表包含了有关每个段的信息,如基地址、长度和访问权限等。每个段寄存器包含一个**选择符**,该...

    保护模式下的80386及其编程 扫描版 pdf

    与前一代产品相比,80386具有更大的寻址能力(支持4GB物理地址空间),更快的运算速度,以及新增加的保护模式等功能,这些特性使得80386成为了当时PC机的主流处理器,并为后续的x86架构发展奠定了基础。 ### 二、...

    X86从实模式到保护模式 源代码

    保护模式则提供了更多的内存保护机制、多任务处理能力以及更广阔的内存寻址能力。 从实模式到保护模式的转换是操作系统启动过程中的重要环节,涉及到对处理器寄存器的设置、内存段的管理以及中断处理的配置等。 ...

    Linux下内存寻址.pdf

    ### Linux下内存寻址知识点详解 #### 一、MMU机制中的分段分页机制 在计算机科学领域,MMU(Memory Management Unit,内存管理单元)是现代微处理器中的一个重要组成部分,它负责处理内存地址映射,使得操作系统...

    保护模式编程 汇编语言

    相比之下,保护模式,特别是针对80386及其后续处理器,是一种更高级的操作模式,它提供了增强的安全性和功能,如更大的内存寻址能力(高达4GB)、存储器分段和分页机制,以及多任务处理支持。 #### 实模式与保护...

    到底什么是实模式和保护模式

    在计算机体系结构中,实模式(Real Mode)与保护模式(Protected Mode)是两种不同的操作模式,主要用于描述处理器如何处理内存寻址、指令执行以及特权级控制等关键功能。这两种模式尤其对基于Intel x86架构的处理器...

    计算机实模式与保护模式

    保护模式支持32位和64位寻址,允许访问更大的内存空间。 ##### 地址寻址范围 在保护模式下,地址寻址范围扩展到了32位,理论上可以访问4GB的物理地址空间。对于某些特定的处理器(如Pentium Pro之前的一些型号),...

    x86汇编语言-从实模式到保护模式 mac环境

    Bochs是一款开源的X86兼容的PC模拟器,它可以模拟整个PC硬件系统,包括CPU、内存、硬盘、显卡等,使得用户能够在Mac系统上运行基于x86的软件,包括实模式和保护模式的汇编程序。安装和配置Bochs是学习过程中至关重要...

    汇编语言编程:保护模式编程教程

    保护模式下,寻址方式更加复杂,除了传统的段:偏移地址外,还可以通过分页机制使用线性地址直接访问内存。 在保护模式中,程序设计需要理解和利用以下几个关键特性: 1. **内存段(Segments)**:每个段都有独立...

    CPU实模式和保护模式

    在保护模式下,CPU采用32位段和偏移量进行寻址,极大地扩展了系统的寻址空间至4GB(对于Pentium Pro及后续的处理器,这一数字可达到64GB)。这种模式不仅提高了数据处理能力,还通过引入更复杂的安全和权限管理机制...

    实模式与保护模式的硬软件原理

    在保护模式下,CPU 的寻址能力得到了极大的提高,可以寻址 4GB 的内存空间。保护模式的引入还提供了虚拟内存的概念,即使物理内存不足,也可以使用硬盘空间来补充内存需求。虚拟内存使得操作系统可以更好地管理内存...

    很详细的保护模式编程

    保护模式是现代x86架构处理器的一种运行模式,相较于早期处理器的实模式,保护模式提供了更多的功能,例如更大的内存寻址空间以及更细粒度的内存访问控制。 #### 二、保护模式编程入门 ##### 2.1 准备工作 为了...

    x86汇编语言从实模式到保护模式 书+源代码+调试工具教程

    实模式是8088/8086处理器的初始工作模式,它提供了对内存的直接访问,而保护模式则是自80286处理器开始引入的一种更安全、功能更强大的模式,允许操作系统进行内存管理和任务隔离。 在实模式下,CPU的地址线直接...

Global site tag (gtag.js) - Google Analytics