diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-10 11:47:07 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-10 11:47:07 +0100 |
| commit | eff4b4a1da4358c9953bd8d31cedc9656a7c0f06 (patch) | |
| tree | 95c17527a1c582c5c6dd14b9b0b1e1b4b054d92a /source | |
| parent | 7fef4242091b5b6eaa0278cfa9b763f27de8754f (diff) | |
feat: Freeze date to original date (November 2025), improve phrasing on TTPI. Add Additional Resources section, and new entries for References (WG01)
feat: Better reference citing.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'source')
| -rw-r--r-- | source/INDEX.md | 6 | ||||
| -rw-r--r-- | source/wg01/wg01.tex | 38 | ||||
| -rw-r--r-- | source/wg02/wg02.tex | 28 |
3 files changed, 40 insertions, 32 deletions
diff --git a/source/INDEX.md b/source/INDEX.md index cbea680..4ced327 100644 --- a/source/INDEX.md +++ b/source/INDEX.md @@ -2,9 +2,11 @@ This file indexes the different working groups and their purpose. -## Working Groups +## Working Groups: + +The following working groups are active: - WG01: `Kernel Architecture Group.` - WG02: `Multi-Tasking Group.` - WG03: `Compiler Design Group.` -- WG04-SPACE-RF: `DSL Group.`
\ No newline at end of file +- WG04-SPACE-RF: `Distributed Systems Group.`
\ No newline at end of file diff --git a/source/wg01/wg01.tex b/source/wg01/wg01.tex index d891d99..328accb 100644 --- a/source/wg01/wg01.tex +++ b/source/wg01/wg01.tex @@ -14,7 +14,7 @@ \title{WG01: Kernel C++} \author{Amlal El Mahrouss\\NeKernel.org} -\date{\today} +\date{November 2025} \lstset{ language=C++, @@ -43,7 +43,7 @@ \maketitle -\section{Introduction} +\section{Introduction.} { Many Operating Systems Kernels have been shipped using the C programming language.\\ And some of them like EKA2 uses the C++ programming language. Although notoriously difficult, one may still adapt to those constraints in order to deliver one such operating system kernel. \\ @@ -51,21 +51,19 @@ That is the reason that most production-grade kernels (Linux, XNU, and NT) are m However, when correctly applying C++ principles to kernel development, one makes the development much more easier to pull off. } -\section{The Three Principles of Kernel C++} +\section{The Three Principles of Kernel C++.} \subsection{Part One: The C++ Runtime} { The problem mostly lies in the C++ runtime. Which assumes an existing host. A host is the contrary of a freestanding target, that is a program which expects a runtime to be present and linked to the program. \\ A C++ Kernel may instead make use of compile-time features of C++ alongside a tiny C++ runtime to make sure that no issues arise because of this host/freestanding difference. } -\subsection{Part Two: Constexpr and Friends} +\subsection{Part Two: Constexpr and Friends.} { One may avoid V-tables or runtime when possible. While focusing instead on meta-programming and compile-time features offered by C++. For example one may use templates to implement a scheduling policy algorithm. One example of such implementation may be: -(Keep in mind that the code has not been tested on production systems, use it at your own risk!) - \begin{lstlisting} /// Reference Implementation: https://github.com /// /nekernel-org/nekernel/blob/stable/src/kernel/ @@ -123,7 +121,7 @@ consteval void ce_ddk_is_valid(T) {} } } -\subsection{Part Three: Memory and C++ Classes} +\subsection{Part Three: Memory and C++ Classes.} { This last part treats about the final and most important part of this paper so far. Memory. As you may already have known, the C++ language uses a class lookup system (also called v-table) in order to refer to a base method in case if the instance has it missing. @@ -164,12 +162,12 @@ Now the problem with kernel development is that we want to avoid such feature as \subsection{The Three Prongs on Inheritance:} -Consider the following questions: +TTPI is a thought exercise used to decide whether you should consider using C++ in a kernel. Consider the following thought exercise: \begin{itemize} -\item[A:] Is this a protocol/concept that can be extended to other similar protocols/concepts? -\item[B:] Is this doable without too much trade-off costs? -\item[C:] Is this doable without V-Tables? +\item[1:] Is this a feature that can be implementation with other similar protocols/concepts? +\item[2:] Is this doable without too much trade-off costs? +\item[3:] Is this doable without V-Tables? \end{itemize} } @@ -184,13 +182,21 @@ A reference implementation of this paper exists, It's called NeKernel.org, avail I am looking forward to any questions or inquiries at: amlal@nekernel.org. } -\subsection{References} +\subsection{Additional Resources} +{ +\begin{itemize} + \item[EKA2:] \href{https://en.wikipedia.org/wiki/EKA2}{wikipedia.org} + \item[XNU:] \href{https://en.wikipedia.org/wiki/XNU}{wikipedia.org} + \item[NeKernel.org:] \href{https://nekernel.org}{https://nekernel.org} +\end{itemize} +} + +\section{References} { \begin{itemize} - \item[EKA2:] \href{https://en.wikipedia.org/wiki/EKA2}{Link} - \item[XNU:] \href{https://en.wikipedia.org/wiki/XNU}{Link} - \item[NeKernel.org:] \href{https://nekernel.org}{Link} - \item[Virtual Method Tables:] \href{https://en.wikipedia.org/wiki/Virtual_method_table}{Link} + \item[NeKernel.org:] NeKernel.org, \href{https://nekernel.org}{https://nekernel.org} + \item[Sales. J, Tasker. M:] {Introducing EKA2, \href{https://media.wiley.com/product_data/excerpt/47/04700252/0470025247.pdf}{https://media.wiley.com}} + \item[Driesen. K, Hölzle. U:] {The direct cost of virtual function calls in C++, \href{https://dl.acm.org/doi/10.1145/236338.236369}{https://dl.acm.org}} \end{itemize} } diff --git a/source/wg02/wg02.tex b/source/wg02/wg02.tex index c0f9479..6168837 100644 --- a/source/wg02/wg02.tex +++ b/source/wg02/wg02.tex @@ -9,7 +9,7 @@ \title{WG02: The CoreProcessScheduler} \author{Amlal El Mahrouss\\NeKernel.org} -\date{\today} +\date{November 2025} \definecolor{codegray}{gray}{0.95} \definecolor{codeblue}{rgb}{0.1,0.1,0.8} @@ -86,13 +86,13 @@ class UserProcessTeam final { NE_COPY_DEFAULT(UserProcessTeam) - Array<USER_PROCESS, kSchedProcessLimitPerTeam>& AsArray(); - Ref<USER_PROCESS>& AsRef(); + Array<UserProcess, kSchedProcessLimitPerTeam>& AsArray(); + Ref<UserProcess>& AsRef(); ProcessID& Id() noexcept; public: - USER_PROCESS_ARRAY mProcessList; - USER_PROCESS_REF mCurrentProcess; + UserProcessArray mProcessList; + UserProcessRef mCurrentProcess; ProcessID mTeamId{0}; ProcessID mProcessCur{0}; }; @@ -109,14 +109,14 @@ class UserProcessTeam final { {The following sample is a C++ container used to hold process data and metadata.} {This is part of the NeKernel source tree.} \begin{lstlisting} -using ImagePtr = void*; +using ImagePtr = VoidPtr; -struct PROCESS_IMAGE final { - explicit PROCESS_IMAGE() = default; +struct ProcessImage final { + explicit ProcessImage() = default; private: - friend USER_PROCESS; - friend KERNEL_TASK; + friend UserProcess; + friend KernelTask; friend class UserProcessScheduler; @@ -156,10 +156,10 @@ struct PROCESS_IMAGE final { { \begin{itemize} - \item[CoreProcessScheduler:] \href{https://github.com/nekernel-org/nekernel/blob/develop/src/kernel/KernelKit/CoreProcessScheduler.h}{Link} - \item[NeKernel.org:] \href{https://nekernel.org/nekernel}{Link} - \item[Round Robin (OSTEP):] \href{https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched.pdf}{Link} - \item[Processor Affinity:] \href{https://www.tmurgent.com/WhitePapers/ProcessorAffinity.pdf}{Link} + \item[CoreProcessScheduler:] CoreProcessScheduler.h, \href{https://github.com/nekernel-org/nekernel/blob/develop/src/kernel/KernelKit/CoreProcessScheduler.h}{github.com} + \item[NeKernel.org:] NeKernel.org, \href{https://nekernel.org/nekernel}{nekernel.org} + \item[OSTEP:] Scheduling: Introduction, \href{https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched.pdf}{pages.cs.wisc.edu} + \item[Processor Affinity:] Processor Affinity, Multiple CPU Scheduling, \href{https://www.tmurgent.com/WhitePapers/ProcessorAffinity.pdf}{tmurgent.com} \end{itemize} } |
