Files
new-rusty-book/os/awesome.html
sunface 07ee9c1713 deploy
2024-03-19 10:09:18 +08:00

266 lines
23 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML>
<html lang="zh-CN" class="sidebar-visible no-js light">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>操作系统 - Rusty Book(锈书)</title>
<!-- Custom HTML head -->
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="../tomorrow-night.css">
<link rel="stylesheet" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<link rel="stylesheet" href="../theme/style1.css">
</head>
<body>
<!-- Provide site root to javascript -->
<script type="text/javascript">
var path_to_root = "../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script type="text/javascript">
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script type="text/javascript">
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
var html = document.querySelector('html');
html.classList.remove('no-js')
html.classList.remove('light')
html.classList.add(theme);
html.classList.add('js');
</script>
<!-- Hide / unhide sidebar before it is displayed -->
<script type="text/javascript">
var html = document.querySelector('html');
var sidebar = 'hidden';
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
}
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div class="sidebar-scrollbox">
<ol class="chapter"><li class="chapter-item expanded affix "><a href="../about.html">Rusty Book</a></li><li class="chapter-item expanded affix "><li class="part-title">Awesome</li><li class="spacer"></li><li class="chapter-item expanded "><a href="../awesome-daily-dev.html">日常开发常用库</a></li><li class="chapter-item expanded "><a href="../awesome-superstar.html">Rust 明星项目</a></li><li class="chapter-item expanded "><a href="../awesome-empowering-js.html">使用 Rust 增强 JS</a></li><li class="chapter-item expanded "><a href="../awesome-games.html">Rust开发的游戏</a></li><li class="chapter-item expanded "><a href="../awesome-gamedev.html">游戏引擎</a></li><li class="chapter-item expanded affix "><li class="part-title">Awesome + Cookbook</li><li class="spacer"></li><li class="chapter-item expanded "><a href="../algos/awesome.html">实用算法</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><div>数据结构</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../algos/datastructures/bitfield.html">位字段</a></li></ol></li><li class="chapter-item "><a href="../algos/randomness.html">生成随机值</a></li><li class="chapter-item "><a href="../algos/sorting.html">Vec 排序</a></li><li class="chapter-item "><div>压缩算法</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../algos/compression/tar.html">使用.tar包</a></li></ol></li><li class="chapter-item "><div>密码学</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../algos/cryptography/hashing.html">哈希</a></li><li class="chapter-item "><a href="../algos/cryptography/encryption.html">加密</a></li></ol></li><li class="chapter-item "><div>数学计算</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../algos/math/linear-algebra.html">线性代数</a></li><li class="chapter-item "><a href="../algos/math/trigonometry.html">三角函数</a></li><li class="chapter-item "><a href="../algos/math/complex.html">复数</a></li><li class="chapter-item "><a href="../algos/math/statistics.html">统计学</a></li><li class="chapter-item "><a href="../algos/math/misc.html">杂项</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="../cmd/awesome.html">命令行</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../cmd/parsing.html">参数解析</a></li><li class="chapter-item "><a href="../cmd/ansi.html">终端输出格式化</a></li></ol></li><li class="chapter-item expanded "><a href="../os/awesome.html" class="active">操作系统</a><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../os/processor.html">处理器</a></li><li class="chapter-item "><a href="../os/command.html">调用系统命令</a></li></ol></li><li class="chapter-item expanded "><div>并发和并行</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../cocurrency/threads.html">多线程</a></li><li class="chapter-item "><a href="../cocurrency/parallel.html">使用rayon并行处理数据</a></li></ol></li><li class="chapter-item expanded "><div>数据库</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../database/sqlite.html">SQLite</a></li><li class="chapter-item "><a href="../database/postgres.html">Postgres</a></li></ol></li><li class="chapter-item expanded "><div>日期和时间</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../datetime/duration.html">时间计算和转换</a></li><li class="chapter-item "><a href="../datetime/parsing.html">解析和显示</a></li></ol></li><li class="chapter-item expanded "><div>开发者工具</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../devtools/log.html">日志</a></li><li class="chapter-item "><a href="../devtools/config-log.html">配置日志</a></li><li class="chapter-item "><a href="../devtools/version.html">版本号</a></li><li class="chapter-item "><a href="../devtools/build-tools.html">构建时工具</a></li></ol></li><li class="chapter-item expanded "><div>编解码</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../encoding/strings.html">字符编码</a></li><li class="chapter-item "><a href="../encoding/csv.html">CSV</a></li><li class="chapter-item "><a href="../encoding/structured.html">结构化数据</a></li></ol></li><li class="chapter-item expanded "><div>错误处理</div></li><li class="chapter-item expanded "><div>文件操作</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../files/read-write.html">文件读写</a></li><li class="chapter-item "><a href="../files/dir.html">目录访问</a></li></ol></li><li class="chapter-item expanded "><div>内存管理</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../memory/global-vars.html">全局变量</a></li></ol></li><li class="chapter-item expanded "><div>网络协议</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../protocols/tcpip.html">TCP/IP</a></li></ol></li><li class="chapter-item expanded "><div>文本处理</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../text/regex.html">正则表达式</a></li><li class="chapter-item "><a href="../text/string.html">字符串解析</a></li></ol></li><li class="chapter-item expanded "><div>Web编程</div><a class="toggle"><div></div></a></li><li><ol class="section"><li class="chapter-item "><a href="../web/scraping.html">提取网络链接( 爬虫 )</a></li></ol></li></ol>
</div>
<div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky bordered">
<div class="left-buttons">
<button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</button>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light (default)</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Rusty Book(锈书)</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
<a href="https://github.com/studyrs/rusty-book" title="Git repository" aria-label="Git repository">
<i id="git-repository-button" class="fa fa-github"></i>
</a>
<a href="https://github.com/studyrs/rusty-book/edit/main/src/os/awesome.md" title="Suggest an edit" aria-label="Suggest an edit">
<i id="git-edit-button" class="fa fa-edit"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script type="text/javascript">
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<!-- Page table of contents -->
<div class="sidetoc"><nav class="pagetoc"></nav></div>
<main>
<h1 id="操作系统"><a class="header" href="#操作系统">操作系统</a></h1>
<p>操作系统范畴很大本章节中精选的内容聚焦在用Rust实现的操作系统以及用Rust写操作系统的教程。</p>
<h2 id="目录"><a class="header" href="#目录">目录</a></h2>
<div class="table-wrapper"><table><thead><tr><th>系统</th><th>描述</th></tr></thead><tbody>
<tr><td><a href="#redox">redox</a></td><td><code>Unix</code>风格的微内核OS</td></tr>
<tr><td><a href="#tock">tock</a></td><td>嵌入式操作系统</td></tr>
<tr><td><a href="#theseus">theseus</a></td><td>独特设计的OS</td></tr>
<tr><td><a href="#writing-an-os-in-rust">writing os in rust</a></td><td>使用Rust开发简单的操作系统</td></tr>
<tr><td><a href="#rust-raspberrypi-os-tutorials">rust-raspberrypi-OS-tutorials</a></td><td>Rust嵌入式系统开发教程</td></tr>
<tr><td><a href="#rcore-os">rcore-os</a></td><td>清华大学提供的<code>rcore</code>操作系统教程</td></tr>
<tr><td><a href="#edu-os">edu-os</a></td><td>亚琛工业大学操作系统课程的配套项目</td></tr>
</tbody></table>
</div>
<h3 id="redox"><a class="header" href="#redox">redox</a></h3>
<p><a href="https://github.com/redox-os/redox">redox</a> 是一个 <code>Unix</code> 风格的微内核操作系统,使用 <code>Rust</code> 实现。<code>redox</code> 的目标是安全、快速、免费、可用,它在内核设计上借鉴了很多优秀的内核,例如:<code>SeL4</code>, <code>MINIX</code>, <code>Plan 9</code><code>BSD</code></p>
<p><code>redox</code> 不仅仅是一个内核,它还是一个功能齐全的操作系统,提供了操作系统该有的功能,例如:内存分配器、文件系统、显示管理、核心工具等等。你可以大概认为它是一个 <code>GNU</code><code>BSD</code> 生态,但是是通过一门现代化、内存安全的语言实现的。</p>
<blockquote>
<p>不过据我仔细观察redox目前的开发进度不是很活跃不知道发生了什么未来若有新的发现会在这里进行更新 - Sunface</p>
</blockquote>
<img alt="redox1 screenshot" width="100%" src="https://github.com/studyrs/cookbook-images/blob/main/os/redox1.jpg?raw=true" class="center" />
<img alt="redox2 screenshot" width="100%" src="https://github.com/studyrs/cookbook-images/blob/main/os/redox2.jpeg?raw=true" class="center" />
<h3 id="tock"><a class="header" href="#tock">tock</a></h3>
<p><a href="https://github.com/tock/tock">tock</a> 是一个嵌入式操作系统,设计用于在低内存和低功耗的微控制器上运行多个并发的、相互不信任的应用程序,例如它可在 <code>Cortex-M</code><code>RISC-V</code> 平台上运行。</p>
<p><code>Tock</code> 使用两个核心机制保护操作系统中不同组件的安全运行:</p>
<ul>
<li>内核和设备驱动全部使用Rust编写提供了很好安全性的同时还将内核和设备进行了隔离</li>
<li>使用了内存保护单元技术,让应用之间、应用和内核之间实现了安全隔离</li>
</ul>
<p>具体可通过这本书了解: <a href="https://book.tockos.org/introduction.html">The Tock Book</a>.</p>
<img alt="tock screenshot" width="100%" src="https://book.tockos.org/imgs/imix.svg" class="center" />
<h3 id="theseus"><a class="header" href="#theseus">Theseus</a></h3>
<p><a href="https://github.com/theseus-os/Theseus">Theseus</a> 是从零开始构建的操作系统完全使用Rust进行开发。它使用了新的操作系统结构、更好的状态管理以及利用语言内设计原则将操作系统的职责(如资源管理)转移到编译器中。</p>
<p>该OS目前尚处于早期阶段但是看上去作者很有信心未来可以落地如果想要了解可以通过官方提供的<a href="https://theseus-os.github.io/Theseus/book/index.html">在线书籍</a>进行学习。</p>
<h3 id="writing-an-os-in-rust"><a class="header" href="#writing-an-os-in-rust">Writing an OS in Rust</a></h3>
<p><a href="https://os.phil-opp.com">Writing an OS in Rust</a> 是非常有名的博客系列专门讲解如何使用Rust来写一个简单的操作系统配套源码在<a href="https://github.com/phil-opp/blog_os">这里</a>,目前已经发布了第二版。</p>
<p>以下是<code>async/await</code>的目录截图:
<img alt="writing-os screenshot" width="100%" src="https://github.com/studyrs/cookbook-images/blob/main/os/writing-os.jpg?raw=true" class="center" /></p>
<h3 id="rust-raspberrypi-os-tutorials"><a class="header" href="#rust-raspberrypi-os-tutorials">rust-raspberrypi-OS-tutorials</a></h3>
<p><a href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials">rust-raspberrypi-OS-tutorials</a> 教大家如何用Rust开发一个嵌入式操作系统可以运行在树莓派上。这个教程讲得很细号称手把手教学而且是从零实现因此很值得学习。</p>
<img alt="rrot screenshot" width="50%" height="400px" src="https://github.com/studyrs/cookbook-images/blob/main/os/rrot.jpg?raw=true" class="center" />
<img alt="rrot1 screenshot" width="49%" height="400px" src="https://github.com/studyrs/cookbook-images/blob/main/os/rrot1.gif?raw=true" class="center" />
<h3 id="rcore-os"><a class="header" href="#rcore-os">rcore-os</a></h3>
<p><a href="https://github.com/rcore-os">rcore-os</a> 是由清华大学开发的操作系统,用 Rus t实现, 与 <code>linux</code> 相兼容,主要目的目前还是用于教学,因为还有相关的配套教程,非常值得学习。目前支持的功能不完全列表如下:<code>linux</code> 兼容的 <code>syscall</code> 接口、网络协议栈、简单的文件系统、信号系统、异步IO、内核模块化。</p>
<ul>
<li><a href="https://github.com/rcore-os/rCore">内核实现</a></li>
<li><a href="https://github.com/rcore-os/rCore-Tutorial-Book-v3">配套教程</a> </li>
</ul>
<p>以下是在树莓派上运行的图:
<img alt="rcore screenshot" width="100%" src="https://github.com/studyrs/cookbook-images/blob/main/os/rcore.jpg?raw=true" class="center" /></p>
<h3 id="edu-os"><a class="header" href="#edu-os">edu-os</a></h3>
<p><a href="https://github.com/RWTH-OS/eduOS-rs">edu-os</a><code>Unix</code> 风格的操作系统用于教学目的它是亚琛工业大学RWTH Aachen University)操作系统课程的配套大项目,但是我并没有找到对应的课程资料,根据作者的描述,上面部分的<strong>Writing an OS in Rust</strong>对他有很大的启发。</p>
<img alt="eduos screenshot" width="100%" src="https://github.com/RWTH-OS/eduOS-rs/raw/master/img/demo.gif?raw=true" class="center" />
<div id="giscus-container"></div>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../cmd/ansi.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../os/processor.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../cmd/ansi.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next" href="../os/processor.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script type="text/javascript">
window.playground_copyable = true;
</script>
<script src="../ace.js" type="text/javascript" charset="utf-8"></script>
<script src="../editor.js" type="text/javascript" charset="utf-8"></script>
<script src="../mode-rust.js" type="text/javascript" charset="utf-8"></script>
<script src="../theme-dawn.js" type="text/javascript" charset="utf-8"></script>
<script src="../theme-tomorrow_night.js" type="text/javascript" charset="utf-8"></script>
<script src="../elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../mark.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../searcher.js" type="text/javascript" charset="utf-8"></script>
<script src="../clipboard.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../highlight.js" type="text/javascript" charset="utf-8"></script>
<script src="../book.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
var pagePath = "os/awesome.md"
</script>
<!-- Custom JS scripts -->
<script type="text/javascript" src="../assets/custom1.js"></script>
<script type="text/javascript" src="../assets/bigPicture.js"></script>
</body>
</html>