Try   HackMD

作業系統工程-Memory

Table Of Content

tags: 作業系統工程 Operating System Programming note, 110-1, 2021


Memory

Memory 在 rtdef 中的定義

#ifdef RT_USING_HEAP struct rt_memory { struct rt_object parent; /**< inherit from rt_object */ const char * algorithm;/**< Memory management algorithm name */ rt_ubase_t address; /**< memory start address */ rt_size_t total; /**< memory size */ rt_size_t used; /**< size used */ rt_size_t max; /**< maximum usage */ }; typedef struct rt_memory *rt_mem_t; #endif

Memory Heap

Memory Item 在 rtdef 中的定義

struct rt_memheap_item { rt_uint32_t magic; /**< magic number for memheap */ struct rt_memheap *pool_ptr; /**< point of pool */ struct rt_memheap_item *next; /**< next memheap item */ struct rt_memheap_item *prev; /**< prev memheap item */ struct rt_memheap_item *next_free; /**< next free memheap item */ struct rt_memheap_item *prev_free; /**< prev free memheap item */ #ifdef RT_USING_MEMTRACE rt_uint8_t owner_thread_name[4];/**< owner thread name */ #endif };

Memory Heap 在 rtdef 中的定義

struct rt_memheap { struct rt_object parent; /**< inherit from rt_object */ void *start_addr; /**< pool start address and size */ rt_size_t pool_size; /**< pool size */ rt_size_t available_size;/**< available size */ rt_size_t max_used_size; /**< maximum allocated size */ struct rt_memheap_item *block_list; /**< used block list */ struct rt_memheap_item *free_list; /**< free block list */ struct rt_memheap_item free_header; /**< free block list header */ struct rt_semaphore lock; /**< semaphore lock */ rt_bool_t locked; /**< External lock mark */ }; #endif

Memory Pool

Memory Pool 在 rtdef 中的定義

#ifdef RT_USING_MEMPOOL struct rt_mempool { struct rt_object parent; /**< inherit from rt_object */ void *start_address; /**< memory pool start */ rt_size_t size; /**< size of memory pool */ rt_size_t block_size; /**< size of memory blocks */ rt_uint8_t *block_list; /**< memory blocks list */ rt_size_t block_total_count;/**< numbers of memory block */ rt_size_t block_free_count; /**< numbers of free memory block */ rt_list_t suspend_thread; /**< threads pended on this resource */ }; typedef struct rt_mempool *rt_mp_t; #endif