summaryrefslogtreecommitdiffhomepage
path: root/source
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-12-10 11:47:07 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-12-10 11:47:07 +0100
commiteff4b4a1da4358c9953bd8d31cedc9656a7c0f06 (patch)
tree95c17527a1c582c5c6dd14b9b0b1e1b4b054d92a /source
parent7fef4242091b5b6eaa0278cfa9b763f27de8754f (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.md6
-rw-r--r--source/wg01/wg01.tex38
-rw-r--r--source/wg02/wg02.tex28
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}
}