%Memory %Thadeu Cascardo # Memory * Real (Physical) Address * Virtual Address * Bus Address * Linear Address # Memory Zones * Normal Zone * DMA Zone * High Memory Zone # Flags * GFP\\_KERNEL * GFP\\_ATOMIC * GFP\\_USER * GFP\\_HIGHUSER * GFP\\_NOFS * GFP\\_NOIO * \\_\\_GFP\\_ZERO * \\_\\_GFP\\_DMA * \\_\\_GFP\\_HIGHMEM * \\_\\_GFP\\_NOWARN * \\_\\_GFP\\_REPEAT * \\_\\_GFP\\_NOFAIL * \\_\\_GFP\\_NORETRY # Slab (lookaside cache) * include linux/slab.h * struct kmem\\_cache * kmem\\_cache\\_create(name, size, offset, flags, constructor); * kmem\\_cache\\_destroy(kmc) * kmem\\_cache\\_alloc(kmc, gfp) * kmem\\_cache\\_free(kmc, ptr) # vmalloc * Virtual memory with many pages allocated not linearly in the physical space * Mapped in a different address range * include linux/vmalloc.h * vmalloc(size) * vfree(addr) # GFP * \\_\\_get\\_free\\_page(flags) * \\_\\_get\\_free\\_pages(flags, order) * free\\_page(addr) * free\\_pages(addr, order) * get\\_order # Page * struct page * alloc\\_pages(flags, order) * alloc\\_page(flags) * \\_\\_free\\_page(page) * \\_\\_free\\_pages(page, order)