- x86的工作模式
- 实模式
- 只使用到了32根地址线中的20根
- 寻址方式:段寄存器*16+offset
- 不分页
- 所有的段可读,写,执行
- 不分优先级
- 中断是通过中断向量表定位中断服务程序的地址
- 两个辅助段寄存器FS,GS
- 保护模式
- 使用了全部的32位地址线
- 支持分页
- 任务之间可以切换(任务的环境保护有处理器自动执行)
- 分优先级(0-34)
- 保护模式与实模式之间可以切换
- 虚拟86模式:为了能在保护模式下执行8086的程序而提出的
- windows的内存管理
- DOS内存的安排:程序只能寻址1M。而且1M中有很多是系统程序,真正能让用户使用的不到640K
- 80386内存寻址
- 段描述符:因为80386的寄存器都是32bit的,所以完全可以用一个寄存器寻址4G的空间,不再需要段寄存器的帮助就能定位。但是在保护模式下,程序的段是有保护属性的,所以就用段寄存器来实现这个功能
- 段描述符表:GDTR(48bit)指向GDT,里面包含操作系统的代码段,数据段,堆栈段以及个任务的LDT段的描述符。LDTR (16bit)指向LDT,里面包含每个任务自己的数据段,代码段,堆栈段的描述符以及一些门描述符。
- 16bit段寄存器:高13bit表示offset,0/1位表示程序当前优先级,2位表示描述符位置
图1.3 保护模式下GDTR,LDTR,全局描述符表,局部描述符表和选择器的关系
-
内存分页:分页的引入是为了解决内存分配的问题,让线形地址可以不连续的映射到物理地址。
-
CR3寄存器里是当前页目录地址
-
页表规定的不仅是地址映射关系,同时还规定页的访问属性
-
页的大小为4K
-
-
WINDOWS内存安排:在硬盘上建立物理内存的2倍左右大小为交换文件
-
WIN32汇编的内存寻址:如果以上说的这些纷繁复杂的过程要程序员自己去完成,那这个世界上估计就没有程序员了。所以WINDOWS为我们安排好了一切,用户程序在建立的时候,代码段,数据段,堆栈段,全部都预定义好了段描述符。
-
图1.6 Windows的内存安排
-
WINDOWS的特权与保护
-
中断和异常
-
中断向量表(IDT):门:中断是一个由低权程序调用高权程序的过程,如果低权程序能调用高权程序的任意一个地方,那么优先级就没有意义了,所以WINDOWS引入了门的概念,低权程序进入高权程序必须经过门重定向,门指向某优先级高的程序的入口点。
-
IDT:不仅像8086一样包含了处理程序入口地址,还有门的种类
-
IDT的长度与在内存中的地址可编程
-
IDTR(48bit):指向IDT地址的寄存器。高32:地址,低16:长度
-
-
-
保护机制
-
页表:默认页表将代码段的属性设为不可写,数据段也只有变量部分可写
-
任何端口(如串口)不允许直接操作
-
-