diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-11-06 08:50:56 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-11-06 08:50:56 +0100 |
| commit | dae34fe2db8827de776396c979c2bf79681edb9a (patch) | |
| tree | 3ef2d0bfab9883eef04f179ffb50157e5d6a59df /dev/ZKAKit/src | |
| parent | 78a639520307fef30e43ee7e2f1db058c3caba8a (diff) | |
IMP: A set of WiP for the process scheduler.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKAKit/src')
| -rw-r--r-- | dev/ZKAKit/src/UserProcessScheduler.cc | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc index d503cae3..1a060041 100644 --- a/dev/ZKAKit/src/UserProcessScheduler.cc +++ b/dev/ZKAKit/src/UserProcessScheduler.cc @@ -287,9 +287,13 @@ namespace Kernel if (this->Code && mm_is_valid_heap(this->Code)) mm_delete_heap(this->Code); + if (this->ExecImg && mm_is_valid_heap(this->ExecImg)) + mm_delete_heap(this->ExecImg); + if (this->StackFrame && mm_is_valid_heap(this->StackFrame)) mm_delete_heap((VoidPtr)this->StackFrame); + this->ExecImg = nullptr; this->Code = nullptr; this->StackFrame = nullptr; @@ -298,19 +302,19 @@ namespace Kernel Bool success = false; rtl_fini_dll(this, this->PefDLLDelegate, &success); - if (success) + if (!success) { - this->PefDLLDelegate = nullptr; + ke_stop(RUNTIME_CHECK_PROCESS); } + + this->PefDLLDelegate = nullptr; } if (this->StackReserve) - delete[] this->StackReserve; + mm_delete_heap(reinterpret_cast<VoidPtr>(this->StackReserve)); this->ProcessId = 0; - - if (this->ProcessId > 0) - UserProcessScheduler::The().Remove(this->ProcessId); + --kProcessIDCounter; } /***********************************************************************************/ @@ -350,7 +354,13 @@ namespace Kernel process->PefDLLDelegate = rtl_init_dll(process); } - process->StackReserve = reinterpret_cast<UInt8*>(mm_new_heap(sizeof(UInt8) * process->StackSize, Yes, Yes)); + process->StackReserve = new UInt8[process->StackSize]; + + UInt32 flags = HAL::kMMFlagsPresent; + flags |= HAL::kMMFlagsWr; + flags |= HAL::kMMFlagsUser; + + HAL::mm_map_page((VoidPtr)process->StackReserve, flags); kcout << "Validate stack reserve: " << number((UIntPtr)process->StackReserve) << endl; @@ -360,7 +370,7 @@ namespace Kernel return -kErrorProcessFault; } - auto pid = 0UL; + auto pid = kProcessIDCounter; process->ProcessId = pid; process->Status = ProcessStatusKind::kRunning; @@ -371,7 +381,7 @@ namespace Kernel kcout << "Process Name: " << mTeam.AsArray()[pid].Name << endl; kcout << "PID: " << number(mTeam.AsArray()[pid].ProcessId) << endl; - BREAK_POINT(); + ++kProcessIDCounter; return pid; } @@ -401,7 +411,7 @@ namespace Kernel if (process_id > mTeam.mProcessList.Count()) return No; - --kProcessIDCounter; + mTeam.mProcessList[process_id].Exit(0); return Yes; } |
