真实模式程序和保护模式程序之间的真正区别是什么?

时间:2013-10-27 14:54:03

标签: operating-system protected-mode real-mode

我从操作系统和硬件角度了解实模式和保护模式之间的区别。

但我想弄清楚程序对真实模式或保护模式有什么了解?你怎么能在看源代码/目标代码时说它是真正的模式程序呢?

寻找答案,我所能想到的是“实模式”程序使用BIOS子程序和OS子程序,而“保护模式”程序仅使用OS子程序。指令代码不同,因为寄存器的操作码是不同的,并且偏移地址的长度不同。是否还有其他功能可以区分真实和受保护的模式程序?

3 个答案:

答案 0 :(得分:6)

主要区别在于cpu所处的模式。在保护模式下,操作系统可以使用分页和虚拟内存等功能。实模式代码也不是32位,而保护模式代码可以是16位或32位。每个x86 cpu都以实模式启动,操作系统必须切换到保护模式。

答案 1 :(得分:6)

'实模式'程序使用BIOS子程序和OS子程序,而'保护模式'程序仅使用OS子程序。

指令代码不同,因为寄存器的操作码不同,偏移地址的长度不同。

答案 2 :(得分:5)

  

在查看源代码/目标代码时,你怎么能说它是真正的模式程序?

如果物理和虚拟内存之间存在直接映射(一对一),则程序在实模式下执行。更准确地说,由于虚拟存储器未在实模式下激活,因此程序以16位模式执行,其中源代码/目标代码“查看”的每个地址都是RAM上的实际物理地址。

另一方面,受保护模式启用了虚拟内存功能。因此,源代码/目标代码访问的地址与RAM中访问的实际内存位置之间的映射不同。

要检测到这一点,您可以在源/目标代码执行时检查CPU中是否启用了分页标志。

对于基于x86的CPU,您可以检查CR0寄存器中的值。如果CR0寄存器为空,则程序以实模式运行。