什么叫实模式,什么叫保护模式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

什么叫实模式,什么叫保护模式?

概念……没背过

特点……DOS就是实模式的,现在的Winows、Unix之类东西都是保护模式的。实模式下只能访问那可怜的1M内存,要想突破这个限制,麻烦得很,你还记得DOS下那一堆什么XMS (扩充内存)、EMS(扩展内存)吧?本来是连续的64M内存,在DOS下访问,还得调用什么中断,好麻烦。Watcom C++之所以当时有些名气就是占了这个便宜,说集成开发环境,那和BC是没法比,但就因为它提供了DOS4GW支持,可以很方便的是你的程序在DOS访问4G 内存,写32位的程序。

至于保护模式,特性挺多,如线性地址、虚拟内存、权限保护之类的东西都是CPU提供的功能,为开发现代操作系统提供了很多便利。

x86CPU在初始化的时候都是先进入实模式,然后操作系统再切换到保护模式。

详情你找本书看看吧。有一本《386保护模式编程》你可以看看,写得挺多。

dos下内存是很简单的,指针指向的几乎就是实际的物理地址。实模式的指针是16bit的,就是直接访问的内存是640k,640k~1M之间的内存是通过中断把页切换到640k里读写完之后又Move到640k以外的。Dos4GW又提供了别的中断来访问1M~8M以外的内存。你理解在操作系统限制的时候做这些

突破是多么“技巧”的一个年代吧。

其实386已经支持32位指针了,这时又引入了GDT,LDT等概念。怎么说呢....靠,这样吧,比如你有一大衣柜(GDT),有无数的小抽屉(LDT)。这个抽屉是你的,那个是你MM的,你MM翻你的抽屉就会发现套套,你翻你MM的抽屉会发现情书...所以要保护!

《386保护模式编程》书

我看问题的追溯到8086/8088

在80866/88时代,地址线只有20条,只能寻址到1M

8086采用段式存储管理,每个段最多寻址64k ,原因:指针是16bit的

到80286是地址线达到32条,可以寻址到4G的虚拟空间

此时提出了保护模式可采用分页式存储管理,以寻址到4G的空间

现在的操作系统都是基于80286的保护模式区别与8086提供的实地址方式

简介(转)

这篇文章将会着重介绍内存寻址的不同方法。因为我没能全部亲自参与工作--,所以我将用这篇文章作为对不同技术的摼 閿。首先,我将从范围为00000000-000FFFFF 的1M 内存的地址使用分配方式的描述开始。然后我将试图探讨1MB-4GB 范围内存寻址的问题。1M 内存

当我们说到1M 内存时,我们将谈到实模式(real-mode),一种分段式内存模式,不具有32 位寻址和内存分页的功能。

低端内存的特定区域都保留做特殊用途并必须进行正确处理。为了说明这一点,我将列出

1M 内存的映射的实例。

00000 003FF IVT Interrupt Vector Table

(中断向量表)

00400 004FF BDA BIOS Data Area

(基本输入输出数据区)

00500 00501 PRTSCR 1st byte is Print Screen Status BYTE

(第一字节是打印屏幕状态字节)

00501 9xxxx OS OS specific

(操作系统专用区)

07C00 07CFF BOOT Where Boot Sectors are loaded by the BIOS (BIOS装载引导扇区的区域)

9xxxx 9FFFF EBDA Extended BIOS Data Area,varies in size(at le ast 1KB)

(扩展BIOS数据区,大小不等,不小于1KB)

A0000 AFFFF VIDEO Used by the Video Adapter (Graphics Mode) (用于彩色显示适配器)

B0000 B7FFF VIDEO Used by the Video Adapter (Monochrome)

(用于黑白显示适配器)

B8000 BFFFF VIDEO Used by the Video Adapter (Textmode)

(用于文本模式显示适配器)

C0000 C7FFF VIDEO Used by the Video BIOS

(用于显示适配器BIOS)

C8000 EFFFF ROM May be used by adapter ROMS or as memory mapped I/O

(可用于适配器ROM 或内存映射式I/O)

F0000 FFFFF BIOS System BIOS,32K(starts at F8000) or 64K

(系统BIOS,32k <从F8000开始> 或者64K)

内存的映射随系统不同而不同,但大部分都和上例相类似。最有可能出现不同的是范围为C0000-FFFFF的内存。

如果EBDA存在,那么它的尺寸大小将被在BDA内的偏移地址为13H处的一个WORD

的变量指定,单位为KB.操作系统能够使用的内存最多可达到这里所指定的数量,但使用这些内存的程序必须随程序提供共享这些内存的方法,否则将是无用的。有一些其他的程序可能会用到这些内存,如病毒和其他先于OS驻留内存的软件。或借助ROM或通过引导扇区。

下面是一些内存寻址的方法:

方法1:

维护一个类似于在BDA[13]处的指针。初始化将其指向一个段,其紧接于你的操作系统内核和驻留驱动程序所需段之上。然后无论何时你需要加载一个新程序/驱动程序/模块/等等,你只需增加指针到所需的内存量。然后将指针的前一个值和当前值赋给程序,以使之知道其所能使用的内存数量。

方法2:

将内存按照需要划分成块(block),并维护一个位于块头部的小数据结构,包含块状态信息。这是DOS使用的内存管理方法。优点是可以以任意的次序释放内存。缺点是内存碎片问题和新生成块的处理较复杂。

方法3a:

在内存的特定区装载一位图文件,其中每一位代表一个内存块的状态。你可以在“大块和小位图”和“小块和大位图”之间选择。选1KB为块单位是个好主意。与此相关的位图大小可使用期640比特,或80字节。当需要内存时,只需寻找一个数量够大的范围即可。显而易见,使用16字节大小的块将会更灵活,但是相应的需要一个更大的位图-

5KB或5120字节。这种方法需要操作系统或每个程序摷亲 它所能使用的内存的范围,所以当其不在需要时,要正确释放内存。

方法3b:

与上述方法相似,但是每块使用2比特信息位。每块使用2比特,可以记录比使用/未使用更多的信息。你可以使用下例所示值:

相关文档
最新文档