rCore-Tutorial-v3/ch3-coop
2020-12-14 17:23:41 +08:00
..
.cargo Update testcases. 2020-12-14 16:51:50 +08:00
src Update testcases. 2020-12-14 16:51:50 +08:00
.gitignore Update testcases. 2020-12-14 16:51:50 +08:00
build.py Update testcases. 2020-12-14 16:51:50 +08:00
Cargo.toml Update testcases. 2020-12-14 16:51:50 +08:00
Makefile Update testcases. 2020-12-14 16:51:50 +08:00
README.md Update ch3-coop Description. 2020-12-14 17:02:29 +08:00

Tutorial 第三章测试用例 part1

在 Tutorial 第三章第一阶段中,只需实现一个非抢占式调度的分时多任务系统。在 src/bin 目录中,我们可以找到三个应用程序:

  • 00write_a
  • 01write_b
  • 02write_c

我们需要在系统初始化的时候将它们分别加载到一个应用与内核预先约定的物理地址。对于编号 0 <= i <= 2应该将其加载到物理地址 0x80100000+0x20000*i 处运行。这需要在构建应用程序的时候动态调整 linker.ld 中的应用起始地址,参见 build.py

应用被设计为运行在用户模式,批处理系统应运行在监督模式,它们都直接访问物理内存。

这一阶段需要实现的系统调用:

  • sys_yield:用来交出当前应用的 CPU 使用权并切换到下一个应用,等到再次获得 CPU 使用权才能继续向下执行。

阅读应用程序代码可知,每个应用都输出一个字母方阵,但是每输出一行之后就会 sys_yield,于是最终应该看到一个字母交错的方阵。

注意:当所有应用通过 sys_exit 退出之后,系统也应该退出。