I was chatting with a friend last night about Viengoos and he asked what the advantages of Viengoos are over Mach's PREMO pagers.
The paper on PREMO pagers is: Extending The Mach External Pager Interface To Accommodate User-Level Page Replacement Policies by Dylan McNamee and Katherine Armstrong, 1990. The main idea is to extend the external pager interface such that when there is pressure, instead of Mach selecting a page and telling its associated memory object manager to write that page to backing store and then free it, Mach sends a notification to the memory object's manager telling it to choose some pages associated with that memory object to free. One shortcoming is that a program may have many memory objects. For instance, in the Hurd, a file server associates each file with a memory object. Using PREMO pagers, Mach would ask the file server to choose a page to evict from some specific memory object. This severely limits the file server's ability to choose the best page: it has potentially thousands of memory objects but must choose a page from the indicated memory object. Second, although Mach no longer makes the decision regarding which page to evict, in many cases, it is still not based on application specific knowledge. On Viengoos, this is possible, even when using files. This is because storage management is separated from memory management. When a thread accesses some storage, the *memory* may be assigned to the activity under which it is running (we say that the activity has claimed the memory). This memory is managed according to that activity's policy. The application is further able to control how the memory is managed by assigning it a priority. This allows it to control the order in which the frame is evicted. Finally, a thread may also register to receive information about an activity, e.g., when there is memory pressure. In this case, it can take explicit action to free memory.
