【译】x86程序员手册39-10.3切换到保护模式
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之前与之后,当前执行的页应当映射到同一个物理地址。
- A 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切换到保护模式的更多相关文章
- 【译】x86程序员手册26-7.5任务切换
7.5 Task Switching 任务切换 The 80386 switches execution to another task in any of four cases: 80386在以下四 ...
- 【译】x86程序员手册01
Intel 80386 Reference Programmer's Manual 80386程序员参考手册 Chapter 1 -- Introduction to the 80386 第1章 - ...
- 【译】x86程序员手册10 - 第4章系统架构
1.1.2 Part II -- Systems Programming 系统编程 This part presents those aspects of the architecture that ...
- 【译】x86程序员手册38-10.2实在址模式下的软件初始化
10.2 Software Initialization for Real-Address Mode 实地址模式的软件初始化 In real-address mode a few structur ...
- 【译】x86程序员手册31- 第9章 异常和中断
Chapter 9 Exceptions and Interrupts 第9章 异常和中断 Interrupts and exceptions are special kinds of control ...
- 【译】x86程序员手册11- 4.1系统寄存器
4.1 Systems Registers 系统寄存器 The registers designed for use by systems programmers fall into these cl ...
- 【译】x86程序员手册09-第3章程序指令集
注:觉得本章内容与理解操作系统不直接相关,所以本章并未看完,也就没有翻译完,放在这里中是为了保证手册的完整.有兴趣的人可以去原址查看. https://pdos.csail.mit.edu/6.828 ...
- 【译】x86程序员手册03 - 2.1内存组织和分段
2.1 Memory Organization and Segmentation 内存组织和分段 The physical memory of an 80386 system is organized ...
- 【译】x86程序员手册02 - 基本的程序模式
Chapter 2 -- Basic Programming Model: 基本的程序模式 Introduces the models of memory organization. Defines ...
随机推荐
- jetty9 web app的部署
jetty9将web app和web app的context配置文件都放在${JETTY_HOME}/webapps下面. 例如,如果有一个myapp.war,首先将其放入${JETTY_HOME}/ ...
- Supporting IPv6-only Networks
Supporting IPv6-only Networks - Support - Apple Developer https://developer.apple.com/support/ipv6/ ...
- 反爬统计 数据库 sql CASE
-- 经排查日志,发现ordertest.com下的url检测,频繁<Response [403]>,Forbidden;再进一步查询数据库数据:逐日统计错误临时表test_error_t ...
- GET 与 POST 的理解
1 HTTP请求 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信. HTTP 的工作方式是客户机与服务器之间的请求-应答协议. 比如,客户端(浏览器) ...
- 剑指Offer面试题11(Java版):数值的整数次方
题目:实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数,同一时候不须要考虑大数问题 1.自以为非常easy的解法: ...
- echo 到 stderr
This question is old, but you could do this, which facilitates reading: >&2 echo "error& ...
- I.MX6 各模块 clock 查询
/********************************************************************* * I.MX6 各模块 clock 查询 * 说明: * ...
- 【HNOI 2008】 越狱
[题目链接] 点击打开链接 [算法] 显然,越狱情况数 = 总情况数 - 不能越狱的情况数 很容易发现,总情况数 = M^N 不能越狱的情况数怎么求呢? 我们发现,不能越狱的情况,其实就是第一个人任选 ...
- 【Bitset】 BZOJ4810
难得学习一下C++的库..[至今连map,vector都没用过的我.. 首先#include<bitset>或<bits/stdc++.h> 定义函数: { bitset & ...
- Linux 常用命令十二 top
一.top命令 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以 ...