diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/tex/NOTICE.md | 6 | ||||
| -rw-r--r-- | docs/tex/core_process_scheduler.tex | 128 |
2 files changed, 5 insertions, 129 deletions
diff --git a/docs/tex/NOTICE.md b/docs/tex/NOTICE.md index c4015afd..6b5846f6 100644 --- a/docs/tex/NOTICE.md +++ b/docs/tex/NOTICE.md @@ -1,6 +1,10 @@ # Notice +## CoreProcessScheduler has moved! + +The CPS is now part of WG02, for more information clone the following repository: (https://github.com/nekernel-org/draft)[https://github.com/nekernel-org/draft]. + ## Recommended: - `pdflatex` is recommended for this matter. -- You can use `overleaf` to edit the LaTeX files too.
\ No newline at end of file +- You can use `overleaf` to edit the LaTeX files too. diff --git a/docs/tex/core_process_scheduler.tex b/docs/tex/core_process_scheduler.tex deleted file mode 100644 index 71c1db9e..00000000 --- a/docs/tex/core_process_scheduler.tex +++ /dev/null @@ -1,128 +0,0 @@ -\documentclass{article} -\usepackage{graphicx} -\usepackage{hyperref} - -\title{CoreProcessScheduler: Technical Documentation} -\author{Amlal El Mahrouss} -\date{\today} - -\begin{document} - -\maketitle - -\section{Abstract} - -{The CoreProcessScheduler governs how the scheduling backend and policy of the kernel works, It is the common gateway for schedulers inside NeKernel based systems.} - -\section{Overview} - -{The CoreProcessScheduler (now referred as CPS) serves as the intermediate foundal between the scheduler backend and kernel.} {It takes care of process life-cycle management, team-based process grouping, and affinity-based CPU based allocation to mention the least.} - -\section{The Affinity System} - -{Processes are given CPU time affinity hints using an affinity kind type, these hints help the scheduler run or adjust the current process.} - -\subsection{Sample Code \#1} - -{The following sample is C++ code.} {The smaller the value, the more critical the process.} - -\begin{verbatim} -enum struct AffinityKind : Int32 { - kRealTime = 100, - kVeryHigh = 150, - kHigh = 200, - kStandard = 1000, - kLowUsage = 1500, - kVeryLowUsage = 2000, -}; -\end{verbatim} - -\section{The Team System} - -{The team system holds process metadata for the backend scheduler to run on. It holds methods and fields for backend specific operations.} {One implementation of such team is the UserProcessTeam object inside NeKernel.} - -\subsection{Sample Code \#2} - -{The following sample is used to hold team metadata.} {This is part of the NeKernel source tree.} - -\begin{verbatim} -class UserProcessTeam final { - public: - explicit UserProcessTeam(); - ~UserProcessTeam() = default; - - NE_COPY_DEFAULT(UserProcessTeam) - - Array<UserProcess, kSchedProcessLimitPerTeam>& AsArray(); - Ref<UserProcess>& AsRef(); - ProcessID& Id() noexcept; - - public: - UserProcessArray mProcessList; - UserProcessRef mCurrentProcess; - ProcessID mTeamId{0}; - ProcessID mProcessCur{0}; -}; - -\end{verbatim} - -\section{The Process Image System} - -{The process image container is a design pattern made to contain process data and metadata, its purpose comes from the lack of mainstream operating systems of such ability to hold metadata.} - -{This approach helps separate concerns and give modularity to the system, as the image and process structure are not mixed together.} - -\subsection{Sample Code \#3} - -{The following sample is a C++ container used to hold process data and metadata.} {This is part of the NeKernel source tree.} - -\begin{verbatim} -struct PROCESS_IMAGE final { - explicit PROCESS_IMAGE() = default; - - private: - friend UserProcess; - friend KernelTask; - - friend class UserProcessScheduler; - - ImagePtr fCode; - ImagePtr fBlob; - - public: - Bool HasCode() const { return this->fCode != nullptr; } - - Bool HasImage() const { return this->fBlob != nullptr; } - - ErrorOr<ImagePtr> LeakImage() { - if (this->fCode) { - return ErrorOr<ImagePtr>{this->fCode}; - } - - return ErrorOr<ImagePtr>{kErrorInvalidData}; - } - - ErrorOr<ImagePtr> LeakBlob() { - if (this->fBlob) { - return ErrorOr<ImagePtr>{this->fBlob}; - } - - return ErrorOr<ImagePtr>{kErrorInvalidData}; - } -}; - -\end{verbatim} - -\section{Conclusion} - -{The CoreProcessScheduler is a piece of systems design with robust design and useful cases, although useful in desktop/server cases, It may not be suited for every other tasks.} - -{And while one scheduler backend (such as the UserProcessScheduler) takes care of user process scheduling and fairness, the CoreProcessScheduler takes care of the foundation for those systems.} - -\section{References} - -{NeKernel}: \href{https://github.com/nekernel-org/nekernel}{NeKernel} - -{CoreProcessScheduler}: \href{https://github.com/nekernel-org/nekernel/blob/dev/src/kernel/KernelKit/CoreProcessScheduler.h}{CoreProcessScheduler} - -\end{document}
\ No newline at end of file |
