阅读:1033回复:8
请教大家一个保护模式的概念。(立刻给分)
下面是我看到的一些概念:
WIN32 程序运行在保护模式下的,保护模式的历史可以追溯到 80286。而今 80286 已成为了历史。所以我们将只把精力集中于 80386 及后续的X86 系列 CPU。Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是说每一个应用程序都拥有其相互独立的 4GB 地址空间,当然这倒不是说它们都拥有 4GB 的物理地址空间,而只是说能够在 4GB 的范围内寻址。操作系统将会在应用程序运行时完成 4GB 的虚拟地址和物理内存地址间的转换。这就要求编写应用程序时必须格守 Windows 的规范,否则极易引起内存的保护模式错误。而过去的 Win16 内存模式下,所有的应用程序都运行于同一个 4GB 地址空间,它们可以彼此\"看\"到别的程序的内容,这极易导致一个应用程序破坏另一个应用程序甚至是操作系统的数据或代码。 和 16 位 Windows 下的把代码分成 DATA,CODE 等段的内存模式不同,WIN32 只有一种内存模式,即 FLAT 模式,意思是\"平坦\"的内存模式,再没有 64K 的段大小限制,所有的 WIN32 的应用程序运行在一个连续、平坦、巨大的 4GB 的空间中。这同时也意味着您无须和段寄存器打交道,您可以用任意的段寄存器寻址任意的地址空间,这对于程序员来说是非常方便的,这也使得用32位汇编语言和用C语言一样方便。 在Win32下编程,有许多重要的规则需要遵守。有一条很重要的是:Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,这样当您要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们,一个最显著的应用例子就是 Windows 的 CallBack 函数中。 我不明白的是: 每个程序只能有一个段吗?每个任务不是有一个LDT表吗?LDT表不就是描述一个程序有几个段吗? 究竟一个程序编译完毕以后,到底有几个段,是谁划分的? 请大虾指教。 [编辑 - 6/6/02 by Jim_little] |
|
|
沙发#
发布于:2002-06-06 15:32
大家帮帮忙吧!谢谢!立即给分。
|
|
|
板凳#
发布于:2002-06-07 08:39
没人回答吗?
失望中。。。。。。 |
|
|
地板#
发布于:2002-06-07 08:51
段,页 是管理内存的概念。 段是实模式下的内存管理概念。
在保护模式没有 段 的概念。只有 页 的概念。 一个进程的所有 代码和数据都在 一个 4G 空间中。 |
|
|
地下室#
发布于:2002-06-07 09:10
shou jian xiang
|
|
5楼#
发布于:2002-06-07 09:12
1.win32程序 |
|
|
6楼#
发布于:2002-06-07 09:27
回Fnight:
/******** 一个程序编译完毕以后,就一段.哕\行 |
|
|
7楼#
发布于:2002-06-07 15:06
1.OS在LDT中是不区分代码段和数据段的,它只是虚拟地址到食地址的弈
|
|
|
8楼#
发布于:2002-06-07 15:15
谢谢大家!
以前这部分老是迷惑,现在有些懂了! |
|
|