10.3 Switching to Protected Mode 

切换到保护模式

Setting the PE bit of the MSW in CR0 causes the 80386 to begin executing in protected mode. The current privilege level (CPL) starts at zero. The segment registers continue to point to the same linear addresses as in real address mode (in real address mode, linear addresses are the same physical addresses).

设置CR0中的MSW的PE位将导致80386开始在保护模式下执行。当前特权级别(CPL)开始时为0。段寄存器继续指向一个和实地址模式下相同的线性地址(在实地址模式中,线性地址与物理地址相同)。

Immediately after setting the PE flag, the initialization code must flush the processor's instruction prefetch queue by executing a JMP instruction. The 80386 fetches and decodes instructions and addresses before they are used; however, after a change into protected mode, the prefetched instruction information (which pertains to real-address mode) is no longer valid. A JMP forces the processor to discard the invalid information.

设置PE标志后,初始化代码必须通过执行一个JMP指令来刷新处理器的指令预取序列。80386取到并编码指令并在使用前进行寻址;然而,在进入保护模式后,预取的指令信息(与实地址模式有关)不再有效。JMP强制处理器抛弃无效的信息。

10.4 Software Initialization for Protected Mode 

保护模式的软件初始化

Most of the initialization needed for protected mode can be done either before or after switching to protected mode. If done in protected mode, however, the initialization procedures must not use protected-mode features that are not yet initialized.

大部分保护模式需要的初始化即可在切换到保护模式之前做,也可以在切换后做。如果在保护模式中做,初始化程序必须不使用保护模式的特性,因为他们还没有被初始化。

10.4.1 Interrupt Descriptor Table 中断描述符表

The IDTR may be loaded in either real-address or protected mode. However, the format of the interrupt table for protected mode is different than that for real-address mode. It is not possible to change to protected mode and change interrupt table formats at the same time; therefore, it is inevitable that, if IDTR selects an interrupt table, it will have the wrong format at some time. An interrupt or exception that occurs at this time will have unpredictable results. To avoid this unpredictability, interrupts should remain disabled until interrupt handlers are in place and a valid IDT has been created in protected mode.

IDTR即可在实地址模式装入也可以在保护模式中装入。然而,保护模式下中断表的格式与实地址模式下的不同。切换保护模式和修改中断表格式不能同时进行;因此,如果IDTR选择一个中断表,它在某个时段将有一个错误的格式,这是不可避免的。在这个时刻发生的中断或异常将引发不可预知的结果。为避免这种不可预知的问题,中断应当保持关闭状态,直到中断处理程序被放置,并且一个有效的IDT已经在保护模式下创建好。

10.4.2 Stack 栈

The SS register may be loaded in either real-address mode or protected mode. If loaded in real-address mode, SS continues to point to the same linear base-address after the switch to protected mode.

SS寄存器即可以在实模式下也可以在保护模式下装入。如果在实模式下装入,在切换到保护模式后,SS继续指向同一个线性基址。

10.4.3 Global Descriptor Table 全局描述符表

Before any segment register is changed in protected mode, the GDT register must point to a valid GDT. Initialization of the GDT and GDTR may be done in real-address mode. The GDT (as well as LDTs) should reside in RAM, because the processor modifies the accessed bit of descriptors.

保护模式中任何段寄存器在被修改前,GDT寄存器必须指向一个有效的GDT。GDT和GDTR要在实模式中初始化。GDT(此外LDT也一样)应当保存在RAM中,因为处理器会修改描述符中的访问位。

10.4.4 Page Tables 页表

Page tables and the PDBR in CR3 can be initialized in either real-address mode or in protected mode; however, the paging enabled (PG) bit of CR0 cannot be set until the processor is in protected mode. PG may be set simultaneously with PE, or later. When PG is set, the PDBR in CR3 should already be initialized with a physical address that points to a valid page directory. The initialization procedure should adopt one of the following strategies to ensure consistent addressing before and after paging is enabled:

页表和CR3中的PDBR可以实模式中或保护模式中初始化;然而,CR0的分页启用位(PG)直到处理器工作在保护模式中下才能设置。当设置PG时,CR3中的PDBR应当已经使用物理地址初始化过,并且指向一个有效的页目录。初始化程序应当采取下面的策略之一来确保分页启用之前与之后连续处理:

  • The page that is currently being executed should map to the same physical addresses both before and after PG is set.

设置PG之前与之后,当前执行的页应当映射到同一个物理地址。

  • JMP instruction should immediately follow the setting of PG.

设置PG后,应当马上个JMP指令。

10.4.5 First Task 第一个任务

The initialization procedure can run awhile in protected mode without initializing the task register; however, before the first task switch, the following conditions must prevail:

在没有初始化任务寄存情况下,初始化程序可以在保护模式中执行片刻;然而,切换到第一个任务之前,下列条件必须满足:

  • There must be a valid task state segment (TSS) for the new task. The stack pointers in the TSS for privilege levels numerically less than or equal to the initial CPL must point to valid stack segments.

