No description
Find a file
2022-06-21 10:35:18 +12:00
docs Some general docs 2022-06-21 10:35:18 +12:00
others Note on MultiZone security 2021-05-13 06:50:34 +12:00
previous Docs about previous attempts; include another rust/risc-v os 2021-04-23 09:15:35 +12:00
pub Updates 2021-05-29 20:37:19 +12:00
winkle-kernel@0eb06f995a more 2021-05-09 16:01:43 +12:00
winkle-refdocs@bf3fd85b21 Updates 2021-05-29 20:37:19 +12:00
.gitmodules Public winkle-kernel 2021-05-04 19:12:19 +12:00

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.