80386的三种模式比较
作为计算机专业的,想必大家对这些不陌生了,所以偶写这些东西是平常学习中的一些笔记,如果那些朋友对这些概念有点模糊了,也希望有些帮助.
80386分别由三种工作方式,分别是实模式,保护模式,v86模式,常用的WINDOWS,LINUX 就是工作在处理器的保护模式底下.
为了兼容以前在实模式底下工作的软件,80386支持实模式,但是在实模式底下不能支持多任务处理,所以V86模式应运而生.
下面分别介绍几种模式:
1. 实模式
80386工作在时模式底下是 A0--------A19的20根地址线是可用的,寻址空间为1MB,这个时候80386和8086,8088的寻址方式是一样的,即段寄存器内容左移4位作为段地址,在加上段内偏移地址就构成了20位的物理地址,每个段的最大长度是64K,所以实模式底下物理地址的最高为是0XFFFFFH,若超除了就会被丢弃.在这种模式底下,80386不支持优先级,所以程序都可执行特权指令,不支持硬件上多任务的切换,是单操作系统,DOS既运行在实模式底下.定位中断服务子程序,需要中断向量表,中断向量号乘以4得到中断向量号,再在表中查找中断向量,中断向量有4个字节组成,分别是两个字节的段地址和两个字节的偏移地址,就可得到中断服务程序的入口地址.
这种模式底下可以直接对I/O地址空间,数据段,代码段进行读写.
这时的80386和8086非常相似,80386就象是一个快速的8086,只不过80386有32位的数据线和32位的通用寄存器而8086是16位的.准确的说是准16位的系统
.
2 保护模式
在保护模式底下,逻辑地址由段寄存器和偏移地址组成,不过要得到物理地址可不是实模式底下的方法,首先,段寄存器中存放的不是段基址,而是选择子,系统通过选择子来得到真正的段基地址,然后段基地址和偏移地址相加后得到线性地址,这是通过分段机制实现的,然后再通过分页机制把线性地址转化成物理地址.但是分页机制是可选的.
在保护模式底下,32条地址线全部有效,最大寻址空间可达4GB.支持多任务处理,使用一条指令或者一个中断就可以在任务内或任务间切换.提供了0---3共4个特权级,操作系统运行在最高级上即0级,应用程序运行在低级上,不但实现资源共享,而且实现数据和代码的安全.
不再使用中断向量表来实现中断功能,而是通过各种控制描述符来和特权级检查来完成多任务的实现即中断功能.
以前那些I/O操作的指令不能对I/O端口进行读写,通过特权级和I/O许可位来进行安全检查.
3 V86模式
估计大家已经猜出来了(其实你在前面也讲了!),不管是实模式还是保护模式都有弊端,V86就充当了这两者之间的桥梁.说白了V86模式就是想利用保护模式的优点来运行8086下的程序.它是在保护模式底下工作的,也称虚拟8086模式.
v86模式底下寻址和实模式相同,但20位地址不是真实的物理地址,而是线性地址,寻址空间为1MB,为了使多个虚8086任务不使用同一个位置的1MB地址空间,系统使用了分页机制将不同的V8086任务映射到不同的物理空间上去.每个V86任务认为自己在0-1MB的空间上运行.
这样8086下的程序可以在80386的V86模式底下运行,但是它的一部分指令是是受到保护的,如果执行将发生异常,V86模式受到了V86监控程序的控制,v86监控程序和硬件组成了"8086虚拟机"
V86监控程序控制外部界面,中断,I/O,硬件提供最底端的1MB虚拟存储.,在80386中每个V86模式是相对的,这样就充分发挥了处理器的能力.
补充:
WINDOWS 98在启动的时候就是首先进入实模式,然后修改控制寄存器CR0,是它中的PE位为1,然后就进入了保护模式.
要进入V86模式必须修改EFLAGS寄存器.,V86模式和实模式之间不能切换.
,