C++ | 什么是实模式和保护模式

一.实模式

早期的操作系统的对进程的处理模式属于实模式,即程序的运行需要内存,而实模式就是将程序直接加载到内存当中。

假如此时同时有个进程B也被加载到内存中,即

但如果这个进程B为恶意程序或者病毒。如果进程B使用指针加偏移的方式来随意的跳转,例如跳转到进程A的内存空间,那么此时进程B就可以随意的修改进程A的指令和数据。这是一种极大的安全漏洞。

二.保护模式

为了解决实模式存在的安全漏洞,人们在80386(80386以后的操作系统又被称为X86体系)以后的操作系统使用保护模式。 即,运行进程A时,进程A不会直接的被加载到内存当中,而是先被加载到虚拟内存当中,再由虚拟内存来映射到真实的内存空间。因而,虚拟内存上的地址被称为虚拟地址,真实的内存空间的地址被称为物理地址。倘若为32位操作系统,那么虚拟内存的空间和真实的内存空间一样都是4GB。

假如此时进程B依然是恶意进程,当他采用指针加偏移的方式进行跳转时,也无所谓,因为此时是在虚拟内存当中进行跳转,他无论如何都跳不出这个4GB大小的虚拟内存空间,而并不是在真正的内存空间中进行跳转,而最终虚拟内存映射到真实的内存空间依旧是它所占的内存空间的大小,从而起到了进程保护的作用。