*************Title: Protected Mode Memory**************
*************** 标题:保护模式下的内存*****************
*=================译自Tutor by Hutch==================*
*====Original:Collected and packed by dREAMtHEATER====*
*======翻译:小桥 from QDU huasoft@163.com============*
*==================20020820 at home===================*
*******************************************************
保护模式下的内存(Protected Mode Memory)
在像DOS一样的实模式操作系统中,可以覆写操作系统的代码段。如果程序没有正确的写入,而这有可能搞跨整个操作系统,计算机只有重新启动才能运行。
如果你正在写这样一个程序:直接写CGA图形内存区域,程序开始于B800H,而代码中出现了循环错误,它将覆写整个区域直到DOS所能及的最大的地址范围。这将覆写一切并包括内存中的BIOS设置。
保护模式下的内存被设计为预防这种类似事情发生。一种保护模式下的内存管理器控制着应用程序所写的地址范围,如果此应用程序继续尝试写那些非自已应写的地址时,管理器将终止此应用程序。
这种内存管理方式在16位的Windows中是可用的,但是因为16位的Windows仿真多任务,它在错误的程序垮掉之前,可以覆写其它应用程序的内存区域,或者是操作系统。
依赖于在操作系统中的覆写的内容,一些其它的没有错误的程序可以调用操作系统函数,无论是程序还是操作系统都会垮掉。更常见的是你接收到“蓝屏之死”,它至少告诉你一点信息;但如果写了很多代码产生了太大的混乱,你接收到“黑屏之死”,一个直接的黑屏锁住了机器,什么也没有告诉你。
硬件的改进以及基于硬件的32位多任务使得保护模式下的内存管理更加可信。在保护模式的操作系统下写代码的基础是:只是读和写你的应用程序所被准许的内存。
因为编译器允许你读和写几乎任何地址范围,你需要注意你可以读写的内存范围。如果你分配10K缓冲但你尝试读20K时,地址越过了10K缓冲区之后,你将得到一个内存页读错误(page read fault)。如果你在寄存器中不正确的废弃了一个变量
并且尝试读写那个地址,你也会遇到麻烦,因为你超越了地址的范围。
页读写错误是“异常”(exceptions),这是从操作系统到应用程序传递时引起的错误,如果异常没被应用程序所把握,操作系统将关闭程序。这提供了一些保护应用程序远离地址范围错误的方法。
在多任务操作系统中,当多道程序运行时,如果这种的保护不可用,那么一个程序可能覆写另一个正运行程序的内存,这可以使另外运行中的程序垮掉。同样的问题也会发生在操作系统的代码中:一个程序覆写操作系统的代码将垮掉操作系统。
==============================================