summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKAKit/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-11-06 08:50:56 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-11-06 08:50:56 +0100
commitdae34fe2db8827de776396c979c2bf79681edb9a (patch)
tree3ef2d0bfab9883eef04f179ffb50157e5d6a59df /dev/ZKAKit/src
parent78a639520307fef30e43ee7e2f1db058c3caba8a (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.cc30
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;
}