{"id":21220703,"url":"https://github.com/ydrmaster/rcore-tutorial-in-single-workspace","last_synced_at":"2025-05-07T16:09:08.305Z","repository":{"id":51539938,"uuid":"520138466","full_name":"YdrMaster/rCore-Tutorial-in-single-workspace","owner":"YdrMaster","description":"没分支的 rCore-Tutorial","archived":false,"fork":false,"pushed_at":"2023-02-13T06:09:22.000Z","size":677,"stargazers_count":45,"open_issues_count":0,"forks_count":42,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-03T08:11:55.592Z","etag":null,"topics":["os"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"wtfpl","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YdrMaster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-01T14:15:28.000Z","updated_at":"2024-12-09T04:39:04.000Z","dependencies_parsed_at":"2025-01-03T08:11:25.608Z","dependency_job_id":"d0932d31-b447-4e8e-a402-8f31db1a8480","html_url":"https://github.com/YdrMaster/rCore-Tutorial-in-single-workspace","commit_stats":{"total_commits":222,"total_committers":7,"mean_commits":"31.714285714285715","dds":"0.19819819819819817","last_synced_commit":"0c76582ee6cba29bc1d77f043f53014cf89425af"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YdrMaster%2FrCore-Tutorial-in-single-workspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YdrMaster%2FrCore-Tutorial-in-single-workspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YdrMaster%2FrCore-Tutorial-in-single-workspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YdrMaster%2FrCore-Tutorial-in-single-workspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YdrMaster","download_url":"https://codeload.github.com/YdrMaster/rCore-Tutorial-in-single-workspace/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233352287,"owners_count":18663267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["os"],"created_at":"2024-11-20T22:13:49.591Z","updated_at":"2025-01-10T13:34:35.221Z","avatar_url":"https://github.com/YdrMaster.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# 模块化的 rCore-Tutorial\n\n[![CI](https://github.com/YdrMaster/rCore-Tutorial-in-single-workspace/actions/workflows/workflow.yml/badge.svg?branch=main)](https://github.com/YdrMaster/rCore-Tutorial-in-single-workspace/actions)\n[![issue](https://img.shields.io/github/issues/YdrMaster/rCore-Tutorial-in-single-workspace)](https://github.com/YdrMaster/rCore-Tutorial-in-single-workspace/issues)\n![license](https://img.shields.io/github/license/YdrMaster/rCore-Tutorial-in-single-workspace)\n\n- 只需要维护一个分支！\n- 支持 Windows 直接调试！\n\n  \u003e - 需要安装 Rust 环境和 Windows Qemu\n  \u003e - 当然 Linux 也支持，其实就是跨平台\n\n## 目录\n\n- [宗旨](#宗旨)\n  - [史书的另一种形态](#史书的另一种形态)\n  - [协作政策](#协作政策)\n- [运行系统](#运行系统)\n- [设计稿和报告](#设计稿和报告)\n- [进度](#进度)\n\n## 宗旨\n\n本项目目标是实现一个存在于单独仓库、单独分支的完整操作系统教程。\n\n“一个操作系统教程”定义为由一系列章节组成的，用于学习操作系统的文本和代码资料。用户可按照自然的顺序阅读这些章节，逐步了解操作系统的发展史和原理性的技术细节。因此，在本文的后续部分，将用户称为学生，将使用过程称为学习。\n\n我假设学生在学习本教程前对 Rust 语言有充分的了解，因为我希望在编写时尽量使用 Rust 带来的方便，不必受受众的掣肘。\n\n我希望，学生在学习本教程时可以专注于 Rust 和操作系统本身。因此，教程不要求用户精通操作 git，`git clone` 只是获取教程的手段之一，与下载 zip 或从他人处拷贝没有本质区别（当然，版本管理总是有益的）；并且会尽量跨平台，为此，可能需要在构建系统中增加一些平台相关的操作。\n\n本教程**并不期望在章节设置或教学内容上有所创新**，也不是为了实验任何新的内核技术，rCore-Tutorial-v3 足够优秀。本项目仅关注**教程的构建过程和学生的学习体验**（换句话说，如果为了这两点，修改章节设置和教学内容也可以接受）。在此基础之上，我希望尽量使用 Rust 的机制减少“构造一个操作系统”的代码量，以及使得库构建规范化、可迁移。\n\n### 史书的另一种形态\n\nrCore-Tutorial-v3 的教材部分别出心裁地为每一章取了一种古生物的名字，将操作系统的发展史和动物的演化史联系起来，为常常枯燥的教材带来了新奇的趣味。随着每个章节，学生可以了解到一个现代内核，是如何从蒙昧年代一步步发展来的。\n\n阅读教材会带来快乐——收获知识、进步的快乐；阅读历史也会带来快乐——带入那些天才人物、风云故事的快乐。然而，一旦将教材与一部真正的史书相比，就会发现我们似乎缺了什么。从古至今、由简至繁——这是一部编年史。编年史直白、清晰，利于建立概念，然而却不利于理解一个复杂的人物。对于操作系统来说，就是不利于理解一个真正的现代内核子系统的细节。子系统的功能常常限于相关其他子系统尚不存在而无法完整介绍；而增加一个子系统时，又需要修改以前的子系统来适应新部件的功能。复杂的系统，要么不得不多次修改，要么只能放在后面的章节，这导致教程书可以是极好的入门，但却无法常读常新。\n\n幸好，历史已经告诉我们另外的选择。编年史是历史研究的重要工具，但堪称“史家之绝唱”的还是纪传体。每次将视角聚焦到一个重要的人物，将他的经历作为线索，往往使历史更丰满。或许我们需要另一部纪传体作品，通过无序的介绍内核的各个子模块，为离开了蹒跚学步的内核研究者带来一部更有效的工具书。这样一本工具书，必然天然需要模块化——模块就是章节本身。\n\n本项目仍然聚焦一个更好的 Tutorial。但其模块化的经验有助于另外的作品。如果有这样一个项目，可以称为 rCore-Manual，它是一本手册，供操作系统研究者随时翻阅。正如 rCore-Tutorial 不需要介绍原始的 rCore，它们是 rCore 的精神续作。\n\n### 协作政策\n\n本项目**不是、也无意成为相关工作的典范**。如果你：\n\n- 认为项目的操作非常合适，欢迎共同开发；\n- 你不喜欢某些更新，请发起讨论，或从任何提交分叉；\n- 认同项目的目标但不认同其设计，可以创建己的仓库；\n\n因此，本项目使用 [WTFPL](LICENSE) 开源，如果你不喜欢，可以改名字或在你的分叉里直接删除它，这都是它本身支持的。\n\n另外，本项目具有实验性。这意味着它随时可能发生设计变更、破坏性重构、移动、废弃或删除。\n\n## 运行系统\n\n- `cargo qemu --ch \u003cn\u003e`\n\n  在 qemu 运行第 `n` 章的操作系统。\n\n可选参数：\n\n- `--lab` 只对 ch1 有效，执行 ch1-lab\n- `--features \u003cfeatures\u003e` 只对 ch3 有效，传入 features=coop\n\n## 设计稿和报告\n\n- [crate 分类](docs/design/20220814-crate-types.md)\n- [内核地址隔离](docs/design/20220823-kpti.md)\n- [3.5 章进展报告](https://github.com/YdrMaster/slides/blob/main/20220824-%E6%A8%A1%E5%9D%97%E5%8C%96%E8%BF%9B%E5%B1%95.pdf)\n\n## 进度\n\n- [x] [§1](ch1/README.md)（[实验参考](ch1-lab/README.md)）\n- [x] [§2](ch2/README.md)\n- [x] [§3](ch3/README.md)\n- [x] [§4](ch4/README.md)\n- [x] [§5](ch5/README.md) by [ZFL](https://github.com/zflcs)\n- [x] [§6](ch6/README.md) by [TKF](https://github.com/tkf2019)\n- [x] [§7](ch7/README.md) by [BHY](https://github.com/scPointer)\n- [x] [§8](ch8/README.md) by [ZFL](https://github.com/zflcs)\n- [ ] §9\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fydrmaster%2Frcore-tutorial-in-single-workspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fydrmaster%2Frcore-tutorial-in-single-workspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fydrmaster%2Frcore-tutorial-in-single-workspace/lists"}