summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKAKit/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-11-07 16:30:10 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-11-07 16:30:10 +0100
commit516efdab62108ff03af7f1d91e6dcba02f6aad47 (patch)
tree5301fd170496f7562d0872c950cda0ec9d1f5db0 /dev/ZKAKit/src
parent3bb0b718b3fde156b6f30b7f05fa34a4937befaf (diff)
Kernel: lots of fixes and improvements.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKAKit/src')
-rw-r--r--dev/ZKAKit/src/BitMapMgr.cc2
-rw-r--r--dev/ZKAKit/src/CodeMgr.cc19
-rw-r--r--dev/ZKAKit/src/HardwareThreadScheduler.cc10
-rw-r--r--dev/ZKAKit/src/Heap.cc2
-rw-r--r--dev/ZKAKit/src/PEFCodeMgr.cc25
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc14
6 files changed, 40 insertions, 32 deletions
diff --git a/dev/ZKAKit/src/BitMapMgr.cc b/dev/ZKAKit/src/BitMapMgr.cc
index bab9285b..759d4c4e 100644
--- a/dev/ZKAKit/src/BitMapMgr.cc
+++ b/dev/ZKAKit/src/BitMapMgr.cc
@@ -67,7 +67,6 @@ namespace Kernel
UInt32 MakeMMFlags(Bool wr, Bool user)
{
-
UInt32 flags = kMMFlagsPresent;
if (wr)
@@ -171,6 +170,7 @@ namespace Kernel
if (!page_ptr)
return No;
+
Detail::IBitMapAllocator traits;
Bool ret = traits.FreeBitMap(page_ptr);
diff --git a/dev/ZKAKit/src/CodeMgr.cc b/dev/ZKAKit/src/CodeMgr.cc
index 784ea38c..cde249ac 100644
--- a/dev/ZKAKit/src/CodeMgr.cc
+++ b/dev/ZKAKit/src/CodeMgr.cc
@@ -16,24 +16,23 @@ namespace Kernel
/// @return if the process was started or not.
ProcessID rtl_create_process(MainKind main, const Char* process_name) noexcept
{
- kcout << "Validating process...\r";
+ kcout << "Validating process header...\r";
if (!main)
return No;
- UserProcess* proc = new UserProcess{reinterpret_cast<VoidPtr>(main)};
-
+ static UserProcess proc;
+
kcout << "Setting-up process data...\r";
- proc->Kind = UserProcess::kExectuableKind;
- proc->StackSize = kib_cast(4);
-
- rt_set_memory(proc->Name, 0, kProcessNameLen);
- rt_copy_memory((VoidPtr)process_name, proc->Name, rt_string_len(process_name));
+ proc.Code = reinterpret_cast<VoidPtr>(main);
+ proc.Kind = UserProcess::kExectuableKind;
+ proc.StackSize = kib_cast(16);
- ProcessID id = UserProcessScheduler::The().Add(proc);
+ rt_set_memory(proc.Name, 0, kProcessNameLen);
+ rt_copy_memory((VoidPtr)process_name, proc.Name, rt_string_len(process_name));
- delete proc;
+ ProcessID id = UserProcessScheduler::The().Add(&proc);
return id;
}
diff --git a/dev/ZKAKit/src/HardwareThreadScheduler.cc b/dev/ZKAKit/src/HardwareThreadScheduler.cc
index 7651185d..48fcd5b4 100644
--- a/dev/ZKAKit/src/HardwareThreadScheduler.cc
+++ b/dev/ZKAKit/src/HardwareThreadScheduler.cc
@@ -90,13 +90,13 @@ namespace Kernel
/// @note Those symbols are needed in order to switch and validate the stack.
EXTERN Bool hal_check_stack(HAL::StackFramePtr frame_ptr);
- EXTERN_C Bool mp_register_process(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame_ptr);
+ EXTERN_C Bool mp_register_process(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame, ProcessID pid);
/// @brief Switch to hardware thread.
/// @param stack the new hardware thread.
/// @retval true stack was changed, code is running.
/// @retval false stack is invalid, previous code is running.
- Bool HardwareThread::Switch(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame)
+ Bool HardwareThread::Switch(VoidPtr image, Ptr8 stack_ptr, HAL::StackFramePtr frame, const ProcessID& pid)
{
if (!frame ||
!image ||
@@ -112,9 +112,11 @@ namespace Kernel
if (!hal_check_stack(frame))
return No;
- fStack = frame;
+ this->fStack = frame;
+ this->fSourcePID = pid;
- Bool ret = mp_register_process(image, stack_ptr, fStack);
+
+ Bool ret = mp_register_process(image, stack_ptr, fStack, this->fSourcePID);
if (ret)
this->Busy(true);
diff --git a/dev/ZKAKit/src/Heap.cc b/dev/ZKAKit/src/Heap.cc
index 240cee6d..9dfb9cca 100644
--- a/dev/ZKAKit/src/Heap.cc
+++ b/dev/ZKAKit/src/Heap.cc
@@ -253,7 +253,7 @@ namespace Kernel
PageMgr heap_mgr;
heap_mgr.Free(pteAddress);
- kcout << "Freed Heap address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl;
+ kcout << "Freed Heap address successfully." << endl;
return kErrorSuccess;
}
diff --git a/dev/ZKAKit/src/PEFCodeMgr.cc b/dev/ZKAKit/src/PEFCodeMgr.cc
index f929a01f..38ab45bc 100644
--- a/dev/ZKAKit/src/PEFCodeMgr.cc
+++ b/dev/ZKAKit/src/PEFCodeMgr.cc
@@ -226,7 +226,7 @@ namespace Kernel
#elif defined(__x86_64__)
return "x86_64 PEF executable.";
#elif defined(__aarch64__)
- return "aarch64 PEF executable.";
+ return "AARCH64 PEF executable.";
#elif defined(__powerpc64__)
return "POWER64 PEF executable.";
#else
@@ -253,26 +253,27 @@ namespace Kernel
if (errOrStart.Error() != kErrorSuccess)
return No;
- UserProcess* proc = new UserProcess{errOrStart.Leak().Leak()};
+ STATIC UserProcess proc;
- proc->Kind = procKind;
- proc->ExecImg = exec.GetBlob().Leak().Leak();
- proc->StackSize = *(UIntPtr*)exec.FindSymbol(kPefStackSizeSymbol, kPefData);
- proc->MemoryLimit = *(UIntPtr*)exec.FindSymbol(kPefHeapSizeSymbol, kPefData);
- proc->PTime = 0UL;
+ proc.Kind = procKind;
+ proc.ExecImg = errOrStart.Leak().Leak();
+ proc.ExecImg = exec.GetBlob().Leak().Leak();
+ proc.StackSize = *(UIntPtr*)exec.FindSymbol(kPefStackSizeSymbol, kPefData);
+ proc.MemoryLimit = *(UIntPtr*)exec.FindSymbol(kPefHeapSizeSymbol, kPefData);
+ proc.PTime = 0UL;
- rt_set_memory(proc->Name, 0, kProcessNameLen);
+ rt_set_memory(proc.Name, 0, kProcessNameLen);
if (exec.FindSymbol(kPefNameSymbol, kPefData))
- rt_copy_memory(exec.FindSymbol(kPefNameSymbol, kPefData), proc->Name, rt_string_len((Char*)exec.FindSymbol(kPefNameSymbol, kPefData)));
+ rt_copy_memory(exec.FindSymbol(kPefNameSymbol, kPefData), proc.Name, rt_string_len((Char*)exec.FindSymbol(kPefNameSymbol, kPefData)));
- if (!proc->StackSize)
+ if (!proc.StackSize)
{
const auto cDefaultStackSizeMib = 8;
- proc->StackSize = mib_cast(cDefaultStackSizeMib);
+ proc.StackSize = mib_cast(cDefaultStackSizeMib);
}
- return UserProcessScheduler::The().Add(proc);
+ return UserProcessScheduler::The().Add(&proc);
}
} // namespace Utils
} // namespace Kernel
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc
index 4550af4e..e5bcd1c2 100644
--- a/dev/ZKAKit/src/UserProcessScheduler.cc
+++ b/dev/ZKAKit/src/UserProcessScheduler.cc
@@ -325,6 +325,12 @@ namespace Kernel
ProcessID UserProcessScheduler::Add(UserProcess* process)
{
+ if (*process->Name == 0)
+ {
+ Char process_name[] = "System Process";
+ rt_copy_memory((VoidPtr)process_name, process->Name, rt_string_len(process_name));
+ }
+
#ifdef __ZKA_AMD64__
process->VMRegister = mm_new_heap(sizeof(PDE), No, Yes);
@@ -353,7 +359,7 @@ namespace Kernel
process->PefDLLDelegate = rtl_init_dll(process);
MUST_PASS(process->PefDLLDelegate);
- kcout << "Create delegate dylib for: " << process->Name << endl;
+ kcout << "Create DLL Delegate for: " << process->Name << endl;
}
process->StackReserve = new UInt8[process->StackSize];
@@ -370,7 +376,7 @@ namespace Kernel
return -kErrorProcessFault;
}
- kcout << "Created stack reserve for: " << process->Name << endl;
+ kcout << "Create stack reserve for: " << process->Name << endl;
auto pid = kProcessIDCounter;
@@ -575,8 +581,8 @@ namespace Kernel
////////////////////////////////////////////////////////////
auto prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime;
- HardwareThreadScheduler::The()[index].Leak()->fPTime = UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].ProcessId;
- Bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr);
+ HardwareThreadScheduler::The()[index].Leak()->fPTime = UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].PTime;
+ Bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr, new_pid);
////////////////////////////////////////////////////////////
/// Rollback on fail. ///