diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-21 09:35:23 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-21 09:35:23 +0200 |
| commit | 0bb0eb7952edbe2d14a071abe9eeff6e8b1b51ee (patch) | |
| tree | 754cb3da25aa7a22c30beed40b417f3622c6866c /dev/zka/src | |
| parent | 94bb3c0e7bdca4e5cd85a576a98b0b19847b597c (diff) | |
IMP: Improved many things, and looking at how to fix the interrupts
issue.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/zka/src')
| -rw-r--r-- | dev/zka/src/ACPIFactoryInterface.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/BitMapMgr.cxx | 4 | ||||
| -rw-r--r-- | dev/zka/src/DriveMgr.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/HardwareThreadScheduler.cxx | 6 | ||||
| -rw-r--r-- | dev/zka/src/Heap.cxx | 1 | ||||
| -rw-r--r-- | dev/zka/src/Stop.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/UserProcessScheduler.cxx | 60 |
7 files changed, 35 insertions, 42 deletions
diff --git a/dev/zka/src/ACPIFactoryInterface.cxx b/dev/zka/src/ACPIFactoryInterface.cxx index 6d7d7c3c..4a04d7b9 100644 --- a/dev/zka/src/ACPIFactoryInterface.cxx +++ b/dev/zka/src/ACPIFactoryInterface.cxx @@ -64,7 +64,7 @@ namespace Kernel if (signature_index == (cAcpiSignatureLength - 1)) { - kcout << "ACPI: Found the SDT. " << endl; + kcout << "ACPI: Found the SDT" << endl; return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(xsdt->AddressArr[index])); } } diff --git a/dev/zka/src/BitMapMgr.cxx b/dev/zka/src/BitMapMgr.cxx index 270783f2..1f4b4860 100644 --- a/dev/zka/src/BitMapMgr.cxx +++ b/dev/zka/src/BitMapMgr.cxx @@ -143,8 +143,8 @@ namespace Kernel return; } - kcout << "Magic BitMap Number: " << hex_number(ptr_bit_set[cBitMapMagIdx]) << endl; - kcout << "Allocated: " << (ptr_bit_set[cBitMapUsedIdx] ? "Yes" : "No") << endl; + kcout << "Magic Number: " << hex_number(ptr_bit_set[cBitMapMagIdx]) << endl; + kcout << "Is Allocated: " << (ptr_bit_set[cBitMapUsedIdx] ? "Yes" : "No") << endl; kcout << "Size of BitMap (B): " << number(ptr_bit_set[cBitMapSizeIdx]) << endl; kcout << "Size of BitMap (KIB): " << number(KIB(ptr_bit_set[cBitMapSizeIdx])) << endl; kcout << "Size of BitMap (MIB): " << number(MIB(ptr_bit_set[cBitMapSizeIdx])) << endl; diff --git a/dev/zka/src/DriveMgr.cxx b/dev/zka/src/DriveMgr.cxx index ecec5cec..d9bf57f2 100644 --- a/dev/zka/src/DriveMgr.cxx +++ b/dev/zka/src/DriveMgr.cxx @@ -156,7 +156,7 @@ namespace Kernel trait.fInit = io_drv_init; trait.fDriveKind = io_drv_kind; - kcout << "Constructed drive successfully..\r"; + kcout << "Constructed drive successfully.\r"; return trait; } diff --git a/dev/zka/src/HardwareThreadScheduler.cxx b/dev/zka/src/HardwareThreadScheduler.cxx index e3bf5a73..50a153f1 100644 --- a/dev/zka/src/HardwareThreadScheduler.cxx +++ b/dev/zka/src/HardwareThreadScheduler.cxx @@ -17,7 +17,7 @@ namespace Kernel { - HardwareThreadScheduler* cHardwareThreadScheduler = nullptr; + HardwareThreadScheduler* kHardwareThreadScheduler = nullptr; ///! A HardwareThread class takes care of it's owned hardware thread. ///! It has a stack for it's core. @@ -133,8 +133,8 @@ namespace Kernel /// @brief Shared singleton function HardwareThreadScheduler& HardwareThreadScheduler::The() { - MUST_PASS(cHardwareThreadScheduler); - return *cHardwareThreadScheduler; + MUST_PASS(kHardwareThreadScheduler); + return *kHardwareThreadScheduler; } /// @brief Get Stack Frame of Core diff --git a/dev/zka/src/Heap.cxx b/dev/zka/src/Heap.cxx index 4311257e..63e9286a 100644 --- a/dev/zka/src/Heap.cxx +++ b/dev/zka/src/Heap.cxx @@ -15,6 +15,7 @@ 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.hxx header. (amlal) ------------------------------------------- */ diff --git a/dev/zka/src/Stop.cxx b/dev/zka/src/Stop.cxx index afbc223b..39e57070 100644 --- a/dev/zka/src/Stop.cxx +++ b/dev/zka/src/Stop.cxx @@ -47,7 +47,7 @@ namespace Kernel switch (id) { case RUNTIME_CHECK_PROCESS: { - CGDrawString("0x00000008 Scheduler error.", start_y, x, panic_text); + CGDrawString("0x00000008 Multi-Task error.", start_y, x, panic_text); break; } case RUNTIME_CHECK_ACPI: { diff --git a/dev/zka/src/UserProcessScheduler.cxx b/dev/zka/src/UserProcessScheduler.cxx index 7b84f1fb..6802f59d 100644 --- a/dev/zka/src/UserProcessScheduler.cxx +++ b/dev/zka/src/UserProcessScheduler.cxx @@ -3,13 +3,13 @@ Copyright ZKA Web Services Co. FILE: UserProcessScheduler.cxx - PURPOSE: Low Exception Process scheduler. + PURPOSE: EL0/Ring-3 Process scheduler. ------------------------------------------- */ /***********************************************************************************/ /// @file UserProcessScheduler.cxx -/// @brief User Process scheduler. +/// @brief User process scheduler. /***********************************************************************************/ #include <ArchKit/ArchKit.hxx> @@ -38,8 +38,8 @@ namespace Kernel /// @brief User Process scheduler global and external reference of thread scheduler. /***********************************************************************************/ - UserProcessScheduler* cProcessScheduler = nullptr; - EXTERN HardwareThreadScheduler* cHardwareThreadScheduler; + UserProcessScheduler* kProcessScheduler = nullptr; + EXTERN HardwareThreadScheduler* kHardwareThreadScheduler; /// @brief Gets the last exit code. /// @note Not thread-safe. @@ -55,15 +55,13 @@ namespace Kernel Void UserProcess::Crash() { - if (*this->Name != 0 && - *this->Name > 'A') + if (this->Status != ProcessStatusKind::kRunning) + return; + + if (*this->Name != 0) { kcout << this->Name << ": crashed, error id: " << number(kErrorProcessFault) << endl; } - else - { - return; - } this->Exit(kErrorProcessFault); } @@ -373,8 +371,8 @@ namespace Kernel UserProcessScheduler& UserProcessScheduler::The() { - MUST_PASS(cProcessScheduler); - return *cProcessScheduler; + MUST_PASS(kProcessScheduler); + return *kProcessScheduler; } /***********************************************************************************/ @@ -427,20 +425,21 @@ namespace Kernel for (; process_index < mTeam.AsArray().Capacity(); ++process_index) { - kcout << "Grabbing available process in team...\r"; - auto& process = mTeam.AsArray()[process_index]; //! check if process needs to be scheduled. if (UserProcessHelper::CanBeScheduled(process)) { - kcout << process.Name << ": will be runned.\r"; - // Set current process header. this->CurrentProcess() = process; process.PTime = static_cast<Int32>(process.Affinity); + UserProcessScheduler::The().CurrentProcess().Leak().Status = ProcessStatusKind::kFrozen; + UserProcessScheduler::The().CurrentProcess() = process; + + kcout << "Switch to '" << process.Name << "'.\r"; + // tell helper to find a core to schedule on. if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize - 1], process.StackFrame, process.ProcessId)) @@ -451,7 +450,8 @@ namespace Kernel } else { - --process.PTime; + if (process.Status == ProcessStatusKind::kRunning) + --process.PTime; } } @@ -481,7 +481,7 @@ namespace Kernel PID& UserProcessHelper::TheCurrentPID() { kcout << "UserProcessHelper::TheCurrentPID: Leaking ProcessId...\r"; - return cProcessScheduler->CurrentProcess().Leak().ProcessId; + return kProcessScheduler->CurrentProcess().Leak().ProcessId; } /// @brief Check if process can be schedulded. @@ -490,9 +490,7 @@ namespace Kernel /// @retval false cannot be schedulded. Bool UserProcessHelper::CanBeScheduled(const UserProcess& process) { - kcout << "Checking UserProcess status...\r"; - - if (process.Status == ProcessStatusKind::kFrozen || + if (process.Status == ProcessStatusKind::kKilled || process.Status == ProcessStatusKind::kDead) return No; @@ -511,14 +509,14 @@ namespace Kernel Bool UserProcessHelper::InitializeScheduler() { - if (!cProcessScheduler) + if (!kProcessScheduler) { - cProcessScheduler = new UserProcessScheduler(); + kProcessScheduler = new UserProcessScheduler(); } - if (!cHardwareThreadScheduler) + if (!kHardwareThreadScheduler) { - cHardwareThreadScheduler = new HardwareThreadScheduler(); + kHardwareThreadScheduler = new HardwareThreadScheduler(); } return Yes; @@ -526,21 +524,15 @@ namespace Kernel /***********************************************************************************/ /** - * @brief Start the scheduler. + * @brief Start scheduling current AP/Hart/Core. */ /***********************************************************************************/ - SizeT UserProcessHelper::StartScheduling() { - kcout << "UserProcessScheduler: Trying to schedule user processes...\r"; - - if (!cProcessScheduler) + if (!kProcessScheduler) return 0; - kcout << "UserProcessScheduler: Object is valid, scheduling user processes...\r"; - - SizeT ret = cProcessScheduler->Run(); - return ret; + return kProcessScheduler->Run(); } /***********************************************************************************/ |
