3.1 无内存抽象 No Memory Abstraction

最简单的内存抽象就是没有抽象,程序直接使用物理内存地址,地址从 0 开始到一个最大值。每个内存地址对应一个内存单元,这个单原包含 8 个 bits,称之为一个 字节(byte)

在这种情况下,不可能同时运行多个任务。因为多个程序共享物理内存,一个进程可能会修改另一个进程在内存中的数据,导致意料之外的错误。

一般有三种内存模型:

第一类曾用于大型机和小型机,不过现在基本不再使用。第二类将系统放在 ROM 中,曾用于掌机和嵌入式系统。而第三类将设备驱动放在 ROM 中,其他部分则位于 RAM 中,其中位于 ROM 的系统称为 BIOS(Basic Input Ouput System)

第一类和第三类模型存在很明显的问题,RAM 中的系统可能被用户态的程序篡改导致异常。

可以使用多线程模型来模拟多任务系统,但是效果并不理想。

没有内存抽象下的多任务

通过 进程切换(swap) 实现多任务,当一个进程执行一段时间后,将它在内存中的实体保存到磁盘上,然后加载一个新的进程。在同一时间,内存中只有一个进程,并不会冲突。

在硬件的辅助下,swap 可以进行地很快,近似地实现了多任务并行,甚至还可以更快,不需要 swap,即多个进程同时存在在内存中。这里不对硬件做过多叙述。

多个使用绝对地址的程序直接会相互影响,进程 A 可能会 JMP 到进程 B 的代码段中,导致程序异常。不难想到,将程序中的绝对地址修改为相对地址,就可以避免这个问题(在修改地址过程中,注意区分字面量和绝对地址)。

posted @ 2025-05-12 23:47  DantalianLib  阅读(21)  评论(0)    收藏  举报