【译】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 ...
随机推荐
- nginx与apache 对比 apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
nginx与apache详细性能对比 http://m.blog.csdn.net/lengzijian/article/details/7699444 http://www.cnblogs.com/ ...
- SVN服务器端的使用
SVN服务器端的使用 1.下载VirtualSVN Server,安装好后打开,右键Repository->新建->Repository创意一个版本库.默认点击下一步,输入要创建版本库的名 ...
- Lightoj 1014 - Ifter Party
I have an Ifter party at the 5th day of Ramadan for the contestants. For this reason I have invited ...
- linux网络socket 接口转
linux网络socket 接口 1.socket函数:一个进程必须做的第一件事就是调用socket函数获得一个文件描述符. ------------------------------------- ...
- POJ1679 The Unique MST —— 次小生成树
题目链接:http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total S ...
- string operation in powershell
https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/15/keep-your-hands-clean-use-powershell- ...
- JavaScript 实现的 SHA1 散列
1.代码:/**** Secure Hash Algorithm (SHA1)* http://www.webtoolkit.info/***/ function SHA1 (msg) { ...
- 还在为AndroidStudio的Gradle版本配置头疼?看看老司机的解决方法吧
在AndroidStudio中新建项目成功后会自动下载对应版本的Gradle,那么下载的Gradle到什么地方呢? Mac上会默认下载到 /Users/<用户名>/.gradle/wrap ...
- 手把手VirtualBox虚拟机下安装rhel6.4 linux位系统详细文档
使用Virtual Box,感觉跟Vmware差不多,我的本子的系统是win7 64位. 下面演示安装的是在VirtualBox里安装rhel 6.4 linux 32位系统.32位系统安装和 64位 ...
- adb: command not found 解決方法(转载)
转自:http://a7419.pixnet.net/blog/post/59806205-adb%3A-command-not-found--%E8%A7%A3%E6%B1%BA%E6%96%B9% ...