From db7277df5ed4a0951698697b62afa823c3ba0d72 Mon Sep 17 00:00:00 2001 From: "Douglas B. Rumbaugh" Date: Sun, 2 Nov 2025 13:23:50 -0500 Subject: Intial commit: No free list management yet --- include/free_list.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 include/free_list.h (limited to 'include/free_list.h') diff --git a/include/free_list.h b/include/free_list.h new file mode 100644 index 0000000..887167b --- /dev/null +++ b/include/free_list.h @@ -0,0 +1,52 @@ +/* + * include/free_list.h + * + * Free list management routines for liballoc + * CISC 301 -- Operating Systems, Project 3 + * + * Copyright (C) 2025 Douglas B. Rumbaugh + * + * Distributed under the Modified BSD License + * + */ +#ifndef H_LIBALLOC_FREELIST +#define H_LIBALLOC_FREELIST + +#include + +#include "constants.h" + +typedef struct free_nd { + size_t size; + struct free_nd *next; +} free_nd; + +/* + * Scans the specified free list for the first node with >= the + * specified size and returns a pointer to it. If no such node can + * be found, returns NULL. + */ +free_nd *fl_find_first_fit(free_nd *free_list, size_t size); + +/* + * Split the specified free list node based on the required size, while + * maintaining alignment, and update the free list accordingly. If the + * specified node cannot be split (e.g., it's an exact match for size + * within alignment restrictions), simply remove it from the list. + * + * Returns a pointer to the region of memory removed from the list. + */ +void *fl_split_node(free_nd *free_list, free_nd *nd, size_t size); + +/* + * Scans the free list for adjacent nodes and merges them together + */ +void fl_coalesce_nodes(free_nd *free_list); + +/* + * Scans the free list for the correct location for the specified + * pointer, and link it into the list at that point. + */ +void fl_add_node(free_nd *free_list, void *ptr); + +#endif -- cgit v1.2.3