LAB2:物理内存管理
如果我们只有物理内存空间,那么我们也可以写程序,但是所有的程序,包括内核,包括用户程序,都在同一个地址空间里,用户程序访问的0x80200000和内核访问的0x80200000是同一个地址。这样好不好?如果只有一个程序在运行,那也无所谓。但很多程序使用同一个内存空间,就会有问题:怎样防止程序之间互相干扰,甚至互相搞破坏?比较粗暴的方式就是,我让用户程序访问的0x80200000和内核访问的0x80200000不是一个地址。但是我们只有一块内存,为了创造两个不同的地址空间,我们可以引入一个”翻译“机制:程序使用的地址需要经过一步”翻译“才能变成真正的内存的物理地址。这个”翻译“过程,我们用一个”词典“实现---给出翻译之前的地址,可以在词典里查找翻译后的地址。每个程序都有唯一的一本”词典“,而它能使用的内存也就只有他的”词典“所包含的。
”词典“是否对能使用的每个字节都进行翻译?我们可以想象,存储每个字节翻译的结果至少需要一个字节,那么使用1MB的内存将至少需要构造1MB的”词典“,这效率太低了。观察到,一个程序使用内存的数量级通常远大于字节,至少以KB为单位(所以上古时代的人说的是”640K对每个人都够了“而不是”640B对每个人都够了")。那么我们可以考虑,把连续的很多字节合在一起翻译,让他们翻译前后的数值之差相同,这就是“页”。
复制链接