Skip to content
This repository has been archived by the owner on Feb 4, 2022. It is now read-only.

Commit

Permalink
update doc
Browse files Browse the repository at this point in the history
  • Loading branch information
SKTT1Ryze committed Aug 17, 2021
1 parent 7b3d0f2 commit fa83c76
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 13 deletions.
3 changes: 2 additions & 1 deletion doc/第七章-异步IO系统调用.md
Expand Up @@ -62,4 +62,5 @@ IO multiplexing对应的I/O系统调用是select和epoll等,也称这种IO方


## 流程图
<img src="../assets/异步IO系统调用.png" alt="异步IO系统调用" width = "80%" height = "80%" align=center />
![](../assets/异步IO系统调用.png)
<!-- <img src="../assets/异步IO系统调用.png" alt="异步IO系统调用" width = "80%" height = "80%" align=center /> -->
15 changes: 10 additions & 5 deletions doc/第九章-性能测试.md
Expand Up @@ -21,9 +21,11 @@
|协程|9.5|12.8|19.7|29.7|39.6|43.8|48.4|62.2|
|进程|13.6|20.9|29.9|44.1|53.6|67.6|74.4|81.2|

<img src="../assets/任务切换与进程切换性能对比(qemu).png" alt="任务切换与进程切换性能对比" width = "70%" height = "70%" align=center />
![](../assets/任务切换与进程切换性能对比(qemu).png)
<!-- <img src="../assets/任务切换与进程切换性能对比(qemu).png" alt="任务切换与进程切换性能对比" width = "70%" height = "70%" align=center /> -->

<img src="../assets/任务切换对比进程切换优化率(qemu).png" alt="任务切换对比进程切换优化率" width = "70%" height = "70%" align=center />
![](../assets/任务切换对比进程切换优化率(qemu).png)
<!-- <img src="../assets/任务切换对比进程切换优化率(qemu).png" alt="任务切换对比进程切换优化率" width = "70%" height = "70%" align=center /> -->

### k210平台
下面数据均采用3次重复实验求平均值。(k210烧写太慢了,而k210下测出的数据比较稳定)
Expand All @@ -33,7 +35,8 @@
|协程|9.0|17.0|28.6|43.0|61.3|70.0|83|97.6|
|进程|12.3|22.0|34.0|49.0|66.3|74.0|86.0|99.0|

<img src="../assets/任务切换对比进程切换优化率(k210).png" alt="任务切换对比进程切换优化率" width = "70%" height = "70%" align=center />
![](../assets/任务切换对比进程切换优化率(k210).png)
<!-- <img src="../assets/任务切换对比进程切换优化率(k210).png" alt="任务切换对比进程切换优化率" width = "70%" height = "70%" align=center /> -->

