Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
155 | decky | 1 | \chapter{Specification} |
2 | |||
3 | \section{Overall Conception} |
||
4 | |||
5 | General-purpose and portable operating system with elements of |
||
6 | microkernel design and fully preemptive kernel. |
||
7 | |||
8 | SPARTAN kernel created by Jakub Jermar will be used as a basis for |
||
9 | further kernel development. |
||
10 | |||
11 | Detailed description of the features: |
||
12 | |||
13 | \begin{itemize} |
||
14 | \item General-purpose: Ready to run standard (non real-time) server and |
||
15 | workstation applications. Support for common programming |
||
16 | abstractions (threads, synchronization, physical and virtual |
||
17 | memory management). |
||
18 | \item Portable: Except small platform-specific kernel parts the system |
||
19 | will be implemented in higher programming languages to be portable |
||
20 | to different hardware platforms (PCs and similar). |
||
21 | \item Fully preemptive kernel: The basic scheduling element will be a |
||
22 | thread (more threads eventually grouped into a task) and the task |
||
23 | switching will be preemptive in both user-space and kernel-space. |
||
24 | However no real-time scheduling will be attempted. |
||
25 | \item Fine grained locking in kernel: The kernel will not contain |
||
26 | anything such as "big kernel lock", all critical sections will be |
||
27 | handled with small granularity locking. |
||
28 | \item Elements of microkernel design: The code running in kernel-space |
||
29 | will be limited to a much smaller size compared for example to the |
||
30 | traditional Unix design. The kernel will contain mostly just the |
||
31 | code which is necessary to run in kernel-space (scheduling, memory |
||
32 | management and protection, hardware resource management, IPC). |
||
33 | Device drivers, filesystems, network stacks, etc. will be |
||
34 | implemented in user-space. |
||
35 | \end{itemize} |
||
36 | |||
37 | \section[1a]{Research Domains} |
||
38 | |||
39 | Following features can be eventually implemented as research subjects, |
||
40 | but are optional to the overall design of the system: |
||
41 | |||
42 | \begin{itemize} |
||
43 | \item Kernel-level virtualization: Apart from some standard security |
||
44 | model (i.e. unix-like or any other) the OS might support |
||
45 | kernel-level context separation allowing to run more virtual |
||
46 | operating environments on a single physical machine. |
||
47 | \item Framework for running GNU/Linux applications: There should be no |
||
48 | syscall or native API compatibility, but rather some kind of |
||
49 | compile-time layer (libc and other shared libraries) allowing to |
||
50 | compile common GNU/Linux applications from sources. |
||
51 | \item Object/message paradigm: In the contrary to Unix file paradigm |
||
52 | (where every object in the system is represented by a file - even |
||
53 | if there is no consistent mapping from the given object's methods |
||
54 | to generic file methods), HelenOS might have a tree of objects |
||
55 | instead of a tree of files. Each object in the tree can support an |
||
56 | arbitrary set of messages and files are those objects which |
||
57 | support the set of messages representing file methods (i.e. open, |
||
58 | close, read, write, seek, etc.). All objects might support several |
||
59 | compulsory messages (GetName, GetSupportedMessages, etc.). The |
||
60 | message passing mechanism will be synchronous. |
||
61 | \end{itemize} |
||
62 | |||
63 | \section{Particular features} |
||
64 | |||
65 | \begin{itemize} |
||
66 | \item Kernel features |
||
67 | \begin{itemize} |
||
68 | \item Preemptive multiprocessing, SMP support, threads (tasks) |
||
69 | \begin{itemize} |
||
70 | \item Simple scheduler (but more complex than round-robin), |
||
71 | with threads as basic scheduling element |
||
72 | \item Support for thread priorities (possibly classes of |
||
73 | priorities for user-space tasks) |
||
74 | \item Support for SMP CPU bounding |
||
75 | \item Utilization of non-boot CPU(s) |
||
76 | \item Support for user-space threads (tasks as sets of |
||
77 | threads) |
||
78 | \item Support for kernel threads (independent code executed |
||
79 | within the kernel) |
||
80 | \end{itemize} |
||
81 | \item Kernel synchronization primitives, small granularity |
||
82 | synchronization (preemptive kernel) |
||
83 | \begin{itemize} |
||
84 | \item Semaphores, mutexes, condition variables, RW-locks, |
||
85 | spin-locks, etc. |
||
86 | \item No "big kernel lock" |
||
87 | \end{itemize} |
||
88 | \item Physical and virtual memory management |
||
89 | \begin{itemize} |
||
90 | \item Proper handling of physical memory regions |
||
91 | \item Physical memory heap (allocating of continuous blocks of |
||
92 | physical memory) |
||
93 | \item Arbitrary number of independent virtual memory mappings |
||
94 | (both for threads and internal kernel usage) |
||
95 | \item Kernel allocator in virtual memory (buddy/slab) |
||
96 | \item Named (text, stack, heap) and unnamed virtual memory |
||
97 | areas |
||
98 | \item Copying and sharing pages between different memory |
||
99 | mappings |
||
100 | \end{itemize} |
||
101 | \item Basic hardware handling |
||
102 | \begin{itemize} |
||
103 | \item Handling of basic boot-time hardware (CPU, PCI buses, |
||
104 | memory, display, keyboard, RTC, etc.) in kernel |
||
105 | \item Handling of specific hardware resources which are |
||
106 | fundamentaly unreachable from user-space on given |
||
107 | platform |
||
108 | \end{itemize} |
||
109 | \item IPC, user-space hardware access framework |
||
110 | \begin{itemize} |
||
111 | \item Abstraction for implementing inter-process communication |
||
112 | (message passing, etc.) |
||
113 | \item Interface for enabling the user-space threads to gain |
||
114 | access and manage hardware resources (with kernel |
||
115 | modules where needed) |
||
116 | \end{itemize} |
||
117 | \item User-space features |
||
118 | \begin{itemize} |
||
119 | \item Basic API |
||
120 | \begin{itemize} |
||
121 | \item Memory management API (memory regions creation, |
||
122 | descruction, resizing) |
||
123 | \item Task/thread management API |
||
124 | \item Synchronization API |
||
125 | \end{itemize} |
||
126 | \end{itemize} |
||
127 | \end{itemize} |
||
128 | \end{itemize} |
||
129 | |||
130 | \section{Implementation details} |
||
131 | |||
132 | \begin{itemize} |
||
133 | \item Supported platforms |
||
134 | \begin{itemize} |
||
135 | \item Real hardware support |
||
136 | \begin{itemize} |
||
137 | \item IA-32 (will be tested on multiple consumer Intel Pentium~4, |
||
138 | Intel Pentium~M, AMD Athlon~XP and AMD Athlon~MP machines) |
||
139 | \item PowerPC (will be tested on a consumer IBM PowerPC G5 machine) |
||
140 | \end{itemize} |
||
141 | \item Emulated support |
||
142 | \begin{itemize} |
||
143 | \item MIPS (will be tested in MSIM R4000 simulator) |
||
144 | \item IA-64 (will be tested in Ski simulator) |
||
145 | \item AMD64 (will be tested in Simics simulator) |
||
146 | \end{itemize} |
||
147 | \end{itemize} |
||
148 | \end{itemize} |