From 512f81f515e43c7b2a88381dc16af5816d724f37 Mon Sep 17 00:00:00 2001 From: Nathan Giddings Date: Fri, 11 Dec 2020 10:35:09 -0600 Subject: [PATCH] Added new method declarations to kernel class --- src/kernel.hpp | 53 +++++++++++++++++++++++++++++++++++++++++++++---- src/process.hpp | 4 ++++ 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/kernel.hpp b/src/kernel.hpp index 107d9bf..a8b5ef7 100644 --- a/src/kernel.hpp +++ b/src/kernel.hpp @@ -3,6 +3,7 @@ #include "pageallocator.hpp" #include "memorymanager.hpp" +#include "memorymap.hpp" #include "memoryblock.hpp" #include "process.hpp" #include "systypes.hpp" @@ -65,13 +66,55 @@ public: unsigned int createSharedBlock(size_t length, int flags); - void deleteSharedBlock(unsigned int id); - const MemoryBlock& getSharedBlock(unsigned int id); - const Process& getActiveProcess(); + /** + * @brief Get the process object corresponsing to 'pid' + * + * @param pid id of the process to fetch + * @returns a reference to the requested process + */ + Process& getProcess(unsigned int pid); - const Process& switchProcess(); + /** + * @brief Get the current active process object. + * + * @returns a reference to the active process + */ + Process& getActiveProcess(); + + /** + * @brief Puts the current active process back on the run queue, and sets + * the active process to the next one selected by the scheduler. + * + * @returns a reference to the new active process + */ + Process& yieldActiveProcess(); + + /** + * @brief Puts the current active process to sleep, and sets the active + * process to the next one selected by the scheduler. + * + * @returns a reference to the new active process + */ + Process& sleepActiveProcess(); + + /** + * @brief Terminates the current active process, freeing all its resources, + * and activates the next process selected by the scheduler. + * + * @return Process& + */ + Process& terminateActiveProcess(); + + /** + * @brief Terminates the process with id 'pid', freeing all its resources. + * If it holds any shared blocks which are not held by any other process, + * those blocks will be freed. + * + * @param pid pid of the process to terminate + */ + void terminateProcess(unsigned int pid); private: @@ -79,6 +122,8 @@ private: MemoryManager& mmgr; + MemoryMap& memoryMap; + }; extern Kernel kernel; diff --git a/src/process.hpp b/src/process.hpp index ce363c7..e84ef97 100644 --- a/src/process.hpp +++ b/src/process.hpp @@ -19,10 +19,14 @@ public: bool hasSharedBlock(unsigned int blockID) const; + bool hasPhysicalBlock(unsigned int blockID) const; + private: Map m_sharedBlocks; + Map m_physicalBlocks; + }; }