7.7 任务寻址空间(Task Address Space)
TSS中的LDT选择子和PDBR字段给了软件系统设计者一个可伸缩性的段页式映射特性。通过为每一个任务一定的段页映射选择,任务可以共享地址空间,可以有不同与其它任务的很大的地址空间,或者以两种极端来共享。
每个任务有不同的地址空间的特性是80386的一个重要的保护特性。如果模块间没有共享地址空间的话,在一个任务中的模块不可以干涉另一个任务中的模块。80386的这种可伸缩性的内存管理机制允许系统设计者把要想协作的在不同任务中的模块设计成部分的地址空间共享。
7.7.1 任务线性——物理地址空间映射(Task Linear-to-Physical Space Mapping)
一般来说,安排任务的线性——物理地址空间的映射可以分为以下两类:
1、 一个线性——物理地址空间被所有任务共享。
当分页没有启用时,这是唯一的一种选择。没有启用分页的话,所有线性地址空间映射到相同的物理地址空是上。
当启用分页时,这种线性地址——物理地址的映射方式导致了所有任务使用一个页目录。如果操作系统支持页级虚拟内存的话,这种线性空间可能超过了物理地址空间。
2、 线性——物理地址空间部分重叠映射。
这种实现的话,要为每一个任务使用不同的一张页目录。因为PDBR(page directory base register)在每次任务切换时被加载,每个任务可以有不同的页目录。
在这样的技术里,不同任务的线性空间可能被映射到不同的物理地址空间上。如果页目录表项指向不同的页表,页表项又指向不同的物理页面的话,任务就不共享任何物理地址空间。
在实际中,所有任务的线性空间中的一部分必须要映射到相同的物理地址空间上去。任务状态段必须要位于一个公共的空间上,以便在处理器做任务切换,更新和读取TSS信息的时地址映射都相同。被GDT映射的线性空间也应该被映射到公共的物理地址空间上。否则,GDT的目的未做定义。图7-6显示了以共享页表的形式如何将线性地址空间的两个任务映射到相同的物理地址空间上。
7.7.2 任务逻辑地址空间(Task Logical Address Space)
如果只是通过线性——物理地址空间的映射将不能达到任务间数据的共享。为了共享数据,任务必须还要有一个公共的逻辑——线性地址空间的映射。也就是说,他们必须要有访问指向共享线性地址空间的描述符的权限。有3种办法可以建立公共的逻辑地址——物理地址空间的映射:
1、 通过GDT。所有任务都可以通过GDT访问描述符。如果这些描述符指向了一个映射到公共物理空间的线性地址空间的话,所有任务都共享了数据和指令。
2、 通过LDT。如果两个任务的TSS中的LDT选择子部分指向了相同的LDT。这些LDT又包含了一些指向相同物理空间的线性空间的描述符。这种共享的方法比在GDT中共享要更有选择性一点,这种共享可以只局限在几个任务中。其它一些有着不同LDT的任务不可以访问这些公共区域。
3、 通过在LDT中使用别名(aliases)技术。不同的LDT可以包含一些指向相同线性空间的描述符。如果这些线性空间被映射到相同的物理地址空间上去的话,这些描述符就允许任务间共享公共的地址空间。这些描述符被称作“别名”。这种共享机制比前两种更好。在LDT中的其它的描述符也以指向不同的线性空间中。