From 7dd19d0c2a9b52ba2f92c288fec93bc9236a4d84 Mon Sep 17 00:00:00 2001 From: ngiddings Date: Sat, 17 Apr 2021 06:25:46 -0500 Subject: [PATCH] Added constructors for heap and resource table --- include/priorityqueue.h | 3 +++ include/resource.h | 2 ++ src/priorityqueue.c | 18 ++++++++++++++++++ src/resource.c | 20 ++++++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/include/priorityqueue.h b/include/priorityqueue.h index d259ef6..b15b45f 100644 --- a/include/priorityqueue.h +++ b/include/priorityqueue.h @@ -1,5 +1,6 @@ #pragma once +#include "pageallocator.h" #include "process.h" #include @@ -28,6 +29,8 @@ struct priority_queue_t size_t capacity; }; +int construct_priority_queue(struct priority_queue_t *queue, struct page_stack_t *page_stack); + /** * @brief * diff --git a/include/resource.h b/include/resource.h index e841dca..dcf041c 100644 --- a/include/resource.h +++ b/include/resource.h @@ -25,4 +25,6 @@ struct resource_table_t struct resource_t *limit; }; +int construct_resource_table(struct resource_table_t *table, struct page_stack_t *page_stack); + int get_free_resource_slot(struct resource_table_t *table, struct page_stack_t *page_stack); diff --git a/src/priorityqueue.c b/src/priorityqueue.c index 66a4960..ed57038 100644 --- a/src/priorityqueue.c +++ b/src/priorityqueue.c @@ -1,4 +1,6 @@ #include "priorityqueue.h" +#include "allocator.h" +#include "mmgr.h" #include "types/status.h" void heapify(struct priority_queue_t *queue, size_t i) @@ -25,6 +27,22 @@ void heapify(struct priority_queue_t *queue, size_t i) } } +int construct_priority_queue(struct priority_queue_t *queue, struct page_stack_t *page_stack) +{ + queue->heap = allocate_from_bottom(page_size); + if(queue->heap == NULL) + { + return S_OUT_OF_MEMORY; + } + int status = map_page(page_stack, queue->heap, reserve_page(page_stack), PAGE_RW); + if(status == S_OK) + { + queue->capacity = page_size / sizeof(struct process_t*); + queue->size = 0; + } + return status; +} + struct process_t *extract_min(struct priority_queue_t *queue) { if(queue->size == 0) diff --git a/src/resource.c b/src/resource.c index 5d32147..dc5b8b3 100644 --- a/src/resource.c +++ b/src/resource.c @@ -3,6 +3,26 @@ #include "allocator.h" #include "types/status.h" +int construct_resource_table(struct resource_table_t *table, struct page_stack_t *page_stack) +{ + if(table == NULL) + { + return S_NULL_POINTER; + } + void *table_ptr = allocate_from_bottom(page_size); + if(table_ptr == NULL) + { + return S_OUT_OF_MEMORY; + } + int status = map_page(page_stack, table_ptr, reserve_page(page_stack), PAGE_RW); + if(status == S_OK) + { + table->array = (struct resource_t*)table_ptr; + table->limit = (struct resource_t*)(table_ptr + page_size); + } + return status; +} + int get_free_resource_slot(struct resource_table_t *table, struct page_stack_t *page_stack) { if(table == NULL)