#format wiki #language en == Kelley Nielsen == Email: [[MailTo(kelleynnn AT SPAMFREE gmail DOT com)]] I am a kernel intern through the Gnome Outreach Program for Women. RikvanRiel is my mentor. My project is to rid the swapoff code of the quadratic complexity in try_to_unuse(). This page will eventually become a proper home page, but until I learn enough about wiki editing to write proper articles, I will be using this as a scratch area for my thoughts, questions, and article stubs and drafts. === My Current Working State === Rik has asked me, "can you find out, and describe to me, how the location of a certain place in swap is stored in the memory management data structures for a process? and what the two parts of the swap information describe? *Action: study struct page and friends in include/linux/mm_types.h *Question: what is (are) the top level struct(s) for memory management? What functions and structs hold them? *Question: How is a swap area location described? *Question: The first double word block of a struct page holds a union (implying only one member is used at a time) of a pointer to a struct address_space, and a pointer to void intended for a slab object. I know that most memory comes from the buddy allocator, but the kernel has the slab allocator for small needs of its own. So, is the struct address_space associated with the buddy allocator? Question: are the page allocator and the buddy allocator the same thing? ''i.e.'' "page" describes what it does, and "buddy" describes how it works? *Action: study handle_mm_fault() found at: memory.c:3783:int handle_mm_fault(struct mm_struct *mm, ... *'''Question''': What’s the relationship between a page and a vm_area? Specifically, what’s the correspondence between a page in memory and its representation in the swap area? A: it goes through the page table, d'oh! *Question: What is a control group and, specifically, what is the memory control group? Documentation/cgroups *Question: What’s in asm/page.h? -A: is dummy representation for NOMMU situations, but may be useful in providing things to grep for *Question: What does ‘asm’ stand for? A: Linux Assembly language *Question: What’s a struct rb_root? (mm_struct member) rbtree.h, may or may not be important *Action: study the places where init_mm is used *Question: What’s a struct vm_operations_struct? Is it analogous to a struct address_space_operations? mm.h line 210 *Question: Are the functions pointed to by the members of struct address_space_operations in fs.h (line 347) what I think they are--operations to transition a page between the states described in fig. 2 on this page http://www.redhat.com/magazine/001nov04/features/vm/ ? === Dec. 10: What I’ve learned: === There is often no way to know which task is using a certain page. It’s not important. One of the main data structures that I need to understand, both in terms of how it works and how it is used, is struct mm_struct. There is a list of them (the struct holds a struct list_head), and they can be swapped. The short file init_mm.c instantiates the list handle, called init_mm. This structure seems to be the principal structure representing an access into the swap area. A struct mm_struct holds a list of struct vm_area_structs. (note: although the struct vm_area_struct contains a struct list_head, it also contains pointers to prev and next, which are declared before the struct list_head and may be more important). These are chunks of some type of memory. Then, there is a struct page, defined in the same file as the struct mm_struct. These are also kept in a list (i.e. a struct page holds a struct list_head) (I don’t yet know where the handle is). A struct page holds (either) a struct address_space (or a slab object); not exactly sure what this does yet, but defined in the same file (fs.h) there is a struct address_space_operations. All the members of this struct are function pointers that seem to govern transitions between the states listed in fig. 2 here: http://www.redhat.com/magazine/001nov04/features/vm/ === Dec. 11: What I’ve learned: === Page table types are architecture specific, and are defined in files such as pgtable.h, pgtable_types.h, and page.h under arch/*/include/asm. ---- CategoryHomepage