新任务必须有一个有效的任务状态段(TSS)。TSS中的栈指针必须指向一个有效的栈段,该TSS的特权级别在数值上必须小于或等于初始CPL。

  • The task register must point to an area in which to save the current task state. After the first task switch, the information dumped in this area is not needed, and the area can be used for other purposes.

任务寄存器必须指向一个用来保存当前任务状态的区域。在切换到第一个任务后,取出这个区域的信息不是必须的,这个区域可以用做其他目的。

【译】x86程序员手册39-10.3切换到保护模式的更多相关文章

  1. 【译】x86程序员手册26-7.5任务切换

    7.5 Task Switching 任务切换 The 80386 switches execution to another task in any of four cases: 80386在以下四 ...

  2. 【译】x86程序员手册01

    Intel 80386 Reference Programmer's Manual 80386程序员参考手册 Chapter 1 -- Introduction to the 80386 第1章 - ...

  3. 【译】x86程序员手册10 - 第4章系统架构

    1.1.2 Part II -- Systems Programming 系统编程 This part presents those aspects of the architecture that ...

  4. 【译】x86程序员手册38-10.2实在址模式下的软件初始化

    10.2 Software Initialization for Real-Address Mode   实地址模式的软件初始化 In real-address mode a few structur ...

  5. 【译】x86程序员手册31- 第9章 异常和中断

    Chapter 9 Exceptions and Interrupts 第9章 异常和中断 Interrupts and exceptions are special kinds of control ...

  6. 【译】x86程序员手册11- 4.1系统寄存器

    4.1 Systems Registers 系统寄存器 The registers designed for use by systems programmers fall into these cl ...

  7. 【译】x86程序员手册09-第3章程序指令集

    注:觉得本章内容与理解操作系统不直接相关,所以本章并未看完,也就没有翻译完,放在这里中是为了保证手册的完整.有兴趣的人可以去原址查看. https://pdos.csail.mit.edu/6.828 ...

  8. 【译】x86程序员手册03 - 2.1内存组织和分段

    2.1 Memory Organization and Segmentation 内存组织和分段 The physical memory of an 80386 system is organized ...

  9. 【译】x86程序员手册02 - 基本的程序模式

    Chapter 2 -- Basic Programming Model: 基本的程序模式 Introduces the models of memory organization. Defines ...

随机推荐

  1. C ++模板的声明和实现为何要放在头文件中?

    源: http://blog.csdn.net/lqk1985/archive/2008/10/24/3136364.aspx 如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 ...

  2. 包管理 import debug 模块管理 module

    import sys, os this_file_abspath = os.path.dirname(os.path.abspath(__file__)) ProjectUtil_path = '{} ...

  3. command 'gcc' failed with exit status 1

    https://stackoverflow.com/questions/11094718/error-command-gcc-failed-with-exit-status-1-while-insta ...

  4. Python Import机制备忘-模块搜索路径(sys.path)、嵌套Import、package Import

    出处:http://blog.csdn.net/kernelspirit/article/details/3381666 最近在看<Python源码剖析>,对Python内部运行机制比以前 ...

  5. webpack -v显示的版本与package.json的devDependencies节点显示的webpack版本不一致的问题

    最近在学习webpack,遇到个奇葩的问题.就是安装完成webpack后,查看安装的webpack版本与package.json中显示的版本不一致, webpack是局部安装的,非全局安装, 命令1: ...

  6. bzoj 3144 [Hnoi2013]切糕【最小割+dinic】

    都说了是'切'糕所以是最小割咯 建图: 每个点向下一层连容量为这个点的val的边,S向第一层连容量为inf的边,最后一层向T连容量为自身val的边,即割断这条边相当于\( f(i,j) \)选择了当前 ...

  7. 只需3步,即可将你的Chromium Edge 浏览器设置成中文

    最近,Chromium Edge 浏览器推出了添加语言包的功能,于是我们可以轻松将其界面设置成中文的. 第1步: 升级浏览器到最新版 在Chromium Edge 浏览器的地址栏中输入: edge:/ ...

  8. Luogu P1140 相似基因 【dp】By cellur925

    最近博客更不起来...然后又(照例)犯鼻炎了唉难受. 题目传送门 我们首先可以预处理碱基间的权值表.然后讲读入的碱基转化为数字,就变成了“数字匹配使权值最大”的问题.我们显然可以用动态规划解决. 两个 ...

  9. linux自动删除30天前的日志文件

    linux应用总结: 自动删除n天前的日志文件: . 使用的命令格式如下: find 对应目录 -mtime +天数 -name "文件名" -exec -rm -rf -name ...

  10. 【BZOJ3309】DZY Loves Math(线性筛)

    题目: BZOJ 3309 分析: 首先,经过一番非常套路的莫比乌斯反演(实在懒得写了),我们得到: \[\sum_{T=1}^n \sum_{d|T}f(d)\mu(\frac{T}{d})\lfl ...