From 4c7ea58f5d5e495e8da6cfc7e1d52a3dfcf5a893 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 7 Dec 2024 18:07:22 +0100 Subject: IMPL: New I/O functions from assembly, still working on #8 issue. Signed-off-by: Amlal El Mahrouss --- dev/ZKAKit/src/UserProcessScheduler.cc | 39 ++++++++++++++++------------------ 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'dev/ZKAKit/src/UserProcessScheduler.cc') diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc index 906e9a0a..64705f85 100644 --- a/dev/ZKAKit/src/UserProcessScheduler.cc +++ b/dev/ZKAKit/src/UserProcessScheduler.cc @@ -120,23 +120,23 @@ namespace Kernel auto ptr = mm_new_heap(sz + pad_amount, Yes, Yes); #endif - if (!this->MemoryHeap) + if (!this->ProcessMemoryHeap) { - this->MemoryHeap = new UserProcess::UserProcessHeapList(); + this->ProcessMemoryHeap = new UserProcess::UserProcessHeapList(); - this->MemoryHeap->MemoryEntryPad = pad_amount; - this->MemoryHeap->MemoryEntrySize = sz; + this->ProcessMemoryHeap->MemoryEntryPad = pad_amount; + this->ProcessMemoryHeap->MemoryEntrySize = sz; - this->MemoryHeap->MemoryEntry = ptr; + this->ProcessMemoryHeap->MemoryEntry = ptr; - this->MemoryHeap->MemoryPrev = nullptr; - this->MemoryHeap->MemoryNext = nullptr; + this->ProcessMemoryHeap->MemoryPrev = nullptr; + this->ProcessMemoryHeap->MemoryNext = nullptr; return ErrorOr(ptr); } else { - UserProcessHeapList* entry = this->MemoryHeap; + UserProcessHeapList* entry = this->ProcessMemoryHeap; UserProcessHeapList* prev_entry = nullptr; while (!entry) @@ -207,7 +207,7 @@ namespace Kernel kLastExitCode = exit_code; - auto memory_heap_list = this->MemoryHeap; + auto memory_heap_list = this->ProcessMemoryHeap; #ifdef __ZKA_AMD64__ auto pd = hal_read_cr3(); @@ -271,6 +271,8 @@ namespace Kernel this->ProcessId = 0; this->Status = ProcessStatusKind::kFinished; + --this->ProcessParentTeam->mProcessCount; + delete this; } @@ -334,22 +336,17 @@ namespace Kernel kcout << "Create stack reserve for: " << process->Name << endl; - ProcessID pid = kProcessInvalidID; + ProcessID pid = mTeam.mProcessCount; - for (SizeT free_pid = 0UL; free_pid < kSchedProcessLimitPerTeam; ++free_pid) - { - if (mTeam.mProcessList[free_pid] && mm_is_valid_heap(mTeam.mProcessList[free_pid]) && mTeam.mProcessList[free_pid]->Status == ProcessStatusKind::kFinished) - { - pid = free_pid; - break; - } - } + if (pid > kSchedProcessLimitPerTeam) + return kProcessInvalidID; + + ++mTeam.mProcessCount; - if (pid == kProcessInvalidID) - return pid; + process->ProcessParentTeam = &mTeam; process->ProcessId = pid; - process->Status = ProcessStatusKind::kRunning; + process->Status = ProcessStatusKind::kStarting; process->PTime = (UIntPtr)AffinityKind::kStandard; kcout << "Process Name: " << process->Name << endl; -- cgit v1.2.3