summaryrefslogtreecommitdiffhomepage
path: root/dev/zka/src
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2024-10-26 19:49:02 +0200
committerAmlal <amlal.elmahrouss@icloud.com>2024-10-26 19:49:02 +0200
commit6dcf5b87da65de2254d6102f567183eaeca03088 (patch)
treeb281ecd4cf0bcd60eaa476979f4f2183b0f4d04d /dev/zka/src
parent88b5be35623fb573cfa0d53cfc407ae1005ccad9 (diff)
IMP: This commit contains fixes and improvements regarding the kernel, a next one will be done soon.
Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/zka/src')
-rw-r--r--dev/zka/src/BitMapMgr.cc76
-rw-r--r--dev/zka/src/CodeMgr.cc8
-rw-r--r--dev/zka/src/GUIDWizard.cc6
-rw-r--r--dev/zka/src/PEFCodeMgr.cc13
-rw-r--r--dev/zka/src/UserProcessScheduler.cc31
-rw-r--r--dev/zka/src/Utils.cc18
6 files changed, 63 insertions, 89 deletions
diff --git a/dev/zka/src/BitMapMgr.cc b/dev/zka/src/BitMapMgr.cc
index e97c9bfa..27158a12 100644
--- a/dev/zka/src/BitMapMgr.cc
+++ b/dev/zka/src/BitMapMgr.cc
@@ -17,9 +17,9 @@
#include <NewKit/Defines.h>
#include <NewKit/Stop.h>
-#define cBitMapMagIdx (0)
-#define cBitMapSizeIdx (1)
-#define cBitMapUsedIdx (2)
+#define kBitMapMagIdx (0)
+#define kBitMapSizeIdx (1)
+#define kBitMapUsedIdx (2)
namespace Kernel
{
@@ -43,8 +43,8 @@ namespace Kernel
UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(page_ptr);
- if (!ptr_bit_set[cBitMapMagIdx] ||
- ptr_bit_set[cBitMapMagIdx] != kBitMapMagic)
+ if (!ptr_bit_set[kBitMapMagIdx] ||
+ ptr_bit_set[kBitMapMagIdx] != kBitMapMagic)
return No;
return Yes;
@@ -57,28 +57,24 @@ namespace Kernel
UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(page_ptr);
- ptr_bit_set[cBitMapMagIdx] = kBitMapMagic;
- ptr_bit_set[cBitMapUsedIdx] = No;
+ ptr_bit_set[kBitMapMagIdx] = kBitMapMagic;
+ ptr_bit_set[kBitMapUsedIdx] = No;
this->GetBitMapStatus(ptr_bit_set);
- mm_map_page(ptr_bit_set, ~eFlagsPresent);
- mm_map_page(ptr_bit_set, ~eFlagsWr);
- mm_map_page(ptr_bit_set, ~eFlagsUser);
-
return Yes;
}
- UInt32 MakeFlags(Bool wr, Bool user)
+ UInt32 MakeMMFlags(Bool wr, Bool user)
{
- UInt32 flags = eFlagsPresent;
+ UInt32 flags = kMMFlagsPresent;
if (wr)
- flags |= eFlagsWr;
+ flags |= kMMFlagsWr;
if (user)
- flags |= eFlagsUser;
+ flags |= kMMFlagsUser;
return flags;
}
@@ -93,33 +89,33 @@ namespace Kernel
{
UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(base);
- if (ptr_bit_set[cBitMapMagIdx] == kBitMapMagic &&
- ptr_bit_set[cBitMapSizeIdx] <= size)
+ if (ptr_bit_set[kBitMapMagIdx] == kBitMapMagic &&
+ ptr_bit_set[kBitMapSizeIdx] <= size)
{
- if (ptr_bit_set[cBitMapUsedIdx] == No)
+ if (ptr_bit_set[kBitMapUsedIdx] == No)
{
- ptr_bit_set[cBitMapSizeIdx] = size;
- ptr_bit_set[cBitMapUsedIdx] = Yes;
+ ptr_bit_set[kBitMapSizeIdx] = size;
+ ptr_bit_set[kBitMapUsedIdx] = Yes;
this->GetBitMapStatus(ptr_bit_set);
- UInt32 flags = this->MakeFlags(wr, user);
+ UInt32 flags = this->MakeMMFlags(wr, user);
mm_map_page(ptr_bit_set, flags);
return (VoidPtr)ptr_bit_set;
}
}
- else if (ptr_bit_set[cBitMapMagIdx] != kBitMapMagic)
+ else if (ptr_bit_set[kBitMapMagIdx] != kBitMapMagic)
{
UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(base_ptr);
- ptr_bit_set[cBitMapMagIdx] = kBitMapMagic;
- ptr_bit_set[cBitMapSizeIdx] = size;
- ptr_bit_set[cBitMapUsedIdx] = Yes;
+ ptr_bit_set[kBitMapMagIdx] = kBitMapMagic;
+ ptr_bit_set[kBitMapSizeIdx] = size;
+ ptr_bit_set[kBitMapUsedIdx] = Yes;
this->GetBitMapStatus(ptr_bit_set);
- UInt32 flags = this->MakeFlags(wr, user);
+ UInt32 flags = this->MakeMMFlags(wr, user);
mm_map_page(ptr_bit_set, flags);
return (VoidPtr)ptr_bit_set;
@@ -143,13 +139,13 @@ namespace Kernel
return;
}
- kcout << "Magic Number: " << hex_number(ptr_bit_set[cBitMapMagIdx]) << endl;
- kcout << "Is Allocated: " << (ptr_bit_set[cBitMapUsedIdx] ? "Yes" : "No") << endl;
- kcout << "Size of BitMap (B): " << number(ptr_bit_set[cBitMapSizeIdx]) << endl;
- kcout << "Size of BitMap (KIB): " << number(KIB(ptr_bit_set[cBitMapSizeIdx])) << endl;
- kcout << "Size of BitMap (MIB): " << number(MIB(ptr_bit_set[cBitMapSizeIdx])) << endl;
- kcout << "Size of BitMap (GIB): " << number(GIB(ptr_bit_set[cBitMapSizeIdx])) << endl;
- kcout << "Size of BitMap (TIB): " << number(TIB(ptr_bit_set[cBitMapSizeIdx])) << endl;
+ kcout << "Magic Number: " << hex_number(ptr_bit_set[kBitMapMagIdx]) << endl;
+ kcout << "Is Allocated: " << (ptr_bit_set[kBitMapUsedIdx] ? "Yes" : "No") << endl;
+ kcout << "Size of BitMap (B): " << number(ptr_bit_set[kBitMapSizeIdx]) << endl;
+ kcout << "Size of BitMap (KIB): " << number(KIB(ptr_bit_set[kBitMapSizeIdx])) << endl;
+ kcout << "Size of BitMap (MIB): " << number(MIB(ptr_bit_set[kBitMapSizeIdx])) << endl;
+ kcout << "Size of BitMap (GIB): " << number(GIB(ptr_bit_set[kBitMapSizeIdx])) << endl;
+ kcout << "Size of BitMap (TIB): " << number(TIB(ptr_bit_set[kBitMapSizeIdx])) << endl;
kcout << "Address Of BitMap: " << hex_number((UIntPtr)ptr_bit_set) << endl;
}
};
@@ -171,15 +167,6 @@ namespace Kernel
return nullptr;
}
- if (wr)
- mm_map_page(ptr_new, eFlagsWr | eFlagsPresent);
- else if (user && wr)
- mm_map_page(ptr_new, eFlagsUser | eFlagsWr | eFlagsPresent);
- else if (user)
- mm_map_page(ptr_new, eFlagsUser | eFlagsPresent);
- else
- mm_map_page(ptr_new, eFlagsPresent);
-
return (UIntPtr*)ptr_new;
}
@@ -192,11 +179,6 @@ namespace Kernel
Detail::IBitMapAllocator traits;
Bool ret = traits.FreeBitMap(page_ptr);
- if (ret)
- {
- mm_map_page(page_ptr, ~eFlagsPresent);
- }
-
return ret;
}
} // namespace HAL
diff --git a/dev/zka/src/CodeMgr.cc b/dev/zka/src/CodeMgr.cc
index 130f8cfe..c855347b 100644
--- a/dev/zka/src/CodeMgr.cc
+++ b/dev/zka/src/CodeMgr.cc
@@ -4,8 +4,8 @@
------------------------------------------- */
-#include <NewKit/Utils.h>
#include <KernelKit/CodeMgr.h>
+#include <NewKit/Utils.h>
#include <KernelKit/UserProcessScheduler.h>
namespace Kernel
@@ -14,20 +14,20 @@ namespace Kernel
/// @note This sets up a new stack, anything on the main function that calls the Kernel will not be accessible.
/// @param main the start of the process.
/// @return if the process was started or not.
- Bool sched_execute_thread(MainKind main, const Char* process_name) noexcept
+ SizeT rtl_create_process(MainKind main, const Char* process_name) noexcept
{
if (!main)
return No;
UserProcess proc;
- proc.SetImageStart(reinterpret_cast<VoidPtr>(main));
+ proc.Image = reinterpret_cast<VoidPtr>(main);
proc.Kind = UserProcess::kExectuableKind;
proc.StackSize = kib_cast(32);
rt_set_memory(proc.Name, 0, kProcessLen);
rt_copy_memory((VoidPtr)process_name, proc.Name, rt_string_len(process_name));
- return UserProcessScheduler::The().Add(proc) > 0;
+ return UserProcessScheduler::The().Add(proc);
}
} // namespace Kernel
diff --git a/dev/zka/src/GUIDWizard.cc b/dev/zka/src/GUIDWizard.cc
index d72c77eb..cb4fc50b 100644
--- a/dev/zka/src/GUIDWizard.cc
+++ b/dev/zka/src/GUIDWizard.cc
@@ -26,9 +26,9 @@ namespace CFKit::XRN::Version1
Ref<GUIDSequence*> seq_ref{seq};
- seq_ref.Leak()->fMs1 = uuidSeq[0];
- seq_ref.Leak()->fMs2 = uuidSeq[1];
- seq_ref.Leak()->fMs3 = uuidSeq[2];
+ seq_ref.Leak()->fMs1 = uuidSeq[0];
+ seq_ref.Leak()->fMs2 = uuidSeq[1];
+ seq_ref.Leak()->fMs3 = uuidSeq[2];
seq_ref.Leak()->fMs4[0] = uuidSeq[3];
seq_ref.Leak()->fMs4[1] = uuidSeq[4];
seq_ref.Leak()->fMs4[2] = uuidSeq[5];
diff --git a/dev/zka/src/PEFCodeMgr.cc b/dev/zka/src/PEFCodeMgr.cc
index 593910be..44c14b42 100644
--- a/dev/zka/src/PEFCodeMgr.cc
+++ b/dev/zka/src/PEFCodeMgr.cc
@@ -201,16 +201,16 @@ namespace Kernel
namespace Utils
{
- Bool execute_from_image(PEFLoader& exec, const Int32& procKind) noexcept
+ SizeT execute_from_image(PEFLoader& exec, const Int32& procKind) noexcept
{
auto errOrStart = exec.FindStart();
if (errOrStart.Error() != kErrorSuccess)
- return false;
+ return No;
UserProcess proc;
- proc.SetImageStart(errOrStart.Leak().Leak());
+ proc.Image = errOrStart.Leak().Leak();
proc.Kind = procKind;
proc.StackSize = *(UIntPtr*)exec.FindSymbol(cPefStackSizeSymbol, kPefData);
proc.MemoryLimit = *(UIntPtr*)exec.FindSymbol(cPefHeapSizeSymbol, kPefData);
@@ -218,18 +218,15 @@ namespace Kernel
rt_set_memory(proc.Name, 0, kProcessLen);
if (exec.FindSymbol(cPefNameSymbol, kPefData))
- rt_copy_memory((VoidPtr)exec.FindSymbol(cPefNameSymbol, kPefData), proc.Name, rt_string_len((Char*)exec.FindSymbol(cPefNameSymbol, kPefData)));
- else
- rt_copy_memory((VoidPtr) "UNNAMED PROCESS.", proc.Name, rt_string_len("UNNAMED PROCESS."));
+ rt_copy_memory(exec.FindSymbol(cPefNameSymbol, kPefData), proc.Name, rt_string_len((Char*)exec.FindSymbol(cPefNameSymbol, kPefData)));
if (!proc.StackSize)
{
const auto cDefaultStackSizeMib = 8;
-
proc.StackSize = mib_cast(cDefaultStackSizeMib);
}
- return UserProcessScheduler::The().Add(proc) > 0;
+ return UserProcessScheduler::The().Add(proc);
}
} // namespace Utils
diff --git a/dev/zka/src/UserProcessScheduler.cc b/dev/zka/src/UserProcessScheduler.cc
index 05c2b35e..844afa5d 100644
--- a/dev/zka/src/UserProcessScheduler.cc
+++ b/dev/zka/src/UserProcessScheduler.cc
@@ -113,7 +113,7 @@ namespace Kernel
{
#ifdef __ZKA_AMD64__
auto pd = hal_read_cr3();
- hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD));
+ hal_write_cr3(reinterpret_cast<VoidPtr>(this->VMRegister));
auto ptr = mm_new_heap(sz, Yes, Yes);
@@ -174,7 +174,7 @@ namespace Kernel
{
#ifdef __ZKA_AMD64__
auto pd = hal_read_cr3();
- hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD));
+ hal_write_cr3(reinterpret_cast<VoidPtr>(this->VMRegister));
auto ret = mm_delete_heap(entry->MemoryEntry);
@@ -250,7 +250,7 @@ namespace Kernel
{
#ifdef __ZKA_AMD64__
auto pd = hal_read_cr3();
- hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD));
+ hal_write_cr3(reinterpret_cast<VoidPtr>(this->VMRegister));
#endif
MUST_PASS(mm_delete_heap(memory_list->MemoryEntry));
@@ -269,7 +269,7 @@ namespace Kernel
}
//! Free the memory's page directory.
- HAL::mm_free_bitmap(reinterpret_cast<VoidPtr>(this->MemoryPD));
+ HAL::mm_free_bitmap(reinterpret_cast<VoidPtr>(this->VMRegister));
//! Delete image if not done already.
if (this->Image && mm_is_valid_heap(this->Image))
@@ -310,14 +310,12 @@ namespace Kernel
SizeT UserProcessScheduler::Add(UserProcess process)
{
if (mTeam.mProcessAmount > kSchedProcessLimitPerTeam)
- return 0;
+ return -kErrorInvalidData;
#ifdef __ZKA_AMD64__
- process.MemoryPD = reinterpret_cast<UIntPtr>(HAL::mm_alloc_bitmap(Yes, Yes, sizeof(PDE), Yes));
+ process.VMRegister = reinterpret_cast<UIntPtr>(HAL::mm_alloc_bitmap(Yes, Yes, sizeof(PDE), Yes));
#endif // __ZKA_AMD64__
- process.Status = ProcessStatusKind::kStarting;
-
process.StackFrame = (HAL::StackFramePtr)mm_new_heap(sizeof(HAL::StackFrame), Yes, Yes);
if (!process.StackFrame)
@@ -347,22 +345,18 @@ namespace Kernel
if (!process.StackReserve)
{
- mm_delete_heap(process.StackFrame);
- process.StackFrame = nullptr;
+ process.Crash();
return -kErrorProcessFault;
}
++mTeam.mProcessAmount;
process.ProcessId = mTeam.mProcessAmount;
- process.Status = ProcessStatusKind::kRunning;
-
- // avoid the pitfalls of moving process.
- auto ret_pid = process.ProcessId;
+ process.Status = ProcessStatusKind::kStarting;
- mTeam.AsArray()[process.ProcessId] = move(process);
+ mTeam.AsArray()[process.ProcessId] = process;
- return ret_pid;
+ return process.ProcessId;
}
/***********************************************************************************/
@@ -384,7 +378,7 @@ namespace Kernel
/***********************************************************************************/
- Bool UserProcessScheduler::Remove(ProcessID process_id)
+ const Bool UserProcessScheduler::Remove(ProcessID process_id)
{
// check if process is within range.
if (process_id > mTeam.AsArray().Count())
@@ -408,6 +402,7 @@ namespace Kernel
const Bool UserProcessScheduler::HasMP()
{
+ MUST_PASS(kHandoverHeader);
return kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled;
}
@@ -447,7 +442,7 @@ namespace Kernel
this->CurrentProcess() = process;
// tell helper to find a core to schedule on.
- if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize - 1], process.StackFrame,
+ if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize], process.StackFrame,
process.ProcessId))
{
process.Crash();
diff --git a/dev/zka/src/Utils.cc b/dev/zka/src/Utils.cc
index 7427fe34..53f98391 100644
--- a/dev/zka/src/Utils.cc
+++ b/dev/zka/src/Utils.cc
@@ -34,14 +34,15 @@ namespace Kernel
Size rt_string_len(const Char* str, SizeT _len)
{
Size len{0};
+
while (str[len] != '\0')
{
if (len > _len)
{
- return 0;
+ return _len;
}
- len++;
+ ++len;
}
return len;
@@ -49,14 +50,11 @@ namespace Kernel
Size rt_string_len(const Char* ptr)
{
- if (*ptr == 0)
- return 0;
+ SizeT cnt{0};
- SizeT cnt = 0;
-
- while (ptr[cnt] != (Char)0)
+ while (ptr[cnt] != 0)
{
- cnt++;
+ ++cnt;
}
return cnt;
@@ -104,7 +102,7 @@ namespace Kernel
Int rt_copy_memory(const voidPtr src, voidPtr dst, Size len)
{
if (len < 1)
- return -2;
+ return 0;
char* srcChr = reinterpret_cast<char*>(src);
char* dstChar = reinterpret_cast<char*>(dst);
@@ -125,11 +123,13 @@ namespace Kernel
return nullptr;
const Char* string = new Char[rt_string_len(text)];
+
if (!string)
return nullptr;
voidPtr vText = reinterpret_cast<voidPtr>(const_cast<char*>(text));
voidPtr vStr = reinterpret_cast<voidPtr>(const_cast<char*>(string));
+
rt_copy_memory(vText, vStr, rt_string_len(text));
return string;