diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-11-07 16:30:10 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-11-07 16:30:10 +0100 |
| commit | 516efdab62108ff03af7f1d91e6dcba02f6aad47 (patch) | |
| tree | 5301fd170496f7562d0872c950cda0ec9d1f5db0 /dev/ZKAKit/src | |
| parent | 3bb0b718b3fde156b6f30b7f05fa34a4937befaf (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.cc | 2 | ||||
| -rw-r--r-- | dev/ZKAKit/src/CodeMgr.cc | 19 | ||||
| -rw-r--r-- | dev/ZKAKit/src/HardwareThreadScheduler.cc | 10 | ||||
| -rw-r--r-- | dev/ZKAKit/src/Heap.cc | 2 | ||||
| -rw-r--r-- | dev/ZKAKit/src/PEFCodeMgr.cc | 25 | ||||
| -rw-r--r-- | dev/ZKAKit/src/UserProcessScheduler.cc | 14 |
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. /// |
