-
Notifications
You must be signed in to change notification settings - Fork 452
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'rcore-os:master' into master
- Loading branch information
Showing
12 changed files
with
965 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
--- | ||
title: 2024A-OS-I-Summary | ||
date: 2024-11-10 12:34:18 | ||
tags: | ||
- author:Whth | ||
- repo:https://github.com/LearningOS/rust-rustlings-2024-autumn-Whth | ||
- RustBasics | ||
--- | ||
|
||
|
||
|
||
|
||
|
||
# 引言 | ||
|
||
---- | ||
|
||
9月的时候在`Rust语言中文社区`的微信公众号了解到了这个训练营, | ||
当时想想正好可以获取一些操作系统的设计与实践的经验和感受感受`Rust`编程的实际运用,所以就报名了. | ||
|
||
|
||
# 第一阶段概述 | ||
|
||
|
||
--- | ||
## 个人情况 | ||
|
||
- 非科班 | ||
- 大四备战考研ing | ||
- 有过一些`C++`和`Python`的编程基础 | ||
- 系统学习过linux的架构和原理 | ||
- 了解过`Rust`的编程范式和语言特性(不过没怎么实际用过,只是简单的配过环境搓过些小玩意儿) | ||
|
||
|
||
|
||
|
||
## Rustling | ||
|
||
说是100道题,不过实际上是80道题. | ||
其中70道语言特性和语法相关的基础题目,而剩下的10道题都是算法相关的. | ||
|
||
因为`Rustling`没啥平台依赖所有就直接在win本把仓库克隆下来然后`cargo install&&rustling watch`开干 | ||
|
||
语法基础题花了一个下午给整完,中途卡了两天然后又花了两天把剩下的这10道题也做了.不过有一说一最后几个算法题确实有那么点上强度的感觉了Xb | ||
|
||
![img.png](2024A-OS-I-Summary/img.png) | ||
|
||
![img_1.png](2024A-OS-I-Summary/img_1.png) | ||
|
||
|
||
|
||
## 总结 | ||
|
||
|
||
|
||
唉唉,给我的感觉两类题目的难度曲线会稍微有点陡峭了,简单和困难的过渡不太平缓,中途如果没有`Jetbrain RustRover`的built-in linter(好用,推荐😋)可能还得多花些时间 | ||
![img_2.png](2024A-OS-I-Summary/img_2.png) | ||
|
||
个人感觉最难的几个部分有生命周期,借用和作用域 | ||
|
||
1. **生命周期(Lifetimes)**:确保引用在其所指向的数据有效期内始终有效,防止悬空指针。虽说如此,但是实际上没有了`'a`和IDE的检查马上就歇菜了Xb. | ||
2. **借用(Borrowing)**:允许临时使用数据而不转移所有权,提高代码的灵活性和安全性。这个借用和cpp的借用机制类似,不过在rust中 borrowing 的时候会自动释放,不用像cpp那样手动释放,挺好. | ||
3. **作用域(Scopes)**:定义变量和引用的可见性和生命周期,确保资源在不再需要时被及时释放。最后我的理解感觉实际上也就是`{}`的范围. | ||
|
||
不过难归难,实际上rust里面挺多编程范式确实体验蛮不错的,我挺喜欢模式匹配,建造者模式,鼓励链式调用(手动点赞). | ||
|
||
最后在榜上捞了个Rank 39. | ||
|
||
![img_3.png](2024A-OS-I-Summary/img_3.png) | ||
|
||
|
||
# 推荐阅读 | ||
|
||
|
||
|
||
1. [Rust官方文档](https://doc.rust-lang.org/book/title-page.html) - Rust的官方文档是最权威的学习资源之一,提供了详尽的语言特性和标准库介绍,适合所有级别的学习者。 | ||
|
||
2. [Rust精选](https://rustcc.cn/) - 提供了一系列聚焦于学习Rust的网络资源,包括但不限于使用Rust处理信号的文章,这些资源对于希望深入了解特定主题的学习者非常有帮助。 | ||
|
||
3. [《Rust 程序设计》](https://kaisery.github.io/trpl-zh-cn/) - 一本全面介绍Rust编程的书籍,适合希望系统学习Rust的新手。 | ||
|
||
4. [《Rust 权威指南》](https://rust-book.cs.dbappsecurity.com/) - 这本书深入讲解了Rust的核心概念和高级特性,适合已经有一定Rust基础的学习者。 | ||
|
||
5. [《Rust 实战》](https://rust-lang-nursery.github.io/rust-cookbook/intro.html) - 通过实战项目帮助读者掌握Rust编程的实际应用,适合希望通过实践加深理解的学习者。 | ||
|
||
6. [《深入理解 rust 并发编程》](https://rust-lang-nursery.github.io/rust-cookbook/concurrency.html) - 针对Rust的并发编程特性进行了详细的讲解,适合对并发编程感兴趣的开发者。 | ||
|
||
7. [《Command-Line Rust》](https://rust-cli.github.io/book/) - 专注于使用Rust开发命令行应用程序,适合对此类应用感兴趣的学习者。 | ||
|
||
8. [《Rust Atomics and Locks》](https://docs.rs/crossbeam/latest/crossbeam/atomic/index.html) - 深入讲解了Rust中的原子操作和锁机制,适合希望深入了解并发控制的学习者。 | ||
|
||
9. [《System Programing with Rust》](https://azerupi.github.io/mdBook/rust-system-programming/) - 介绍了如何使用Rust进行系统级编程,适合希望探索这一领域的开发者。 | ||
|
||
10. [《Rust 编程之道》](https://rustwiki.org/zh-CN/rust-by-example/) - 通过具体的例子和最佳实践,帮助读者更好地掌握Rust编程。 | ||
|
||
|
||
|
||
|
||
|
||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Large diffs are not rendered by default.
Oops, something went wrong.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
--- | ||
title: 2024年秋冬季开源操作系统训练营一、二阶段总结报告-guoraymon | ||
date: 2024-11-11 16:05:18 | ||
categories: | ||
- 2024秋冬季开源操作系统训练营 | ||
tags: | ||
- author:guoraymon | ||
- repo:https://github.com/LearningOS/2024a-rcore-guoraymon | ||
--- | ||
|
||
## 第一阶段 | ||
好几年前就被 Rust 的性能和并发功能吸引,无奈日常没有运用,只能学而时习之。不过 Rusting 还是没有什么难度的,多看看文档,轻松拿下不是问题。 | ||
|
||
## 第二阶段 | ||
第二阶段就需要了解操作系统原理了,各类教科书都停留在原理阶段,学完了也不知道自己学会了没有。 | ||
lab1 比较简单,原理是需要了解特权级和系统调用,实践上懂得在哪里记录数据和返回即可。 | ||
lab2 难度提升不小,原理上需要了解页表机制,多级页表极其抽象,算是一个难点。实践上要注意内核态拿到的是用户态的虚拟地址,要注意转换而不是直接访问。 | ||
lab3 难度不大,原理上就是进程那些事,不算难。实践上因为基础代码都已经提供了,依样画葫芦很容易就能通过。 | ||
lab4 感觉也是不算难的,原理上就是各种数据结构的管理。实践上因为现在的文件系统比较简易,很多可以不过多考虑直接取巧实现。最大的问题是我的机子性能太差,跑全部测试必定超时,我误以为是自己代码问题。 | ||
lab5 感觉是个巨坑,原理上实验说明写的模模糊糊,完全看不懂。实践上也是感觉测例不完善,虽然顺利通过了,但是没把握实现是正确的。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
--- | ||
title: 2024秋冬训练营Blog-阶段一总结-孙宇航 | ||
date: 2024-11-11 12:55:19 | ||
tags: | ||
--- | ||
# Rustlings总结 | ||
## 心路历程 | ||
这个训练营我也算是“老兵”了,不断地入门再入门,到终于下定决心,投入大量的时间来完成这个训练营,真的经历了很多很多,有着太多的心路历程,从想着三天写完,慢 | ||
慢的查漏补缺,温习之前的知识点,慢慢的开始一道题一道题手写rustlings... | ||
我总是说我基础很差,并拿这句话当做挡箭牌,最终一事无成。未来会更好吗?但是我已经有点厌倦痛惜过去了。 | ||
说起来这也是我第三次的写rustlings了,开始越来越熟练了,这当然是开心的,不过后面有这更多的更艰难的挑战,阶段二,阶段三,都是未知的大山,更艰难的挑战。 | ||
## 学习由来 | ||
对于这个训练营,我是大二机缘巧合开始接触到的,那时候听学长说,特别有含金量,可以“咸鱼翻身”,那可是清华啊,多么具有神话幻想意味的大学,那时的我突然想着, | ||
我一定能做出一番令人羡慕的成就。 | ||
但是那时的我用两个字来概括是“摆烂”,在羡慕同学取得的成就和奖项,和自己什么事也不做只打游戏的情况下还希望着未来自己能有一番大成就,如今看来竟全是一片混 | ||
浊,在孤独和幻想中,我度过了大学的大半时光,我的性格是卑劣的。 | ||
但是未来的路仍旧一片黑暗,载着家人的希望,我在原地自顾自的打转,跳不出自己的镣铐,做不到的仍然做不到,幻想的事物越发离谱。 | ||
慢慢得走来,我只剩了这个训练营了,又是另一个未完待续。 | ||
我可以做到吗?我问过了很多人,很多未曾谋面的人,陌生的人对我的态度竟大都是积极的,他们不了解我。我也正在逐步了解自己。忘记了太多的事情,记忆也越来越差,但 | ||
是从哪个角度来说,我这次真的想完成这次训练营,即使我每次都这么说... | ||
祝武运隆昌。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
--- | ||
title: 2024秋冬训练营Blog-阶段二总结-孙宇航 | ||
date: 2024-11-11 12:55:40 | ||
tags: | ||
--- | ||
# 专业阶段 | ||
这个阶段给我最大的感受是学习,因为很多函数都被事先书写好了,这几个实验基本都是在已有的框架上进行相关的函数调用即可,在明白每个函数的实现逻辑以及每个lab实验要实现的功能即可完成实验。同时这个阶段给我的感受是有许多深层次的知识仍需要学习,有许多一知半解的知识需要实践,看到学习群里面大家对于实验的讨论的诸多见解,受益匪浅,完完全全的拓宽了我的眼界,许多从未听过的名词出现在我的面前,只感到纸上得来终觉浅,绝知此事要躬行。可惜时间所迫,没办法对于每个lab实验进行进一步的深究。 | ||
第二阶段我重点理会到了操作系统的一步步发展以及实现的功能,在进行每个实验的时候,感受到学校里面的讲解十分片面,并且浅薄(也是我没有认真学习的缘故,学校里面的课检验的只有期末突击而已)。 | ||
非常重要的一点是这次的理论和实践一起进行,让我极大的认识到了抽象和具体之间的联系,有时候理论上很复杂并且难以理解的东西,转化到实践上面竟然可能只是一个数组,一个函数栈而已,这让欠缺实践的我大开眼界。 | ||
非常期待第三阶段带来的挑战,也非常希望可以通过第三阶段(哈哈哈)。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
--- | ||
title: mtul-rcore-第一二阶段总结 | ||
date: 2024-11-11 22:22:14 | ||
tags: | ||
--- | ||
## 第一阶段 - rust基础与算法 | ||
|
||
由于我有rust基础,没有遇到什么困难,但还是第一次完整地做一次rustlings,有一定收获 | ||
|
||
## 第二阶段 - 专业阶段 | ||
|
||
### 实验环境配置 | ||
|
||
rcore开发的环境配置比较繁琐,而我恰好比较熟悉nix,因此我用nix定义的一个完美兼容rcore的开发环境。由于不需要 `rustup` , 必须在 `os/Makefile` 中禁用 rust 环境的检测. `flake.nix` 如下: | ||
|
||
```nix | ||
{ | ||
description = "rCore dev flake"; | ||
inputs = { | ||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; | ||
oldnixpkgs.url = "github:NixOS/nixpkgs/7cf5ccf1cdb2ba5f08f0ac29fc3d04b0b59a07e4"; | ||
flake-utils.url = "github:numtide/flake-utils"; | ||
rust-overlay = { | ||
url = "github:oxalica/rust-overlay"; | ||
inputs.nixpkgs.follows = "nixpkgs"; | ||
}; | ||
}; | ||
outputs = { | ||
nixpkgs, | ||
oldnixpkgs, | ||
flake-utils, | ||
rust-overlay, | ||
... | ||
}: | ||
flake-utils.lib.eachDefaultSystem (system: let | ||
pkgs = import nixpkgs { | ||
inherit system; | ||
overlays = [(import rust-overlay)]; | ||
}; | ||
oldpkgs = import oldnixpkgs { | ||
inherit system; | ||
}; | ||
in { | ||
devShells.default = pkgs.mkShell { | ||
packages = with pkgs; | ||
[ | ||
(rust-bin.nightly."2024-05-02".minimal.override { | ||
extensions = [ | ||
"rust-src" | ||
"llvm-tools" | ||
"rustfmt" | ||
"rust-analyzer" | ||
"rust-docs" | ||
"clippy" | ||
]; | ||
targets = ["riscv64gc-unknown-none-elf"]; | ||
}) | ||
cargo-binutils | ||
python3 | ||
gdb | ||
tmux | ||
] | ||
++ [oldpkgs.qemu]; | ||
# 进入环境后显示rust和qemu版本 | ||
shellHook = '' | ||
rustc --version | ||
cargo --version | ||
qemu-system-riscv64 --version | ||
qemu-riscv64 --version | ||
''; | ||
}; | ||
}); | ||
} | ||
``` | ||
|
||
这份 `flake.nix` 也已经分享到[官方问答论坛](https://opencamp.cn/os2edu/bbs/1391) | ||
|
||
### 第一/二章 | ||
|
||
阅读这两章需要先了解riscv,特别是特权级相关设计。 | ||
|
||
主要参考: | ||
|
||
- [RISC-V开放架构设计之道][1] | ||
- [The RISC-V Reader: An Open Architecture Atlas][2] 前一个的英文原著,而且有能下载到单独的RISC-V Green Card,方便查阅 | ||
- [RISC-V Instruction Set Manual][3] 完整详细 | ||
|
||
### 第三章:多道程序与分时多任务 | ||
|
||
学习了系统调用,陷入等知识,上下文切换过程中通用寄存器和CSR的使用加深了我对riscv特权级设计的理解。 | ||
|
||
本章练习较为简单。 | ||
|
||
### 第四章:地址空间 | ||
|
||
SV39的设计又引入了若干相关的寄存器,如satp, pmp csr。查阅[riscv manul][3]以加深理解。 | ||
|
||
本章练习中,为了处理*请求映射已经被映射的页*的错误,我使用了`Result`错误传递,无法想象如果不使用`Result`和`?`语法糖我的代码会多么丑陋。然而很奇怪,整个rcore中极少使用`Result`。 | ||
|
||
### 第五章:进程及进程管理 | ||
|
||
本章内容比较轻松,完善了TCB的设计并实现`fork()`和`exec()`系统调用。 | ||
|
||
本章练习也比较简单。 | ||
|
||
### 第六章:文件系统 | ||
|
||
easy-fs is **NOT** easy!层层抽象几乎让我晕头转向! | ||
|
||
尽管如此,easy-fs囊括了superblock、索引节点、blockcache等现代文件系统中的基础概念,似乎不能再精简了。 | ||
|
||
link和unlink操作主要是查找inode并创建/删除目录项。在inode_block里创建与删除目录项无非是一些线性序列的操作,但由于没有封装成`&[DirEntry]`,需要手动操作,比较费劲。将来有空我会尝试改进一下。 | ||
|
||
### 第七章:进程间通信 | ||
|
||
本章内容较少,但进程间通信是个大话题,还需拓展学习。 | ||
|
||
### 第八章:并发 | ||
|
||
学习了多线程的同步与互斥。 | ||
|
||
练习:学习了死锁检测算法 | ||
|
||
[1]: https://ysyx.oscc.cc/books/riscv-reader.html | ||
[2]: http://www.riscvbook.com/ | ||
[3]: https://github.com/riscv/riscv-isa-manual | ||
|