227 lines
5.8 KiB
HTML
227 lines
5.8 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
|
|
<title>reveal.js</title>
|
|
|
|
<link rel="stylesheet" href="dist/reset.css">
|
|
<link rel="stylesheet" href="dist/reveal.css">
|
|
<link rel="stylesheet" href="dist/theme/sky.css">
|
|
|
|
<!-- Theme used for syntax highlighted code -->
|
|
<link rel="stylesheet" href="plugin/highlight/zenburn.css">
|
|
</head>
|
|
|
|
<body>
|
|
<div class="reveal">
|
|
<div class="slides">
|
|
<section>
|
|
<h1>Xous</h1>
|
|
<h2>Embedded Multiprocess Microkernel</h2>
|
|
<h3>17 April 2024, Sean Cross</h3>
|
|
</section>
|
|
<section>
|
|
<h2>Outline</h2>
|
|
<ol>
|
|
<li>About Me</li>
|
|
<li>Project history</li>
|
|
<li>Why a new OS?</li>
|
|
<li>What can it do?</li>
|
|
<li>How do I use it?</li>
|
|
</ol>
|
|
</section>
|
|
<section>
|
|
<section>
|
|
<h2>About Me</h2>
|
|
<ul>
|
|
<li>Live in Singapore</li>
|
|
<li>Enjoy understanding systems</li>
|
|
<li>Low-level is best</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>Novena: Open laptop</h2>
|
|
<div class="r-hstack">
|
|
<div>
|
|
<img data-src="img/novena-1068_jpg_md-xl.jpg" height="400">
|
|
</div>
|
|
<div>
|
|
<ul>
|
|
<li>Always wanted custom laptop</li>
|
|
<li>"Relatively Large" Cortex A9</li>
|
|
<li>32 GB disk, 4 GB RAM</li>
|
|
<li>Linux</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section>
|
|
<img data-src="img/novena-1089_jpg_project-body.jpg" height="600">
|
|
</section>
|
|
<section>
|
|
<h2>Chibitronics: Programming for 8-year-olds</h2>
|
|
<div class="r-hstack">
|
|
<div>
|
|
<img data-src="img/ltc.jpg" height="400">
|
|
</div>
|
|
<div>
|
|
<ul>
|
|
<li>Paper circuit design</li>
|
|
<li>"Relatively Small" Cortex M0+</li>
|
|
<li>32 kB flash, 4 kB RAM</li>
|
|
<li>ChibiOS</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section>
|
|
<h2>Precursor Design</h2>
|
|
<div class="r-hstack">
|
|
<div>
|
|
<img data-src="img/betrusted_pvt_blockdiag.png" height="500">
|
|
</div>
|
|
<div>
|
|
<ul>
|
|
<li>Two FPGA-based CPUs</li>
|
|
<li>RV32IMAC based on VexRiscv</li>
|
|
<li>128 MB flash, 16 MB RAM</li>
|
|
<li class="fragment">Operating System?</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section>
|
|
<img data-src="img/a-r-m.png">
|
|
</section>
|
|
<section>
|
|
<h2>Operating System Selection</h2>
|
|
<ul>
|
|
<li>RISC-V</li>
|
|
<li>Memory Protection</li>
|
|
<li>Not Linux</li>
|
|
<li class="fragment">Rust is a new thing?</li>
|
|
</ul>
|
|
</section>
|
|
</section>
|
|
<section>
|
|
<section>
|
|
<h2>Xous Design</h2>
|
|
</section>
|
|
<section>
|
|
<h2>Brief Specs</h2>
|
|
<ul>
|
|
<li>Kernel is 17 ksloc</li>
|
|
<!-- * 6k of that is a RISC-V disassembler for optional GDB support -->
|
|
<li>Threads</li>
|
|
<li>Processes</li>
|
|
<li>Tier 2 Rust support</li>
|
|
<!-- * libstd -->
|
|
<li>Entire project built on <i>stable</i> Rust</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>Other Features</h2>
|
|
<ul>
|
|
<li>Microkernel</li>
|
|
<li>Interrupts in userspace</li>
|
|
<li>Each page of memory is mapped once</li>
|
|
<li class="fragment">No C compiler required</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>More Specs</h2>
|
|
<ul>
|
|
<li>Kernel is single-threaded</li>
|
|
<li>Services use well-defined API calls</li>
|
|
<li>All drivers provided in user space</li>
|
|
<li>Each page of memory can only be lent once</li>
|
|
</ul>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>Messages are Everything</h2>
|
|
<ul>
|
|
<li>Messages form IPC</li>
|
|
<li>Scalars or Pages</li>
|
|
<li>Blocking or Nonblocking</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>Example: Sleeping</h2>
|
|
|
|
<code>sleep(msec: usize)</code>
|
|
<ol>
|
|
<li>Connect to "ticktimer" server</li>
|
|
<li>Send a `BlockingScalar` with desired duration</li>
|
|
<li>Client will block until server replies</li>
|
|
<li>Server calls `ReturnScalar()` after expiration</li>
|
|
</ol>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Example: Mutex</h2>
|
|
<code>mutex.lock().unwrap()</code>
|
|
<ol>
|
|
<li>Fast path with <code>AtomicIsize</code></li>
|
|
<li>Slow path by sending <code>LockMutex</code></li>
|
|
<li>On unlock, contending thread will see poison and send <code>UnlockMutex</code></li>
|
|
<li>Server will reply to <code>LockMutex</code> message to unblock the thread</li>
|
|
</ol>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>MMUs are Amazing</h2>
|
|
<ul>
|
|
<li>XIP flash for free!</li>
|
|
<li>Swap space</li>
|
|
<li>Encrypted swap? No problem!</li>
|
|
<li>Realtime patching broken hardware</li>
|
|
</ul>
|
|
</section>
|
|
<section>
|
|
<h2>How can I use it?</h2>
|
|
<div class="r-hstack">
|
|
<div>
|
|
<img data-src="img/renode-networking.png">
|
|
</div>
|
|
<div>
|
|
<ul>
|
|
<li>Talk to system vendors -- get them to include MMUs!</li>
|
|
<li>Emulation is easiest -- Renode support</li>
|
|
</ul>
|
|
</div>
|
|
</section>
|
|
</section>
|
|
<section>
|
|
<h2>Thank you!</h2>
|
|
<h3>github.com/betrusted-io/xous-core</h3>
|
|
<!-- <h3 class="fragment">Questions?</h3> -->
|
|
</section>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="dist/reveal.js"></script>
|
|
<script src="plugin/notes/notes.js"></script>
|
|
<script src="plugin/markdown/markdown.js"></script>
|
|
<script src="plugin/highlight/highlight.js"></script>
|
|
<script>
|
|
// More info about initialization & config:
|
|
// - https://revealjs.com/initialization/
|
|
// - https://revealjs.com/config/
|
|
Reveal.initialize({
|
|
hash: true,
|
|
controls: false,
|
|
width: 1200,
|
|
height: 700,
|
|
|
|
// Learn about plugins: https://revealjs.com/plugins/
|
|
plugins: [RevealMarkdown, RevealHighlight, RevealNotes]
|
|
});
|
|
</script>
|
|
</body>
|
|
|
|
</html>
|