Replying on the list... On 2008-06-16 at 16:42:08 [+0200], Zhao Shuai <upczhsh@xxxxxxx> wrote: > >OK, thank. So how do you plan to implement it? > > Several members will be added to struct anonymous_store to represent one > swap file. > The most 2 important fields will be: > vnode *vnode; //represent the swap file > short *swap_map; //Pointer to an array of counters, one for each > page slot in the > // swap file. 0: the page slot is free, > >0:page slot in use What do the swap_map elements count? Apparently it's supposed to be some kind of usage counter, but how would a single slot be used more than once? > A global array tells how many swap files in the system: > #define MAX_SWAPFILES 32 > anonymous_store swap_info[MAX_SWAPFILES]; That's a conceptual misunderstanding. Haiku has a store per cache, not per swap file. You need to manage swap files via separate structures and in some way reference them by the stores. Please re-read the proposal for a simple swap file implementation, I wrote earlier. It's probably not particulary efficient or elaborated, but it demonstrates how the different entities are related. > When a page is swapped out, replace it's page table entry with a > constructed one: > the PRESENT bit(bit 0) will be zeroed(means it's invald), bit 1-25 gives > the > page slot index in the swap,bit 26-31 gives the swap file index in the > swap_info > array. In this way we can retrieve a page in the swap area when page > faults. This is not going to work with Haiku's VM. For one it's architecture specific and might not work in a similar way on other architectures. More importantly, though, a page belongs to cache and it doesn't have to be mapped in any address space at the point it is swapped out. CU, Ingo