summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKAKit/src/UserProcessScheduler.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-12-07 18:07:22 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-12-07 18:07:22 +0100
commit4c7ea58f5d5e495e8da6cfc7e1d52a3dfcf5a893 (patch)
tree40c91fce5ac9e622e49515608033f8c98af5a8f1 /dev/ZKAKit/src/UserProcessScheduler.cc
parent63be0a396d95db7b629ffe64dcc543e251936b36 (diff)
IMPL: New I/O functions from assembly, still working on #8 issue.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKAKit/src/UserProcessScheduler.cc')
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc39
1 files changed, 18 insertions, 21 deletions
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<VoidPtr>(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;