diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/kernel/KernelKit/CoreProcessScheduler.h | 39 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/ZXD.h | 9 | ||||
| -rw-r--r-- | dev/kernel/src/FS/HeFS+FileSystemParser.cc | 5 | ||||
| -rw-r--r-- | dev/kernel/src/UserProcessScheduler.cc | 1 |
4 files changed, 50 insertions, 4 deletions
diff --git a/dev/kernel/KernelKit/CoreProcessScheduler.h b/dev/kernel/KernelKit/CoreProcessScheduler.h index 56c2bce0..9ed2dada 100644 --- a/dev/kernel/KernelKit/CoreProcessScheduler.h +++ b/dev/kernel/KernelKit/CoreProcessScheduler.h @@ -104,6 +104,40 @@ struct PROCESS_FILE_TREE { }; }; +using ProcessCtx = UInt32; + +template <typename T> +struct PROCESS_SPECIAL_TREE { + static constexpr auto kHeap = false; + static constexpr auto kFile = false; + static constexpr auto kSpecial = true; + + T Entry{nullptr}; + SizeT EntrySize{0UL}; + SizeT EntryPad{0UL}; + + /// @brief a context is where the resource comes from. + ProcessCtx EntryContext{0UL}; // could be a socket, printer, device... + + UInt32 Color{kBlackTreeKind}; + + struct PROCESS_SPECIAL_TREE<T>* Parent { + nullptr + }; + + struct PROCESS_SPECIAL_TREE<T>* Child { + nullptr + }; + + struct PROCESS_SPECIAL_TREE<T>* Prev { + nullptr + }; + + struct PROCESS_SPECIAL_TREE<T>* Next { + nullptr + }; +}; + /***********************************************************************************/ /// @brief Subsystem enum type. /***********************************************************************************/ @@ -113,8 +147,8 @@ enum class ProcessSubsystem : Int32 { kProcessSubsystemUser, kProcessSubsystemService, kProcessSubsystemDriver, + kProcessSubsystemCount = kProcessSubsystemDriver - kProcessSubsystemSecurity + 1, kProcessSubsystemInvalid = 0xFFFFFFF, - kProcessSubsystemCount = 4, }; /***********************************************************************************/ @@ -127,13 +161,14 @@ enum class ProcessStatusKind : Int32 { kKilled, kFrozen, kFinished, - kCount = 6, + kCount = kFinished - kStarting + 1, }; /***********************************************************************************/ //! @brief Affinity is the amount of nano-seconds this process is going to run. /***********************************************************************************/ enum class AffinityKind : Int32 { + kInvalid = 0, kRealTime = 100, kVeryHigh = 150, kHigh = 200, diff --git a/dev/kernel/KernelKit/ZXD.h b/dev/kernel/KernelKit/ZXD.h index f1c99a21..966c54c7 100644 --- a/dev/kernel/KernelKit/ZXD.h +++ b/dev/kernel/KernelKit/ZXD.h @@ -15,6 +15,12 @@ namespace Kernel { struct ZXD_EXEC_HEADER; struct ZXD_STUB_HEADER; +enum ZXD_FLAGS { + kZXDFlagsInvalid, + kZXDFlagsDriver, + kZXDFlagsCount, +}; + /// @brief ZXD executable header /// @details This header is used to identify ZXD executable files. struct PACKED ZXD_EXEC_HEADER { @@ -41,4 +47,7 @@ struct PACKED ZXD_STUB_HEADER { UInt32 fStubOffset; UInt32 fStubCRC32; }; + +using ZXD_EXEC_HEADER_PTR = ZXD_EXEC_HEADER*; +using ZXD_STUB_HEADER_PTR = ZXD_STUB_HEADER*; } // namespace Kernel diff --git a/dev/kernel/src/FS/HeFS+FileSystemParser.cc b/dev/kernel/src/FS/HeFS+FileSystemParser.cc index f1531b4c..86f929c0 100644 --- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc +++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc @@ -88,7 +88,8 @@ namespace Detail { /// @brief Simple algorithm to hash directory entries for INDs. /// @param path the directory path. /// @return The hashed path. - STATIC UInt64 hefsi_hash_64(const Utf8Char* path) { + template <typename CharT = Utf8Char> + STATIC UInt64 hefsi_hash_64(const CharT* path) { if (!path || *path == 0) return 0; const UInt64 kFnvBaseOffset = 0xcbf29ce484222325ULL; @@ -97,7 +98,7 @@ namespace Detail { UInt64 hash = kFnvBaseOffset; while (*path) { - hash ^= (Utf8Char) (*path++); + hash ^= (CharT) (*path++); hash *= kFnvPrimeNumber; } diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 15da4431..174862a4 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -587,6 +587,7 @@ ErrorOr<ProcessID> UserProcessHelper::TheCurrentPID() { /// @retval false cannot be schedulded. Bool UserProcessHelper::CanBeScheduled(const USER_PROCESS& process) { if (process.Status != ProcessStatusKind::kRunning) return No; + if (process.Affinity == AffinityKind::kInvalid) return No; if (process.StackSize > kSchedMaxStackSz) return No; if (!process.Name[0]) return No; |
