操作系统书上写:每个进程都有自己的虚拟空间和页表,通过页表将虚拟地址转换为物理地址。
Q1:操作系统如何确保多个进程虚拟地址映射到不同的物理地址,避免它们产生冲突的?比如有3G的内存空间,A、B两个进程,如果A进程占用0-1.5G,B进程占用1.5-3G内存,这种情况下A和B进程的起始地址不同,它们不会发生冲突,这种情况我能理解。但是操作系统使用分页管理时,页面不一定是连续的,此时A、B的起始地址不同,但是其虚拟地址对应的物理地址还是有可能冲突啊。分页管理的情况下,操作系统是如何将不同的物理地址分配给不同的进程的?通过什么机制来管理所有内存的?
Q2:每个进程的页表项数量是一样的么?还是说每当出现缺页异常时,申请物理页之后,在进程的页表上新增一个页表项?
Q3: A进程在没有空闲物理页时,发生缺页异常,需要进行页面置换。如果发现需要将B的页面置换出去,此时的操作是删除B的页表项,新增A的页表项吗?
A1:操作系统需要为每个进程维护一个页表,这个页表存储了很多页表项,每个页表项存储了一个逻辑地址与分配给它的物理地址。逻辑地址是连续的,比如你说的0-1.5G(准确来讲应该是00000000H-5FFFFFFFH的逻辑空间),但这些逻辑页对应的物理帧可以是分散、错乱的,这个进程占据的物理空间的分布和逻辑空间并不相同。
A2&A3:(实际上是一个问题)这个实际上问的是16 页面分配策略中“1 驻留集大小”的问题,涉及到页面分配策略和驻留集大小两方面的问题。