一、实模式与保护模式
X86 CPU保护模式是最值得深入研究的问题。要搞清楚保护模式需要先了解实模式,实模式与保护模式有古代王权更替的味道。
实模式是8086时代的产物,8086的寄存器都是16位的,其中AX,BX,CX,DX又可以拆分为高8位,与低8位寄存器使用^[1]^。8086有20条地址线,换而言之8086寻址空间有1MB!
8086采用段加偏移的方式进行内存访问,理论上可以寻遍1MB空间,而其在1MB的空间中没有访问限制,不管是内核程序还是用户程序,这就给程序运行留下了隐患。
若程序A在0x00000x0051空间储存运行,程序B在0x00800x00ff储存运行,在特定情况下,程序B向0x0031~0x0070写入数据,那程序A数据便被覆盖造成程序A执行错误。如果程序A是内核的基础性程序,那代价将是巨大的。
英特尔注意到了该问题的严重性,在后续的80286便推出了保护模式。80286有24条地址线,在保护模式下CPU的段寄存器将不再保存段地址,转而保存段选择子,真实的段地址将保存在段寄存器描述符的高速缓存中(24位),当80286进入保护模式将获得16MB寻址空间。
由于引入了段选择子,段选择子记录了内存的访问权限,低权限程序将失去访问高权限内存的资格,增加了系统的安全性与稳定性。
80286还是16位处理器,虽然有24根地址线,但由于寄存器还是16位,即使运行在保护模式下段长度也无法超过64KB,加上不久后32位处理器时代来临,16位保护模式就鲜为人知。
80386是Inter第一款32位产品,其完全兼容了8086处理器,在实模式下80386将寄存器低16位当作8086寄存器使用,在实模式下80386相当于一块飞快的8086,同时386提供V86模式,在这种模式下可以模拟成多块8086。80386寻址空间达到了4GB,加上保护模式的应用,造就了386的划时代意义^[2]^。
二、什么是操作系统
从8086的实模式到32位386的保护模式,从段加偏移的寻址方式到根据段选择子寻址的过程,我们会愈发觉得操作系统就像一个厂长,而处理器如同一个智商不高的仓库管理员。
仓库管理员的日常工作就是出库、入库、货物移库、按照各种表格管理货物,处理器的工作也是这样的。他手下有AX,CX,DX,BX,SP,BP几大仓库,还有ES,CS,SS,DS,SI,DI工人,加上FS,GS两个临时工;仓库门口有一个大黑板,上面是各种标志寄存器的值,管理员手上有张大表格叫GDT(全局描述符表),还有几个记事本,叫LDT(局部描述符表),每种记事本只能使用特定的笔写,GDT的笔GDTR,LDT的笔叫LDTR。
操作系统是厂长,现在有一个单子:要向屏幕省输出一行文字。操作系统下令,将AX,BX等几个仓库里面的货物先挪到空地(栈)上,将一些新货物(指令、数据)放进去。接着指示货车将这些货物运到0x3d4,0x3d5市(屏幕省省会)。货物运到后,随车的管理员下来将货物名单一个接着一个的读,同时工人将读出名字的货物搬下来送给货主,于是我们就会看到屏幕出现文字了。整个过程处理器只是按操作系统给的指令将货物调度,至于这些指令、货物的意义它是不知道的。加减乘除不过是货物的累积与消除,两件货物叠加在一起就是加法,多件货物叠加就是乘法;有些货物出仓就是减法;将货物按5个归堆,堆数就是商,5个是除数,货物总量是被除数,如果有些货物不足一堆,那就是余数。所有东西都是自然而然。
有时候一连来几个单子(任务)那处理器会拿出GDT和LDT分配每个单子的先后顺序。在保护模式还引入了页管理机制,其作用就是按照各个货车的货物大小多少给他们分配落货地点。而大名鼎鼎的中断机制不过是厂区或者厂区所在地出现意外操作系统根据预案采取处理方法的手段。
进行完理论铺垫,下一步就是揭开保护模式的面纱!
参考文献:
[1] 徐建民.汇编语言程序设计[M].第2版.电子工业出版社, 2005.
[2] WilliamStallings著,王涌等译. 操作系统--内核与设计原理[M]. 第四版. 电子工业出版社, 2002.
[3]谢焕强.精简32位Linux操作系统在X86上的设计与实现[D].2022.23-24.
-
寄存器
+关注
关注
31文章
5342浏览量
120305 -
cpu
+关注
关注
68文章
10859浏览量
211704 -
操作系统
+关注
关注
37文章
6818浏览量
123320
发布评论请先 登录
相关推荐
评论