未验证 提交 31b5f27f 编写于 作者: wyfcyx_forever's avatar wyfcyx_forever 提交者: GitHub

Merge pull request #53 from DeathWish5/zyr

ch3 exercise.rst minor fix
......@@ -27,6 +27,13 @@ lab2 中,我们实现了第一个系统调用 ``sys_write``,这使得我们
challenge: 支持多核,实现多个核运行用户程序。
实验约定
++++++++++++++++++++++++++++++
在第二章的测试中,我们对于内核有如下仅仅为了测试方便的要求,请调整你的内核代码来符合这些要求。
- 用户栈大小必须为 4096,且按照 4096 字节对其。这一规定可以在实验4开始删除,仅仅为通过 lab2/3 测例设置。
.. _inherit-last-ch-changes:
.. note::
......@@ -40,6 +47,7 @@ challenge: 支持多核,实现多个核运行用户程序。
3. 切换到本章分支,通过 ``git apply --reject <patch-path>`` 来将一个补丁打到当前章节上。它的大概原理是对于补丁中的每个被修改文件中的每个修改块,尝试通过块的前后若干行代码来定位它在当前分支上的位置并进行替换。有一些块可能无法匹配,此时会生成与这些块所在的文件同名的 ``*.rej`` 文件,描述了哪些块替换失败了。在项目根目录 ``rCore-Tutorial-v3`` 下,可以通过 ``find . -name *.rej`` 来找到所有相关的 ``*.rej`` 文件并手动完成替换。
4. 在处理完所有 ``*.rej`` 之后,将它们删除并 commit 一下。现在就可以开始本章的实验了。
实验检查
++++++++++++++++++++++++++++++
......@@ -51,7 +59,6 @@ challenge: 支持多核,实现多个核运行用户程序。
│   ├── build.rs (在这里实现用户程序的打包)
│   ├── Cargo.toml(配置文件)
│   ├── Makefile (要求 make run 可以正确执行,尽量不输出调试信息)
│ ├── build.rs (在这里实现用户程序的打包)
│   ├── src(所有内核的源代码放在 os/src 目录下)
│   ├── main.rs(内核主函数)
│   ├── ...
......
......@@ -27,7 +27,7 @@ lab3中我们引入了任务调度的概念,可以在不同任务之间切换
- 进程初始 stride 设置为 0 即可。
- 进程初始优先级设置为 16。
tips: 可以使用优先级队列比较方便的实现 stride 算法。如使用:`BinaryHeap <https://doc.rust-lang.org/alloc/collections/binary_heap/struct.BinaryHeap.html>`_
tips: 可以使用优先级队列比较方便的实现 stride 算法,但是我们的实验不考察效率,所以手写一个简单粗暴的也完全没问题
实验要求
+++++++++++++++++++++++++++++++++++++++++
......@@ -50,10 +50,16 @@ tips: 可以使用优先级队列比较方便的实现 stride 算法。如使用
需要说明的是 lab3 有3类测例,``ch3_0_*`` 用来检查基本 syscall 的实现,``ch3_1_*`` 基于 yield 来检测基本的调度,``ch3_2_*`` 基于时钟中断来测试 stride 调度算法实现的正确性。测试时可以分别测试 3 组测例,使得输出更加可控、更加清晰。
特别的,我们有一个死循环测例 ``ch3t_deadloop`` 用来保证大家真的实现了时钟中断。这一章中我们人为限制一个程序执行的最大时间(必须很大),超过就杀死,这样,我们的程序更不容易被恶意程序伤害。这一规定可以在实验4开始删除,仅仅为通过 lab3 测例设置。
challenge: 实现多核,可以并行调度。
实验约定
+++++++++++++++++++++++++++++++++++++++
在第三章的测试中,我们对于内核有如下仅仅为了测试方便的要求,请调整你的内核代码来符合这些要求:
- 人为限制一个程序执行的最大时间(如 5s),超过就杀死。这一规定可以在实验4开始删除,仅仅为通过 lab3 测例设置。
- 用户栈大小必须为 4096,且按照 4096 字节对其。这一规定可以在实验4开始删除,仅仅为通过 lab2 测例设置。
实验检查
++++++++++++++++++++++++++++++++++++++++
......@@ -96,8 +102,8 @@ challenge: 实现多核,可以并行调度。
- p1
- p2
- p3
- p4
- p1
- p4
- p3
-
* - 事件
......@@ -105,8 +111,8 @@ challenge: 实现多核,可以并行调度。
-
- p2 结束
- p4 产生
- p4 结束
- p1 结束
- p4 结束
- p3 结束
-
......
......@@ -99,8 +99,8 @@ challenge: 支持多核。
3. 双页表与单页表
为了防范侧信道攻击,我们的 os 使用了双页表。但是传统的设计一直是单页表的,也就是说,用户线程和对应的内核线程共用同一张页表,只不过内核对应的地址只允许在内核态访问。
为了防范侧信道攻击,我们的 os 使用了双页表。但是传统的设计一直是单页表的,也就是说,用户线程和对应的内核线程共用同一张页表,只不过内核对应的地址只允许在内核态访问。(备注:这里的单/双的说法仅为自创的通俗说法,并无这个名词概念,详情见 `KPTI <https://en.wikipedia.org/wiki/Kernel_page-table_isolation>`_ )
- 如何更换页表?
- 单页表情况下,如何控制用户态无法访问内核页面?(tips:看看上一题最后一问)
- 单页表有何优势?(回答合理即可)
......
......@@ -26,7 +26,7 @@ spawn 系统调用定义( `标准spawn看这里 <https://man7.org/linux/man-page
+++++++++++++++++++++++++++++++++++++++++++++
- 实现分支:ch5。
- 完成实验指导书中的内容,实现进程控制,可以运行 usershell。
- 实现自定义系统调用 spawn,并通过 并通过 `Rust测例 <https://github.com/DeathWish5/rCore_tutorial_tests>`_ 中chapter5对应的所有测例。
- 实现自定义系统调用 spawn,并通过 `Rust测例 <https://github.com/DeathWish5/rCore_tutorial_tests>`_ 中chapter5对应的所有测例。
challenge: 支持多核。
......
......@@ -154,7 +154,7 @@ Tips
1. 目前的文件系统只有单级目录,假设想要支持多级文件目录,请描述你设想的实现方式,描述合理即可。
2. 在有了多级目录之后,我们就也可以为一个目录增加硬链接了。在这种情况下,文件树中是否可能出现环路?你认为应该如何解决?请在你喜欢的系统上实现一个环路,描述你的实现方式以及系统提示、实际测试结果。
2. 在有了多级目录之后,我们就也可以为一个目录增加硬链接了。在这种情况下,文件树中是否可能出现环路(软硬链接都可以,鼓励多尝试)?你认为应该如何解决?请在你喜欢的系统上实现一个环路,描述你的实现方式以及系统提示、实际测试结果。
报告要求
-----------------------------------------------------------
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册