## 与rCore-Tutorial-v3进行对照实验
本章节主要是在飓风内核和`rCore-Tutorial-v3`之间进行关于`多任务切换`的对照实验,旨在探讨飓风内核中运行多任务与传统内核运行多任务之间的性能对比。
Expand Down Expand Up @@ -93,7 +96,8 @@ pub fn main() -> i32 {
|飓风内核|13.2|14.0|26.4|43.8|59.4|83.8|
|rCore-Tutorial-v3|40.6|75.8|125.8|158.2|224.6|238.8|

<img src="../assets/飓风内核与rCore-Tutorial运行多任务性能对比(qemu).png" alt="飓风内核与rCore-Tutorial运行多任务性能对比(qemu)" width = "70%" height = "70%" align=center />
![](../assets/飓风内核与rCore-Tutorial运行多任务性能对比(qemu).png)
<!-- <img src="../assets/飓风内核与rCore-Tutorial运行多任务性能对比(qemu).png" alt="飓风内核与rCore-Tutorial运行多任务性能对比(qemu)" width = "70%" height = "70%" align=center /> -->


## k210平台
Expand All @@ -107,4 +111,5 @@ pub fn main() -> i32 {
|飓风内核|1.0|1.0|2.0|3.0|4.0|5.7|7.0|8.0|
|rCore-Tutorial-v3|37.3|75.0|113.3|153.3|192|231.3|270.7|310.3|

<img src="../assets/飓风内核与rCore-Tutorial运行多任务性能对比(k210).png" alt="飓风内核与rCore-Tutorial运行多任务性能对比(k210)" width = "70%" height = "70%" align=center />
![](../assets/飓风内核与rCore-Tutorial运行多任务性能对比(k210).png)
<!-- <img src="../assets/飓风内核与rCore-Tutorial运行多任务性能对比(k210).png" alt="飓风内核与rCore-Tutorial运行多任务性能对比(k210)" width = "70%" height = "70%" align=center /> -->
6 changes: 4 additions & 2 deletions doc/第八章-飓风内核的上层应用兼容性.md
Expand Up @@ -24,10 +24,12 @@ Rust里面异步编程模型围绕着`Future`这个核心概念,标准库子

## 可行性
这里我们想让大家看一下`async-std`的目录结构:
<img src="../assets/async-std目录结构.png" alt="async-std目录结构" width = "20%" height = "20%" align=center />
![](../assets/async-std目录结构.png)
<!-- <img src="../assets/async-std目录结构.png" alt="async-std目录结构" width = "20%" height = "20%" align=center /> -->

然后再看一下飓风内核用户程序的目录结构:
<img src="../assets/tornado-user目录结构.png" alt="tornado-user目录结构" width = "20%" height = "20%" align=center />
![](../assets/tornado-user目录结构.png)
<!-- <img src="../assets/tornado-user目录结构.png" alt="tornado-user目录结构" width = "20%" height = "20%" align=center /> -->

是不是有非常高的相似度?

Expand Down
12 changes: 8 additions & 4 deletions doc/第十章-用户程序演示说明.md
Expand Up @@ -30,26 +30,30 @@ unsafe {
注释/取消注释上图的相应代码块即可,比如像运行`任务切换演示程序`,取消前面两行的注释,将其他代码注释掉,然后使用`cargo qemu`运行就可以了。

## 任务切换演示程序
<img src="../assets/任务切换演示程序.png" alt="任务切换演示程序" width = "50%" height = "50%" align=center />
![](../assets/任务切换演示程序.png)
<!-- <img src="../assets/任务切换演示程序.png" alt="任务切换演示程序" width = "50%" height = "50%" align=center /> -->

该演示程序主要演示了怎么进行不同地址空间的任务的切换,首先地址空间1的用户程序往共享调度器里面添加了一个任务,然后通过`yield`系统调用切换到地址空间2,地址空间2的用户程序也往共享调度器里面添加了一个任务,然后运行执行器,发现从共享调度器里面拿出来的任务是在地址空间1,于是通过`yield`系统调用切换到地址空间1中运行,这时候地址空间1的用户程序打印出`yield back 1`,表示重新回到自己的执行流,然后运行执行器,运行完一个任务之后(该任务打印"[user] yield test task0"),发现下一个任务是在地址空间2的,于是又通过`yield`系统调用切换到地址空间2中运行,这时候地址空间2的用户程序继续运行执行器,拿出一个任务运行(该任务打印"[user] yield test task1")之后,发现共享调度器中没有任务了,于是系统退出。

## 异步IO系统调用演示程序
<img src="../assets/异步IO系统调用演示程序.png" alt="异步IO系统调用演示程序" width = "50%" height = "50%" align=center />
![](../assets/异步IO系统调用演示程序.png)
<!-- <img src="../assets/异步IO系统调用演示程序.png" alt="异步IO系统调用演示程序" width = "50%" height = "50%" align=center /> -->

该演示程序主要演示了怎么通过异步IO系统调用从块设备中读取块,这里读取了块号为0的块,打印前10个字节,结果显示正好是FAT32文件系统的头部。

异步IO系统调用的实现原理请参考[第七章-异步IO系统调用](./第七章-异步IO系统调用.md)

## 任务间通信演示程序
<img src="../assets/任务间通信演示程序.png" alt="任务间通信演示程序" width = "50%" height = "50%" align=center />
![](../assets/任务间通信演示程序.png)
<!-- <img src="../assets/任务间通信演示程序.png" alt="任务间通信演示程序" width = "50%" height = "50%" align=center /> -->

该演示程序主要演示了怎么进行任务间通信,这里主要通过通道(channel)进行通信,先通过`bounded`函数获得一个发送者(`Sender`)和一个接收者(`Receiver`),然后利用`Arc`智能指针让它们在任务间共享,发送方可以通过`send`方法发送消息,接收方可以通过`receive`接受消息。

如果接收方调用`receive`方法的时候通道缓冲区为空,则返回`Pending`,同理,发送方调用`send`方法的时候通道缓冲区已满,则返回`Pending`。这就是该演示程序结果中输出`start receive from channel``receive 0 from channel`中间掺杂输出`send 0 to channel`的原因。

## 飓风内核自身对照实验性能测试程序
<img src="../assets/任务与进程上下文切换对比测试程序.png" alt="任务与进程上下文切换对比测试程序" width = "50%" height = "50%" align=center />
![](../assets/任务与进程上下文切换对比测试程序.png)
<!-- <img src="../assets/任务与进程上下文切换对比测试程序.png" alt="任务与进程上下文切换对比测试程序" width = "50%" height = "50%" align=center /> -->

具体请参考[第九章-性能测试](./第九章-性能测试.md)

Expand Down
3 changes: 2 additions & 1 deletion doc/第四章-用户执行器与yield系统调用.md
Expand Up @@ -70,5 +70,6 @@ const fn user_contex_va(asid: usize) -> usize {
> ps: RISC-V指令集中tp寄存器指代`thread pointer`,和硬件线程有一点关系,(据说)编译器一般会把线程的上下文基地址放这里来索引一些线程上下文里面的变量。
有了上面三个要素,yield系统调用的流程就如下图所示:
<img src="../assets/yield系统调用.png" alt="yield系统调用" width = "20%" height = "20%" align=center />
![](../assets/yield系统调用.png)
<!-- <img src="../assets/yield系统调用.png" alt="yield系统调用" width = "20%" height = "20%" align=center /> -->

0 comments on commit fa83c76

Please sign in to comment.