diff options
| author | Amlal <amlal.elmahrouss@icloud.com> | 2025-01-27 01:39:46 +0100 |
|---|---|---|
| committer | Amlal <amlal.elmahrouss@icloud.com> | 2025-01-27 01:39:46 +0100 |
| commit | cd429aa713c57757580b2ba1a8fd5e5c94b72708 (patch) | |
| tree | 7e4e318a4d29e0736dfd23024db845ce94cf5414 /dev/Kernel/src | |
| parent | 7821342e0fd790c0933f3e2579659b09aaa25098 (diff) | |
ADD: Lots of tweaks in this private branch of the kernel have been done here.
Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/src')
| -rw-r--r-- | dev/Kernel/src/ACPIFactoryInterface.cc | 4 | ||||
| -rw-r--r-- | dev/Kernel/src/FS/NeFS+FileMgr.cc | 2 | ||||
| -rw-r--r-- | dev/Kernel/src/KernelMain.cc | 4 | ||||
| -rw-r--r-- | dev/Kernel/src/MemoryMgr.cc (renamed from dev/Kernel/src/Heap.cc) | 65 | ||||
| -rw-r--r-- | dev/Kernel/src/New+Delete.cc | 2 | ||||
| -rw-r--r-- | dev/Kernel/src/PEFCodeMgr.cc | 2 | ||||
| -rw-r--r-- | dev/Kernel/src/User.cc | 2 | ||||
| -rw-r--r-- | dev/Kernel/src/UserProcessScheduler.cc | 4 |
8 files changed, 36 insertions, 49 deletions
diff --git a/dev/Kernel/src/ACPIFactoryInterface.cc b/dev/Kernel/src/ACPIFactoryInterface.cc index cbfded4e..5854460b 100644 --- a/dev/Kernel/src/ACPIFactoryInterface.cc +++ b/dev/Kernel/src/ACPIFactoryInterface.cc @@ -7,14 +7,14 @@ #include <Mod/ACPI/ACPIFactoryInterface.h> #include <NewKit/KString.h> #include <ArchKit/ArchKit.h> -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> namespace Kernel { /// @brief Finds a descriptor table inside ACPI XSDT. ErrorOr<voidPtr> ACPIFactoryInterface::Find(const Char* signature) { - MUST_PASS(fRsdp); + MUST_PASS(this->fRsdp); if (!signature) return ErrorOr<voidPtr>{-1}; diff --git a/dev/Kernel/src/FS/NeFS+FileMgr.cc b/dev/Kernel/src/FS/NeFS+FileMgr.cc index 8d44f707..ebf03078 100644 --- a/dev/Kernel/src/FS/NeFS+FileMgr.cc +++ b/dev/Kernel/src/FS/NeFS+FileMgr.cc @@ -5,7 +5,7 @@ ------------------------------------------- */ #include <KernelKit/FileMgr.h> -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> #ifndef __ZKA_MINIMAL_OS__ #ifdef __FSKIT_INCLUDES_NEFS__ diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc index b7823d1b..7168453d 100644 --- a/dev/Kernel/src/KernelMain.cc +++ b/dev/Kernel/src/KernelMain.cc @@ -12,11 +12,11 @@ #include <CompilerKit/Detail.h> #include <FirmwareKit/Handover.h> #include <KernelKit/FileMgr.h> -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> #include <KernelKit/PEF.h> #include <KernelKit/PEFCodeMgr.h> #include <KernelKit/UserProcessScheduler.h> -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> #include <NewKit/Json.h> #include <NewKit/KString.h> #include <NewKit/Utils.h> diff --git a/dev/Kernel/src/Heap.cc b/dev/Kernel/src/MemoryMgr.cc index 7b2da96d..3627a478 100644 --- a/dev/Kernel/src/Heap.cc +++ b/dev/Kernel/src/MemoryMgr.cc @@ -1,12 +1,12 @@ /* ------------------------------------------- - Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. + Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved. ------------------------------------------- */ #include <KernelKit/DebugOutput.h> #include <KernelKit/LPC.h> -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> #include <NewKit/Crc32.h> #include <NewKit/PageMgr.h> #include <NewKit/Utils.h> @@ -16,16 +16,16 @@ Revision History: 10/8/24: FIX: Fix useless long name, alongside a new WR (WriteRead) field. - 20/10/24: Fix mm_new_ and mm_delete_ APIs inside Heap.h header. (amlal) + 20/10/24: Fix mm_new_ and mm_delete_ APIs inside MemoryMgr.h header. (amlal) + 27/01/25: Reworked code as the memory manager. ------------------------------------------- */ //! @file Heap.cc -//! @brief This serves as the main memory manager. +//! @brief This Heap algorithm serves as the main memory manager. #define kKernelHeapMagic (0xD4D7D5) #define kKernelHeapAlignSz (__BIGGEST_ALIGNMENT__) -#define kKernelHeapMaxSize (gib_cast(2)) namespace Kernel { @@ -42,7 +42,7 @@ namespace Kernel ///! @brief 32-bit value which contains the magic number of the heap. UInt64 fMagic; - ///! @brief Boolean value which tells if the heap is allocated. + ///! @brief Is the heap present? Boolean fPresent : 1; /// @brief Is this valued owned by the user? @@ -52,7 +52,7 @@ namespace Kernel Boolean fUser : 1; /// @brief Is this a page pointer? - Boolean fPagePtr : 1; + Boolean fPage : 1; /// @brief 32-bit CRC checksum. UInt32 fCRC32; @@ -61,10 +61,10 @@ namespace Kernel UInt64 fFlags; /// @brief 64-bit pointer size. - SizeT fHeapSize; + SizeT fSize; /// @brief 64-bit target offset pointer. - UIntPtr fHeapPtr; + UIntPtr fOffset; /// @brief Padding bytes for header. UInt8 fPadding[kKernelHeapAlignSz]; @@ -104,8 +104,8 @@ namespace Kernel if (!ptr_heap || new_sz < 1) return nullptr; - kcout << "This function is not implemented by minOSKrnl, please use the BSD's realloc instead.\r"; - ke_panic(RUNTIME_CHECK_PROCESS); + kcout << "This function is not implemented by NeOSKrnl, please use the BSD's realloc instead.\r"; + ke_panic(RUNTIME_CHECK_INVALID); return nullptr; } @@ -122,9 +122,6 @@ namespace Kernel if (sz_fix == 0) return nullptr; - // We can't allocate that big now. - MUST_PASS(sz < kKernelHeapMaxSize); - sz_fix += sizeof(Detail::HEAP_INFORMATION_BLOCK); PageMgr heap_mgr; @@ -134,20 +131,20 @@ namespace Kernel reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( wrapper.VirtualAddress() + sizeof(Detail::HEAP_INFORMATION_BLOCK)); - heap_info_ptr->fHeapSize = sz_fix; + heap_info_ptr->fSize = sz_fix; heap_info_ptr->fMagic = kKernelHeapMagic; heap_info_ptr->fCRC32 = 0; // dont fill it for now. - heap_info_ptr->fHeapPtr = reinterpret_cast<UIntPtr>(heap_info_ptr) + sizeof(Detail::HEAP_INFORMATION_BLOCK); - heap_info_ptr->fPagePtr = No; + heap_info_ptr->fOffset = reinterpret_cast<UIntPtr>(heap_info_ptr) + sizeof(Detail::HEAP_INFORMATION_BLOCK); + heap_info_ptr->fPage = No; heap_info_ptr->fWriteRead = wr; heap_info_ptr->fUser = user; heap_info_ptr->fPresent = Yes; rt_set_memory(heap_info_ptr->fPadding, 0, kKernelHeapAlignSz); - auto result = reinterpret_cast<VoidPtr>(heap_info_ptr->fHeapPtr); + auto result = reinterpret_cast<VoidPtr>(heap_info_ptr->fOffset); - kcout << "Created Heap address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl; + kcout << "Registered heap address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl; return result; } @@ -167,9 +164,9 @@ namespace Kernel if (!heap_info_ptr) return kErrorHeapNotPresent; - heap_info_ptr->fPagePtr = true; + heap_info_ptr->fPage = true; - kcout << "Created page address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl; + kcout << "Registered page address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl; return kErrorSuccess; } @@ -227,21 +224,21 @@ namespace Kernel return kErrorHeapNotPresent; } - heap_info_ptr->fHeapSize = 0UL; + heap_info_ptr->fSize = 0UL; heap_info_ptr->fPresent = No; - heap_info_ptr->fHeapPtr = 0; + heap_info_ptr->fOffset = 0; heap_info_ptr->fCRC32 = 0; heap_info_ptr->fWriteRead = No; heap_info_ptr->fUser = No; heap_info_ptr->fMagic = 0; - PTEWrapper pageWrapper(No, No, No, reinterpret_cast<UIntPtr>(heap_info_ptr) - sizeof(Detail::HEAP_INFORMATION_BLOCK)); - Ref<PTEWrapper> pteAddress{pageWrapper}; + PTEWrapper page_wrapper(No, No, No, reinterpret_cast<UIntPtr>(heap_info_ptr) - sizeof(Detail::HEAP_INFORMATION_BLOCK)); + Ref<PTEWrapper> pte_address{page_wrapper}; PageMgr heap_mgr; - heap_mgr.Free(pteAddress); + heap_mgr.Free(pte_address); - kcout << "Freed Heap address successfully." << endl; + kcout << "Address has been successfully freed." << endl; return kErrorSuccess; } @@ -260,17 +257,7 @@ namespace Kernel reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( (UIntPtr)(heap_ptr) - sizeof(Detail::HEAP_INFORMATION_BLOCK)); - if (heap_info_ptr && heap_info_ptr->fPresent && heap_info_ptr->fMagic == kKernelHeapMagic) - { - if (heap_info_ptr->fCRC32 != - ke_calculate_crc32((Char*)heap_info_ptr->fHeapPtr, - heap_info_ptr->fHeapSize)) - { - return No; - } - - return Yes; - } + return (heap_info_ptr && heap_info_ptr->fPresent && heap_info_ptr->fMagic == kKernelHeapMagic); } return No; @@ -290,7 +277,7 @@ namespace Kernel if (heap_info_ptr && heap_info_ptr->fPresent && kKernelHeapMagic == heap_info_ptr->fMagic) { heap_info_ptr->fCRC32 = - ke_calculate_crc32((Char*)heap_info_ptr->fHeapPtr, heap_info_ptr->fHeapSize); + ke_calculate_crc32((Char*)heap_info_ptr->fOffset, heap_info_ptr->fSize); return Yes; } diff --git a/dev/Kernel/src/New+Delete.cc b/dev/Kernel/src/New+Delete.cc index 0394112e..87efeb57 100644 --- a/dev/Kernel/src/New+Delete.cc +++ b/dev/Kernel/src/New+Delete.cc @@ -4,7 +4,7 @@ ------------------------------------------- */ -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> #include <NewKit/New.h> void* operator new[](size_t sz) diff --git a/dev/Kernel/src/PEFCodeMgr.cc b/dev/Kernel/src/PEFCodeMgr.cc index 8bcceeee..b512f2ed 100644 --- a/dev/Kernel/src/PEFCodeMgr.cc +++ b/dev/Kernel/src/PEFCodeMgr.cc @@ -5,7 +5,7 @@ ------------------------------------------- */ #include <KernelKit/DebugOutput.h> -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> #include <KernelKit/PEFCodeMgr.h> #include <KernelKit/UserProcessScheduler.h> #include <NewKit/Defines.h> diff --git a/dev/Kernel/src/User.cc b/dev/Kernel/src/User.cc index 51aa3c72..3c0a18df 100644 --- a/dev/Kernel/src/User.cc +++ b/dev/Kernel/src/User.cc @@ -14,7 +14,7 @@ #include <KernelKit/LPC.h> #include <NewKit/KernelPanic.h> #include <KernelKit/FileMgr.h> -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> #define kStdUserType (0xCE) #define kSuperUserType (0xEC) diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc index e9b2de17..a9a045fa 100644 --- a/dev/Kernel/src/UserProcessScheduler.cc +++ b/dev/Kernel/src/UserProcessScheduler.cc @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved. + Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved. FILE: UserProcessScheduler.cc PURPOSE: Low level/Ring-3 Process scheduler. @@ -16,7 +16,7 @@ #include <KernelKit/HardwareThreadScheduler.h> #include <KernelKit/IPEFDylibObject.h> #include <ArchKit/ArchKit.h> -#include <KernelKit/Heap.h> +#include <KernelKit/MemoryMgr.h> #include <NewKit/KString.h> #include <KernelKit/LPC.h> |
