summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/KernelKit
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-09-05 19:13:02 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-09-05 19:13:02 +0000
commit621e814da6d5005ade8a1fe3f378a363db559cf7 (patch)
tree438f1337c0eb2ae83cf3d409c29848d396be08b2 /dev/ZKA/KernelKit
parentcc9ce57cac59bd443e2319e3b8f427172b93f7da (diff)
parent3b60a1e87ab02a1b72d8bb9f7392780899d5a0d7 (diff)
Merged in major-refactor (pull request #19)
Major refactor
Diffstat (limited to 'dev/ZKA/KernelKit')
-rw-r--r--dev/ZKA/KernelKit/CodeMgr.hxx (renamed from dev/ZKA/KernelKit/CodeManager.hxx)10
-rw-r--r--dev/ZKA/KernelKit/DebugOutput.hxx24
-rw-r--r--dev/ZKA/KernelKit/DeviceMgr.hxx (renamed from dev/ZKA/KernelKit/DeviceManager.hxx)6
-rw-r--r--dev/ZKA/KernelKit/DriveMgr.hxx (renamed from dev/ZKA/KernelKit/DriveManager.hxx)6
-rw-r--r--dev/ZKA/KernelKit/FileMgr.hxx (renamed from dev/ZKA/KernelKit/FileManager.hxx)50
-rw-r--r--dev/ZKA/KernelKit/HardwareThreadScheduler.hxx (renamed from dev/ZKA/KernelKit/MP.hxx)2
-rw-r--r--dev/ZKA/KernelKit/Heap.hxx8
-rw-r--r--dev/ZKA/KernelKit/IDLLObject.hxx (renamed from dev/ZKA/KernelKit/DLLInterface.hxx)13
-rw-r--r--dev/ZKA/KernelKit/IPEFDLLObject.hxx (renamed from dev/ZKA/KernelKit/PEFDLLInterface.hxx)18
-rw-r--r--dev/ZKA/KernelKit/PCI/Dma.hxx2
-rw-r--r--dev/ZKA/KernelKit/PECodeMgr.hxx (renamed from dev/ZKA/KernelKit/PECodeManager.hxx)4
-rw-r--r--dev/ZKA/KernelKit/PEFCodeMgr.hxx (renamed from dev/ZKA/KernelKit/PEFCodeManager.hxx)8
-rw-r--r--dev/ZKA/KernelKit/UserProcessScheduler.hxx47
13 files changed, 107 insertions, 91 deletions
diff --git a/dev/ZKA/KernelKit/CodeManager.hxx b/dev/ZKA/KernelKit/CodeMgr.hxx
index ef9d18f4..c8f9cca9 100644
--- a/dev/ZKA/KernelKit/CodeManager.hxx
+++ b/dev/ZKA/KernelKit/CodeMgr.hxx
@@ -2,8 +2,8 @@
Copyright ZKA Technologies.
- File: CodeManager.hpp
- Purpose: Code Manager and Shared Objects.
+ File: CodeMgr.hpp
+ Purpose: Code Mgr and Shared Objects.
Revision History:
@@ -14,9 +14,9 @@
#pragma once
-#include <KernelKit/PECodeManager.hxx>
-#include <KernelKit/PEFCodeManager.hxx>
-#include <KernelKit/PEFDLLInterface.hxx>
+#include <KernelKit/PECodeMgr.hxx>
+#include <KernelKit/PEFCodeMgr.hxx>
+#include <KernelKit/IPEFDLLObject.hxx>
namespace Kernel
{
diff --git a/dev/ZKA/KernelKit/DebugOutput.hxx b/dev/ZKA/KernelKit/DebugOutput.hxx
index fcf18bff..70f920d1 100644
--- a/dev/ZKA/KernelKit/DebugOutput.hxx
+++ b/dev/ZKA/KernelKit/DebugOutput.hxx
@@ -6,7 +6,7 @@
#pragma once
-#include <KernelKit/DeviceManager.hxx>
+#include <KernelKit/DeviceMgr.hxx>
#include <CompilerKit/CompilerKit.hxx>
#include <NewKit/OwnPtr.hxx>
#include <NewKit/Stream.hxx>
@@ -59,21 +59,24 @@ namespace Kernel
inline TerminalDevice end_line()
{
TerminalDevice selfTerm = TerminalDevice::The();
- selfTerm << "\r";
+
+ selfTerm.operator<<("\r");
return selfTerm;
}
inline TerminalDevice carriage_return()
{
TerminalDevice selfTerm = TerminalDevice::The();
- selfTerm << "\r";
+
+ selfTerm.operator<<("\r");
return selfTerm;
}
inline TerminalDevice tabulate()
{
TerminalDevice selfTerm = TerminalDevice::The();
- selfTerm << "\t";
+
+ selfTerm.operator<<("\t");
return selfTerm;
}
@@ -81,7 +84,8 @@ namespace Kernel
inline TerminalDevice bell()
{
TerminalDevice selfTerm = TerminalDevice::The();
- selfTerm << "\a";
+
+ selfTerm.operator<<("\a");
return selfTerm;
}
@@ -111,7 +115,7 @@ namespace Kernel
buf[0] = cNumbers[h];
buf[1] = 0;
- term << buf;
+ term.operator<<(buf);
return term;
}
@@ -139,7 +143,7 @@ namespace Kernel
buf[0] = cNumbers[h];
buf[1] = 0;
- term << buf;
+ term.operator<<(buf);
return term;
}
} // namespace Detail
@@ -148,7 +152,7 @@ namespace Kernel
{
TerminalDevice selfTerm = TerminalDevice::The();
- selfTerm << "0x";
+ selfTerm.operator<<("0x");
Detail::_write_number_hex(x, selfTerm);
return selfTerm;
@@ -186,5 +190,5 @@ namespace Kernel
#undef kcout
#endif // ifdef kcout
-#define kcout TerminalDevice::The()
-#define endl kcout << Kernel::end_line()
+#define kcout (Kernel::TerminalDevice::The() << "\e[0;31m [ " << __FILE__ << ": LINE: " << Kernel::number(__LINE__)); (Kernel::TerminalDevice::The() << " ] \e[0m" << ": ")
+#define endl Kernel::TerminalDevice::The() << Kernel::end_line()
diff --git a/dev/ZKA/KernelKit/DeviceManager.hxx b/dev/ZKA/KernelKit/DeviceMgr.hxx
index 5164ae28..473af601 100644
--- a/dev/ZKA/KernelKit/DeviceManager.hxx
+++ b/dev/ZKA/KernelKit/DeviceMgr.hxx
@@ -14,13 +14,15 @@
#pragma once
-/* Kernel device interface manager. */
-/* @file KernelKit/DeviceManager.hpp */
+/* Device manager. */
+/* @file KernelKit/DeviceMgr.hpp */
/* @brief Device abstraction and I/O buffer. */
#include <NewKit/ErrorOr.hxx>
#include <NewKit/Ref.hxx>
+#define cDevicePath "\\Mount\\"
+
// Last Rev
// Wed, Apr 3, 2024 9:09:41 AM
diff --git a/dev/ZKA/KernelKit/DriveManager.hxx b/dev/ZKA/KernelKit/DriveMgr.hxx
index 96fbd95d..8cec098c 100644
--- a/dev/ZKA/KernelKit/DriveManager.hxx
+++ b/dev/ZKA/KernelKit/DriveMgr.hxx
@@ -10,12 +10,12 @@
#include <KernelKit/UserProcessScheduler.hxx>
#include <CompilerKit/CompilerKit.hxx>
#include <KernelKit/DebugOutput.hxx>
-#include <KernelKit/DeviceManager.hxx>
+#include <KernelKit/DeviceMgr.hxx>
#include <KernelKit/LPC.hxx>
#include <NewKit/Defines.hxx>
#include <NewKit/String.hxx>
-#define kDriveManagerCount (4U)
+#define kDriveMgrCount (4U)
#define kDriveInvalidID (-1)
#define kDriveNameLen (32)
@@ -116,7 +116,7 @@ namespace Kernel
return &mD;
default: {
ErrLocal() = kErrorNoSuchDisk;
- kcout << "newoskrnl.exe: No such disk.\n";
+ kcout << "No such disk.\n";
break;
}
diff --git a/dev/ZKA/KernelKit/FileManager.hxx b/dev/ZKA/KernelKit/FileMgr.hxx
index 05f74a63..86eade6a 100644
--- a/dev/ZKA/KernelKit/FileManager.hxx
+++ b/dev/ZKA/KernelKit/FileMgr.hxx
@@ -2,7 +2,7 @@
Copyright ZKA Technologies.
- File: FileManager.hxx
+ File: FileMgr.hxx
Purpose: Kernel file manager.
------------------------------------------- */
@@ -12,16 +12,16 @@
Revision History:
31/01/24: Update documentation (amlel)
- 05/07/24: NewFS support, and fork support, updated constants and specs
+ 05/07/24: NeFS support, and fork support, updated constants and specs
as well.
------------------------------------------- */
#pragma once
-#ifdef __FSKIT_USE_NEWFS__
-#include <FSKit/NewFS.hxx>
-#endif // __FSKIT_USE_NEWFS__
+#ifdef __FSKIT_USE_NEFS__
+#include <FSKit/NeFS.hxx>
+#endif // __FSKIT_USE_NEFS__
#include <CompilerKit/CompilerKit.hxx>
#include <HintKit/CompilerHint.hxx>
@@ -71,31 +71,31 @@ namespace Kernel
typedef VoidPtr NodePtr;
/**
- @brief Filesystem Manager Interface class
+ @brief Filesystem Mgr Interface class
@brief Used to provide common I/O for a specific filesystem.
*/
- class FilesystemManagerInterface
+ class FilesystemMgrInterface
{
public:
- explicit FilesystemManagerInterface() = default;
- virtual ~FilesystemManagerInterface() = default;
+ explicit FilesystemMgrInterface() = default;
+ virtual ~FilesystemMgrInterface() = default;
public:
- ZKA_COPY_DEFAULT(FilesystemManagerInterface);
+ ZKA_COPY_DEFAULT(FilesystemMgrInterface);
public:
/// @brief Mounts a new filesystem into an active state.
/// @param interface the filesystem interface
/// @return
- static bool Mount(FilesystemManagerInterface* interface);
+ static bool Mount(FilesystemMgrInterface* interface);
/// @brief Unmounts the active filesystem
/// @return
- static FilesystemManagerInterface* Unmount();
+ static FilesystemMgrInterface* Unmount();
/// @brief Getter, gets the active filesystem.
/// @return
- static FilesystemManagerInterface* GetMounted();
+ static FilesystemMgrInterface* GetMounted();
public:
virtual NodePtr Create(_Input const Char* path) = 0;
@@ -135,19 +135,19 @@ namespace Kernel
virtual bool Rewind(_Input NodePtr node) = 0;
};
-#ifdef __FSKIT_USE_NEWFS__
+#ifdef __FSKIT_USE_NEFS__
/**
- * @brief Based of FilesystemManagerInterface, takes care of managing NewFS
+ * @brief Based of FilesystemMgrInterface, takes care of managing NeFS
* disks.
*/
- class NewFilesystemManager final : public FilesystemManagerInterface
+ class NewFilesystemMgr final : public FilesystemMgrInterface
{
public:
- explicit NewFilesystemManager();
- ~NewFilesystemManager() override;
+ explicit NewFilesystemMgr();
+ ~NewFilesystemMgr() override;
public:
- ZKA_COPY_DEFAULT(NewFilesystemManager);
+ ZKA_COPY_DEFAULT(NewFilesystemMgr);
public:
NodePtr Create(const Char* path) override;
@@ -176,15 +176,15 @@ namespace Kernel
_Input SizeT sz) override;
public:
- /// @brief Get NewFS parser class.
+ /// @brief Get NeFS parser class.
/// @return The filesystem parser class.
- NewFSParser* GetParser() noexcept;
+ NeFSParser* GetParser() noexcept;
private:
- NewFSParser* fImpl{nullptr};
+ NeFSParser* fImpl{nullptr};
};
-#endif // ifdef __FSKIT_USE_NEWFS__
+#endif // ifdef __FSKIT_USE_NEFS__
/**
* Usable FileStream
@@ -192,7 +192,7 @@ namespace Kernel
* @tparam FSClass Filesystem contract who takes care of it.
*/
template <typename Encoding = Char,
- typename FSClass = FilesystemManagerInterface>
+ typename FSClass = FilesystemMgrInterface>
class FileStream final
{
public:
@@ -408,7 +408,7 @@ namespace Kernel
}
}
- kcout << "newoskrnl.exe: new file: " << path << ".\r";
+ kcout << "new file: " << path << ".\r";
}
/// @brief destructor
diff --git a/dev/ZKA/KernelKit/MP.hxx b/dev/ZKA/KernelKit/HardwareThreadScheduler.hxx
index 51f3472a..cf5d6754 100644
--- a/dev/ZKA/KernelKit/MP.hxx
+++ b/dev/ZKA/KernelKit/HardwareThreadScheduler.hxx
@@ -103,7 +103,7 @@ namespace Kernel
operator bool() noexcept;
public:
- /// @brief Shared instance of the MP Manager.
+ /// @brief Shared instance of the MP Mgr.
/// @return the reference to the mp manager class.
STATIC HardwareThreadScheduler& The();
diff --git a/dev/ZKA/KernelKit/Heap.hxx b/dev/ZKA/KernelKit/Heap.hxx
index 65b71774..27c79c83 100644
--- a/dev/ZKA/KernelKit/Heap.hxx
+++ b/dev/ZKA/KernelKit/Heap.hxx
@@ -30,10 +30,10 @@ namespace Kernel
/// @return if it exists.
Boolean mm_is_valid_heap(VoidPtr heap_ptr);
- /// @brief allocate chunk of memory.
- /// @param sz size of pointer
- /// @param rw read write (true to enable it)
- /// @param user is it accesible by user processes?
+ /// @brief Allocate chunk of memory.
+ /// @param sz Size of pointer
+ /// @param rw Read Write bit.
+ /// @param user User enable bit.
/// @return The newly allocated pointer.
VoidPtr mm_new_ke_heap(const SizeT sz, const Bool rw, const Bool user);
diff --git a/dev/ZKA/KernelKit/DLLInterface.hxx b/dev/ZKA/KernelKit/IDLLObject.hxx
index 370363b7..39580307 100644
--- a/dev/ZKA/KernelKit/DLLInterface.hxx
+++ b/dev/ZKA/KernelKit/IDLLObject.hxx
@@ -13,11 +13,11 @@
namespace Kernel
{
- class DLLInterface
+ class IDLLObject
{
public:
- explicit DLLInterface() = default;
- virtual ~DLLInterface() = default;
+ explicit IDLLObject() = default;
+ virtual ~IDLLObject() = default;
struct DLL_TRAITS final
{
@@ -30,13 +30,14 @@ namespace Kernel
}
};
- ZKA_COPY_DEFAULT(DLLInterface);
+ ZKA_COPY_DEFAULT(IDLLObject);
virtual DLL_TRAITS** GetAddressOf() = 0;
virtual DLL_TRAITS* Get() = 0;
- virtual void Mount(DLL_TRAITS* to_mount) = 0;
- virtual void Unmount() = 0;
+ virtual Void Mount(DLL_TRAITS* to_mount) = 0;
+ virtual Void Unmount() = 0;
+
};
/// @brief Pure implementation, missing method/function handler.
diff --git a/dev/ZKA/KernelKit/PEFDLLInterface.hxx b/dev/ZKA/KernelKit/IPEFDLLObject.hxx
index ef1a844f..013173d1 100644
--- a/dev/ZKA/KernelKit/PEFDLLInterface.hxx
+++ b/dev/ZKA/KernelKit/IPEFDLLObject.hxx
@@ -11,9 +11,9 @@
#define __KERNELKIT_SHARED_OBJECT_HXX__
#include <KernelKit/PEF.hxx>
-#include <KernelKit/PEFCodeManager.hxx>
#include <NewKit/Defines.hxx>
-#include <KernelKit/DLLInterface.hxx>
+#include <KernelKit/PEFCodeMgr.hxx>
+#include <KernelKit/IDLLObject.hxx>
namespace Kernel
{
@@ -21,14 +21,14 @@ namespace Kernel
* @brief Shared Library class
* Load library from this class
*/
- class PEFDLLInterface final : public DLLInterface
+ class IPEFDLLObject final : public IDLLObject
{
public:
- explicit PEFDLLInterface() = default;
- ~PEFDLLInterface() = default;
+ explicit IPEFDLLObject() = default;
+ ~IPEFDLLObject() = default;
public:
- ZKA_COPY_DEFAULT(PEFDLLInterface);
+ ZKA_COPY_DEFAULT(IPEFDLLObject);
private:
DLL_TRAITS* fMounted{nullptr};
@@ -96,10 +96,10 @@ namespace Kernel
PEFLoader* fLoader{nullptr};
};
- typedef PEFDLLInterface* DLLInterfacePtr;
+ typedef IPEFDLLObject* IDLL;
- EXTERN_C DLLInterfacePtr rtl_init_shared_object(UserProcess* header);
- EXTERN_C Void rtl_fini_shared_object(UserProcess* header, DLLInterfacePtr lib, Bool* successful);
+ EXTERN_C IDLL rtl_init_shared_object(UserProcess* header);
+ EXTERN_C Void rtl_fini_shared_object(UserProcess* header, IDLL lib, Bool* successful);
} // namespace Kernel
#endif /* ifndef __KERNELKIT_SHARED_OBJECT_HXX__ */
diff --git a/dev/ZKA/KernelKit/PCI/Dma.hxx b/dev/ZKA/KernelKit/PCI/Dma.hxx
index 43df13f0..8e51bc45 100644
--- a/dev/ZKA/KernelKit/PCI/Dma.hxx
+++ b/dev/ZKA/KernelKit/PCI/Dma.hxx
@@ -6,7 +6,7 @@
#pragma once
-#include <KernelKit/DeviceManager.hxx>
+#include <KernelKit/DeviceMgr.hxx>
#include <KernelKit/PCI/Device.hxx>
#include <NewKit/Array.hxx>
#include <NewKit/OwnPtr.hxx>
diff --git a/dev/ZKA/KernelKit/PECodeManager.hxx b/dev/ZKA/KernelKit/PECodeMgr.hxx
index f42c7c21..7b84fbc1 100644
--- a/dev/ZKA/KernelKit/PECodeManager.hxx
+++ b/dev/ZKA/KernelKit/PECodeMgr.hxx
@@ -2,8 +2,8 @@
Copyright ZKA Technologies.
- File: PECodeManager.hxx
- Purpose: PE32+ Code Manager and Shared Objects.
+ File: PECodeMgr.hxx
+ Purpose: PE32+ Code Mgr and Shared Objects.
Revision History:
diff --git a/dev/ZKA/KernelKit/PEFCodeManager.hxx b/dev/ZKA/KernelKit/PEFCodeMgr.hxx
index dd6daca5..c2938fae 100644
--- a/dev/ZKA/KernelKit/PEFCodeManager.hxx
+++ b/dev/ZKA/KernelKit/PEFCodeMgr.hxx
@@ -10,7 +10,7 @@
#include <KernelKit/PEF.hxx>
#include <NewKit/ErrorOr.hxx>
#include <NewKit/String.hxx>
-#include <KernelKit/FileManager.hxx>
+#include <KernelKit/FileMgr.hxx>
#define kPefApplicationMime "application/x-newos-exec"
@@ -46,11 +46,11 @@ namespace Kernel
bool IsLoaded() noexcept;
private:
-#ifdef __FSKIT_USE_NEWFS__
- OwnPtr<FileStream<Char, NewFilesystemManager>> fFile;
+#ifdef __FSKIT_USE_NEFS__
+ OwnPtr<FileStream<Char, NewFilesystemMgr>> fFile;
#else
OwnPtr<FileStream<Char>> fFile;
-#endif // __FSKIT_USE_NEWFS__
+#endif // __FSKIT_USE_NEFS__
Ref<StringView> fPath;
VoidPtr fCachedBlob;
diff --git a/dev/ZKA/KernelKit/UserProcessScheduler.hxx b/dev/ZKA/KernelKit/UserProcessScheduler.hxx
index 809dbb7f..9585da29 100644
--- a/dev/ZKA/KernelKit/UserProcessScheduler.hxx
+++ b/dev/ZKA/KernelKit/UserProcessScheduler.hxx
@@ -14,7 +14,6 @@
#define kSchedMinMicroTime (AffinityKind::kStandard)
#define kSchedInvalidPID (-1)
-#define kSchedMaxStackSz (4096) /* Max stack sz */
#define kSchedProcessLimitPerTeam (16U)
////////////////////////////////////////////////////
@@ -28,7 +27,7 @@ namespace Kernel
//! @note Forward declarations.
class UserProcess;
- class PEFDLLInterface;
+ class IPEFDLLObject;
class UserProcessTeam;
class UserProcessScheduler;
class UserProcessHelper;
@@ -53,12 +52,12 @@ namespace Kernel
//! to run.
enum class AffinityKind : Int32
{
- kRealTime = 0500,
- kVeryHigh = 2500,
- kHigh = 2000,
- kStandard = 1500,
- kLowUsage = 1000,
- kVeryLowUsage = 5000,
+ kRealTime = 500,
+ kVeryHigh = 250,
+ kHigh = 200,
+ kStandard = 1000,
+ kLowUsage = 1500,
+ kVeryLowUsage = 2000,
};
// operator overloading.
@@ -147,24 +146,33 @@ namespace Kernel
User* Owner{nullptr};
HAL::StackFramePtr StackFrame{nullptr};
AffinityKind Affinity{AffinityKind::kStandard};
- ProcessStatusKind Status{ProcessStatusKind::kDead};
+ ProcessStatusKind Status{ProcessStatusKind::kDead};
UInt8* StackReserve{nullptr};
// Memory, images pointers.
- HeapPtrKind HeapCursor{nullptr};
ImagePtr Image{nullptr};
- HeapPtrKind HeapPtr{nullptr};
SizeT StackSize{mib_cast(8)};
- // shared library handle, reserved for kDLLKind types of executables only.
- PEFDLLInterface* DLLPtr{nullptr};
- UserProcess* Parent{nullptr};
+ //! @brief Shared library handle, reserved for kDLLKind types of executables only.
+ IPEFDLLObject* DLLPtr{nullptr};
+
+ /// @brief Parent process, reserved for threads only.
+ UserProcess* Parent{nullptr};
// Memory usage.
- SizeT UsedMemory{0};
- SizeT FreeMemory{0};
- SizeT SizeMemory{gib_cast(4)};
+ SizeT MemoryCursor{0};
+ SizeT MemoryLimit{gib_cast(128)};
+
+ struct PROCESS_MEMORY_ENTRY
+ {
+ VoidPtr MemoryEntry;
+
+ struct PROCESS_MEMORY_ENTRY *MemoryPrev;
+ struct PROCESS_MEMORY_ENTRY *MemoryNext;
+ } * MemoryEntryList{nullptr};
+
+ SizeT MemoryPD{0};
enum
{
@@ -212,9 +220,9 @@ namespace Kernel
//! @return Int32 local error code.
Int32& GetLocalCode() noexcept;
- const User* GetOwner() noexcept;
+ const User* GetOwner() noexcept;
const ProcessStatusKind& GetStatus() noexcept;
- const AffinityKind& GetAffinity() noexcept;
+ const AffinityKind& GetAffinity() noexcept;
private:
UInt32 fLastExitCode{0};
@@ -290,6 +298,7 @@ namespace Kernel
STATIC bool CanBeScheduled(UserProcess& process);
STATIC PID& TheCurrentPID();
STATIC SizeT StartScheduling();
+ STATIC Void Init();
};
const UInt32& sched_get_exit_code(void) noexcept;