Skip to content

Commit

Permalink
修正实验题目为 fork #106
Browse files Browse the repository at this point in the history
  • Loading branch information
Tuyixiang committed Jul 25, 2020
1 parent e7e9574 commit 0e28553
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
6 changes: 5 additions & 1 deletion docs/lab-4/practice-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,8 @@
3. 实验:当键盘按下 Ctrl + C 时,操作系统应该能够捕捉到中断。实现操作系统捕获该信号并结束当前运行的线程(你可能需要阅读一点在实验指导中没有提到的代码)

<br>
4. 实验:实现线程的 `clone()`。目前的内核线程不能进行系统调用,所以我们先简化地实现为“按 C 进行 clone”。clone 后应当为目前的线程复制一份几乎一样的拷贝,新线程与旧线程同属一个进程,公用页表和大部分内存空间,而新线程的栈是一份拷贝。
4. 实验:实现进程的 `fork()`。目前的内核线程不能进行系统调用,所以我们先简化地实现为“按 F 进行 fork”。fork 后应当为目前的进程复制一份几乎一样的拷贝。

> 旧题目:这个题目有一些问题,会导致线程中对栈上的指针失效。如果已经完成了 `clone()` 实验,推荐但不必须重新做 `fork()`
>
> 实现线程的 `clone()`。目前的内核线程不能进行系统调用,所以我们先简化地实现为“按 C 进行 clone”。clone 后应当为目前的线程复制一份几乎一样的拷贝,新线程与旧线程同属一个进程,公用页表和大部分内存空间,而新线程的栈是一份拷贝。
8 changes: 5 additions & 3 deletions docs/lab-6/practice.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@

3. 实验:实现 `get_tid` 系统调用,使得用户线程可以获取自身的线程 ID。

4. 实验:将你在实验四(上)实现的 `clone` 改进成为 `sys_clone` 系统调用,使得该系统调用为父进程返回自身的线程 ID,而为子线程返回 0。
4. 实验:基于你在实验四(上)的实践,实现 `sys_fork` 系统调用。该系统调用复制一个进程,并为父进程返回 1(目前没有引入进程 ID,也可以自行补充为进程 ID),而为子进程返回 0。

5. 实验:将一个文件打包进用户镜像,并让一个用户进程读取它并打印其内容。需要实现 `sys_open`,将文件描述符加入进程的 `descriptors` 中,然后通过 `sys_read` 来读取
相比于实验四,你可能需要额外注意文件描述符的复制

6. 挑战实验:实现 `sys_pipe`,返回两个文件描述符,分别为一个管道的读和写端。用户线程调用完 `sys_pipe` 后调用 `sys_fork`,父线程写入管道,子线程可以读取。读取时尽量避免忙等待。
5. 实验:将一个文件打包进用户镜像,并让一个用户进程读取它并打印其内容。需要实现 `sys_open`,将文件描述符加入进程的 `descriptors` 中并返回,然后通过 `sys_read` 来读取。

6. 挑战实验:实现 `sys_pipe`,为进程添加并返回两个文件描述符,分别为一个管道的读和写端。用户线程调用完 `sys_pipe` 后调用 `sys_fork`,父进程写入管道,子进程可以读取。读取时尽量避免忙等待。

0 comments on commit 0e28553

Please sign in to comment.