From b90cb10b02774ac8482956d89310653f0f2d6777 Mon Sep 17 00:00:00 2001 From: James Zow Date: Mon, 19 Sep 2022 16:14:17 +0800 Subject: [PATCH] remove Chapter 4 Translation, modify the diff in Chapter 2 and Chapter 3 --- 02_runtime_init/README.CN.md | 2 +- 03_hacky_hello_world/README.CN.md | 2 +- 04_safe_globals/README.CN.md | 50 ------------------------------- 3 files changed, 2 insertions(+), 52 deletions(-) delete mode 100644 04_safe_globals/README.CN.md diff --git a/02_runtime_init/README.CN.md b/02_runtime_init/README.CN.md index 46c52467..f8d64f6f 100644 --- a/02_runtime_init/README.CN.md +++ b/02_runtime_init/README.CN.md @@ -19,5 +19,5 @@ [bss]: https://en.wikipedia.org/wiki/.bss ## 相比之前的变化(diff) +请检查[英文版本](README.md#diff-to-previous),这是最新的。 -Please check [the english version](README.md#diff-to-previous), which is kept up-to-date. diff --git a/03_hacky_hello_world/README.CN.md b/03_hacky_hello_world/README.CN.md index 28ec0a5d..ac08fae5 100644 --- a/03_hacky_hello_world/README.CN.md +++ b/03_hacky_hello_world/README.CN.md @@ -32,4 +32,4 @@ Stopping here. ``` ## 相比之前的变化(diff) -Please check [the english version](README.md#diff-to-previous), which is kept up-to-date. +请检查[英文版本](README.md#diff-to-previous),这是最新的。 diff --git a/04_safe_globals/README.CN.md b/04_safe_globals/README.CN.md deleted file mode 100644 index 14ec5175..00000000 --- a/04_safe_globals/README.CN.md +++ /dev/null @@ -1,50 +0,0 @@ -# 教程 04 - 全局安全 - -## tl;dr - -- 引入了假的锁。 -- 这是操作系统同步原语的首次展示,能够安全访问全局数据结构。 - -## Rust中的全局可变 - -当我们引入全局可用的`print!`宏在 [教程03],我门有一点欺骗。 调用 -`core::fmt`的`write_fmt()`函数,接受`&mut self`的方法之所以有效, -是因为在每次调用时都会创建一个新的`QEMUOutput`实例。 - -如果我们想保留一些状态,例如关于写入字符数的统计数据, -我们可以需要创建`QEMUOutput`的单个全局实例 (在Rust中,使用`static`关键字). - -然而`static QEMU_OUTPUT`不允许调用具有`&mut self`的函数。 -为此,我们需要`static mut`,但是调用改变`static mut`状态的函数是不安全的。 -这个是Rust编译器对此的推理,它无法再阻止核心/线程同时改变数据(它是全局的,所以每个人都可以从任何地方引用它,检查程序借用在这里帮不上忙)。 - - -这个问题的解决方案是将全局封装到同步原语中。在我们的例子中,是一个*MUTual EXclusion*原语的变体。 -`Mutex`是`synchronization.rs`中引入的一个特性,并由同一文件中的`NullLock`实现。 -为了使代码更易于教学,它省略了用于防止并发访问的实际体系结构特定逻辑,因为只要内核仅在单个内核上执行并禁用中断,我们就不需要它。 - -`NullLock`集中展示了[内部可变性]的Rust核心概念。确保仔细阅读。 -我们还建议您阅读这篇关于[Rust参考类型的精确思想的模型]文章 - -如果要将`NullLock`与一些真实的互斥实现进行比较,可以查看 -[spin crate]或者[parking lot crate]。 - -[教程03]: ../03_hacky_hello_world -[内部可变性]: https://doc.rust-lang.org/std/cell/index.html -[Rust参考类型的精确思想的模型]: https://docs.rs/dtolnay/0.0.6/dtolnay/macro._02__reference_types.html -[spin crate]: https://github.com/mvdnes/spin-rs -[parking lot crate]: https://github.com/Amanieu/parking_lot - -## 测试 - -```console -$ make qemu -[...] - -[0] Hello from Rust! -[1] Chars written: 22 -[2] Stopping here. -``` - -## 相比之前的变化(diff) -请检查[英文版本](README.md#diff-to-previous),这是最新的。