No description
| docs | ||
| others | ||
| previous | ||
| pub | ||
| winkle-kernel@0eb06f995a | ||
| winkle-refdocs@bf3fd85b21 | ||
| .gitmodules | ||
Winkle is a Operating System.
This Operating System is designed to be:
1) General purpose, but
2) Only used by Michael Dilger
Target Machines:
* Intially we are targetting the HiFive Unmatched (RISC-V RV64GC)
* But we are structuring it for multiple targets later on
* Machine requirements:
* MUST provide two modes (supervisor and system) in a way that is
classically virtualizable.
* MUST have an MMU with virtual memory page tables and
page protection bits (minimally at least r and w bits)
Language:
* Rust
Microkernel Architecture:
* This OS is intended to be structured as a microkernel.
* The microkernel will handle:
* Traps (exceptions and interrupts), and handling of the timer interrupt
* Virtual Memory and Page Protection
* Process Scheduling, CPU allocation and Thread Management
* IPC setup
* Capability based access control
* Namespacing
* The following will be handled by daemons
* Device drivers, except those devices handled in the core (e.g. the MMU and timer)
* File Systems
* IPC after setup
* Everything else
* We violate the minimality principle in the following ways:
* We keep the timer interrupt inside the microkernel
* We do scheduling inside the microkernel
* We bundle device drivers and other critical userspace daemons with the microkernel
* We define some security policy inside the microkernel so it is not as general
IPC:
IPC is to use shared memory, two pages per communicating pair, one read and one write
from the perspective of one side of the communication, using a lock-free data structure
queue, similar to that of io_uring. Thus IPC is asynchronous.
IPC additionally may use system calls to ping the other party, waking them up in case
they are blocked.