summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/src')
-rw-r--r--dev/kernel/src/ACPIFactoryInterface.cc2
-rw-r--r--dev/kernel/src/BitMapMgr.cc10
-rw-r--r--dev/kernel/src/FS/Ext2+FileMgr.cc2
-rw-r--r--dev/kernel/src/FS/HeFS+FileMgr.cc2
-rw-r--r--dev/kernel/src/FS/NeFS+FileMgr.cc2
-rw-r--r--dev/kernel/src/HardwareThreadScheduler.cc13
-rw-r--r--dev/kernel/src/HeapMgr.cc (renamed from dev/kernel/src/MemoryMgr.cc)16
-rw-r--r--dev/kernel/src/KPC.cc2
-rw-r--r--dev/kernel/src/New+Delete.cc2
-rw-r--r--dev/kernel/src/PEFCodeMgr.cc2
-rw-r--r--dev/kernel/src/User.cc2
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc22
12 files changed, 44 insertions, 33 deletions
diff --git a/dev/kernel/src/ACPIFactoryInterface.cc b/dev/kernel/src/ACPIFactoryInterface.cc
index def6f517..8cc11cad 100644
--- a/dev/kernel/src/ACPIFactoryInterface.cc
+++ b/dev/kernel/src/ACPIFactoryInterface.cc
@@ -5,7 +5,7 @@
------------------------------------------- */
#include <ArchKit/ArchKit.h>
-#include <KernelKit/MemoryMgr.h>
+#include <KernelKit/HeapMgr.h>
#include <NeKit/KString.h>
#include <modules/ACPI/ACPIFactoryInterface.h>
diff --git a/dev/kernel/src/BitMapMgr.cc b/dev/kernel/src/BitMapMgr.cc
index 994a2ba8..4301ce5b 100644
--- a/dev/kernel/src/BitMapMgr.cc
+++ b/dev/kernel/src/BitMapMgr.cc
@@ -136,7 +136,6 @@ namespace HAL {
return;
}
-#ifdef __NE_VERBOSE_BITMAP__
(Void)(kout << "Magic: " << hex_number(ptr_bit_set[kBitMapMagIdx]) << kendl);
(Void)(kout << "Is Allocated? " << (ptr_bit_set[kBitMapUsedIdx] ? "YES" : "NO") << kendl);
(Void)(kout << "Size of BitMap (B): " << number(ptr_bit_set[kBitMapSizeIdx]) << kendl);
@@ -149,7 +148,6 @@ namespace HAL {
(Void)(kout << "Size of BitMap (TIB): " << number(TIB(ptr_bit_set[kBitMapSizeIdx]))
<< kendl);
(Void)(kout << "BitMap Address: " << hex_number((UIntPtr) ptr_bit_set) << kendl);
-#endif
}
};
} // namespace Detail
@@ -172,7 +170,13 @@ namespace HAL {
if (is_page) return nullptr;
ptr_new = bitmp.FindBitMap(kKernelBitMpStart, size, wr, user, pad);
- return (UIntPtr*) ptr_new;
+
+ if (!ptr_new) {
+ ke_panic(RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM, "Out of memory bitmap");
+ return nullptr;
+ }
+
+ return ptr_new;
}
/***********************************************************************************/
diff --git a/dev/kernel/src/FS/Ext2+FileMgr.cc b/dev/kernel/src/FS/Ext2+FileMgr.cc
index a55d917a..810e7e44 100644
--- a/dev/kernel/src/FS/Ext2+FileMgr.cc
+++ b/dev/kernel/src/FS/Ext2+FileMgr.cc
@@ -8,7 +8,7 @@
#ifdef __FSKIT_INCLUDES_EXT2__
#include <KernelKit/FileMgr.h>
-#include <KernelKit/MemoryMgr.h>
+#include <KernelKit/HeapMgr.h>
#endif // ifdef __FSKIT_INCLUDES_EXT2__
#endif // ifndef __NE_MINIMAL_OS__
diff --git a/dev/kernel/src/FS/HeFS+FileMgr.cc b/dev/kernel/src/FS/HeFS+FileMgr.cc
index e0b92a8d..e4985a3b 100644
--- a/dev/kernel/src/FS/HeFS+FileMgr.cc
+++ b/dev/kernel/src/FS/HeFS+FileMgr.cc
@@ -8,7 +8,7 @@
#ifdef __FSKIT_INCLUDES_HEFS__
#include <KernelKit/FileMgr.h>
-#include <KernelKit/MemoryMgr.h>
+#include <KernelKit/HeapMgr.h>
#endif // ifdef __FSKIT_INCLUDES_HEFS__
#endif // ifndef __NE_MINIMAL_OS__
diff --git a/dev/kernel/src/FS/NeFS+FileMgr.cc b/dev/kernel/src/FS/NeFS+FileMgr.cc
index c92d6727..978a43a8 100644
--- a/dev/kernel/src/FS/NeFS+FileMgr.cc
+++ b/dev/kernel/src/FS/NeFS+FileMgr.cc
@@ -8,7 +8,7 @@
#ifdef __FSKIT_INCLUDES_NEFS__
#include <KernelKit/FileMgr.h>
-#include <KernelKit/MemoryMgr.h>
+#include <KernelKit/HeapMgr.h>
/// @brief NeFS File System Manager.
/// BUGS: 0
diff --git a/dev/kernel/src/HardwareThreadScheduler.cc b/dev/kernel/src/HardwareThreadScheduler.cc
index 23365af5..78bad9d6 100644
--- a/dev/kernel/src/HardwareThreadScheduler.cc
+++ b/dev/kernel/src/HardwareThreadScheduler.cc
@@ -92,11 +92,16 @@ Void HardwareThread::Wake(const bool wakeup) noexcept {
/// @retval false stack is invalid, previous code is running.
/***********************************************************************************/
Bool HardwareThread::Switch(HAL::StackFramePtr frame) {
- this->fStack = frame;
+ if (!frame) {
+ return NO;
+ }
- Bool ret = mp_register_task(fStack, this->fPID);
+ if (!hal_check_stack(frame)) {
+ return NO;
+ }
- return ret;
+ this->fStack = frame;
+ return mp_register_task(fStack, this->fID);
}
/***********************************************************************************/
@@ -145,8 +150,6 @@ Ref<HardwareThread*> HardwareThreadScheduler::operator[](SizeT idx) {
return {kFakeThread};
}
- fThreadList[idx].fPID = idx;
-
return &fThreadList[idx];
}
diff --git a/dev/kernel/src/MemoryMgr.cc b/dev/kernel/src/HeapMgr.cc
index 2faa24df..6cd8fb24 100644
--- a/dev/kernel/src/MemoryMgr.cc
+++ b/dev/kernel/src/HeapMgr.cc
@@ -6,8 +6,8 @@
#include <ArchKit/ArchKit.h>
#include <KernelKit/DebugOutput.h>
+#include <KernelKit/HeapMgr.h>
#include <KernelKit/KPC.h>
-#include <KernelKit/MemoryMgr.h>
#include <NeKit/Crc32.h>
#include <NeKit/PageMgr.h>
#include <NeKit/Utils.h>
@@ -16,14 +16,14 @@
Revision History:
10/8/24: FIX: Fix useless long name, alongside a new WR (WriteRead) field.
- 20/10/24: FIX: Fix mm_new_ and mm_delete_ APIs inside MemoryMgr.h header. (amlal)
+ 20/10/24: FIX: Fix mm_new_ and mm_delete_ APIs inside HeapMgr.h header. (amlal)
27/01/25: REFACTOR: Reworked code as the memory manager.
- 25/03/25: REFACTOR: Refactor MemoryMgr code and log freed address location.
+ 25/03/25: REFACTOR: Refactor HeapMgr code and log freed address location.
------------------------------------------- */
-//! @file MemoryMgr.cc
-//! @brief Heap algorithm that serves as the main memory manager.
+//! @file HeapMgr.cc
+//! @brief Heap system that serves as the main memory manager.
#define kMemoryMgrMagic (0xD4D75)
#define kMemoryMgrAlignSz (4U)
@@ -126,7 +126,7 @@ _Output VoidPtr mm_new_ptr(SizeT sz, Bool wr, Bool user, SizeT pad_amount) {
auto result = reinterpret_cast<VoidPtr>(heap_info_ptr->fOffset);
- (Void)(kout << "MemoryMgr: Registered heap address: "
+ (Void)(kout << "HeapMgr: Registered heap address: "
<< hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << kendl);
return result;
@@ -146,7 +146,7 @@ _Output Int32 mm_make_page(VoidPtr heap_ptr) {
heap_info_ptr->fPage = true;
- (Void)(kout << "MemoryMgr: Registered page from heap address: "
+ (Void)(kout << "HeapMgr: Registered page from heap address: "
<< hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << kendl);
return kErrorSuccess;
@@ -205,7 +205,7 @@ _Output Int32 mm_delete_ptr(VoidPtr heap_ptr) {
heap_info_ptr->fMagic = 0;
heap_info_ptr->fPad = 0;
- (Void)(kout << "MemoryMgr: Freed heap address: "
+ (Void)(kout << "HeapMgr: Freed heap address: "
<< hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << kendl);
PTEWrapper page_wrapper(
diff --git a/dev/kernel/src/KPC.cc b/dev/kernel/src/KPC.cc
index f44b356b..1693fbd3 100644
--- a/dev/kernel/src/KPC.cc
+++ b/dev/kernel/src/KPC.cc
@@ -4,8 +4,8 @@
------------------------------------------- */
+#include <KernelKit/HeapMgr.h>
#include <KernelKit/KPC.h>
-#include <KernelKit/MemoryMgr.h>
#include <NeKit/KernelPanic.h>
namespace Kernel {
diff --git a/dev/kernel/src/New+Delete.cc b/dev/kernel/src/New+Delete.cc
index 0125b7f7..29bbfbbf 100644
--- a/dev/kernel/src/New+Delete.cc
+++ b/dev/kernel/src/New+Delete.cc
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/MemoryMgr.h>
+#include <KernelKit/HeapMgr.h>
#include <NeKit/New.h>
void* operator new[](size_t sz) {
diff --git a/dev/kernel/src/PEFCodeMgr.cc b/dev/kernel/src/PEFCodeMgr.cc
index afc28ceb..9ea9b5b1 100644
--- a/dev/kernel/src/PEFCodeMgr.cc
+++ b/dev/kernel/src/PEFCodeMgr.cc
@@ -5,7 +5,7 @@
------------------------------------------- */
#include <KernelKit/DebugOutput.h>
-#include <KernelKit/MemoryMgr.h>
+#include <KernelKit/HeapMgr.h>
#include <KernelKit/PEFCodeMgr.h>
#include <KernelKit/ProcessScheduler.h>
#include <NeKit/Defines.h>
diff --git a/dev/kernel/src/User.cc b/dev/kernel/src/User.cc
index e8f30547..1859be12 100644
--- a/dev/kernel/src/User.cc
+++ b/dev/kernel/src/User.cc
@@ -11,8 +11,8 @@
*/
#include <KernelKit/FileMgr.h>
+#include <KernelKit/HeapMgr.h>
#include <KernelKit/KPC.h>
-#include <KernelKit/MemoryMgr.h>
#include <KernelKit/User.h>
#include <NeKit/KernelPanic.h>
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index 0a26938a..3251e0dc 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -15,9 +15,9 @@
#include <ArchKit/ArchKit.h>
#include <KernelKit/HardwareThreadScheduler.h>
+#include <KernelKit/HeapMgr.h>
#include <KernelKit/IPEFDylibObject.h>
#include <KernelKit/KPC.h>
-#include <KernelKit/MemoryMgr.h>
#include <KernelKit/ProcessScheduler.h>
#include <NeKit/KString.h>
#include <SignalKit/Signals.h>
@@ -487,13 +487,6 @@ SizeT UserProcessScheduler::Run() noexcept {
return 0UL;
}
- auto& process = this->TheCurrentProcess().Leak();
-
- //! Increase the usage time of the process.
- if (process.UTime < process.PTime) {
- ++process.UTime;
- }
-
SizeT process_index = 0UL; //! we store this guy to tell the scheduler how many
//! things we have scheduled.
@@ -502,7 +495,12 @@ SizeT UserProcessScheduler::Run() noexcept {
//! Check if the process needs to be run.
if (UserProcessHelper::CanBeScheduled(process)) {
- kout << process.Name << " will be scheduled...\r";
+ kout << process.Name << " will be run...\r";
+
+ //! Increase the usage time of the process.
+ if (process.UTime < process.PTime) {
+ ++process.UTime;
+ }
this->TheCurrentProcess() = process;
@@ -622,6 +620,9 @@ Bool UserProcessHelper::Switch(HAL::StackFramePtr frame_ptr, PID new_pid) {
continue;
}
+ (Void)(kout << "AP_" << hex_number(index));
+ kout << " is now trying to run a new task!\r";
+
////////////////////////////////////////////////////////////
/// Prepare task switch. ///
////////////////////////////////////////////////////////////
@@ -641,6 +642,9 @@ Bool UserProcessHelper::Switch(HAL::StackFramePtr frame_ptr, PID new_pid) {
HardwareThreadScheduler::The()[index].Leak()->fPTime =
UserProcessScheduler::The().TheCurrentTeam().AsArray()[new_pid].PTime;
+ (Void)(kout << "AP_" << hex_number(index));
+ kout << " is now running a new task!\r";
+
return YES;
}