There is a single global free page list used by all discontiguous spaces. This free list is created in the boot image and spans the entire available space (2 words per page of available address space).
This has two obvious levels of redundancy:
1. The boot image always pays for the worst case scenario (all of virtual memory is consumed by the user), which almost never occurs. Pay-as-you-go would be far more appropriate.
2. The data structure includes space for the entire usable address space, some/much of which is tied down by monotone spaces which don't need this.
Presumably the best approach is to add a level of indirection. For example, dynamically allocate the free list meta-data as each chunk (4MB) is assigned. When searching the free list, indirect at 4MB granularity. It may take a bit of work to construct a free list like this which will coherently span 4MB chunks.
Steve Blackburn added a comment - 17/Sep/07 09:24 PM There is a single global free page list used by all discontiguous spaces. This free list is created in the boot image and spans the entire available space (2 words per page of available address space).
This has two obvious levels of redundancy:
1. The boot image always pays for the worst case scenario (all of virtual memory is consumed by the user), which almost never occurs. Pay-as-you-go would be far more appropriate.
2. The data structure includes space for the entire usable address space, some/much of which is tied down by monotone spaces which don't need this.
Presumably the best approach is to add a level of indirection. For example, dynamically allocate the free list meta-data as each chunk (4MB) is assigned. When searching the free list, indirect at 4MB granularity. It may take a bit of work to construct a free list like this which will coherently span 4MB chunks.
This has two obvious levels of redundancy:
1. The boot image always pays for the worst case scenario (all of virtual memory is consumed by the user), which almost never occurs. Pay-as-you-go would be far more appropriate.
2. The data structure includes space for the entire usable address space, some/much of which is tied down by monotone spaces which don't need this.
Presumably the best approach is to add a level of indirection. For example, dynamically allocate the free list meta-data as each chunk (4MB) is assigned. When searching the free list, indirect at 4MB granularity. It may take a bit of work to construct a free list like this which will coherently span 4MB chunks.