0%

MIT-6.828-JOS 笔记 - Lab 7: Kernel-Supported Threads

本实验将是对该课程的扩展,将在内核中实现对多线程的支持。
这里只做步骤/结果描述,代码见Github。

本实验代码https://github.com/epis2048/MIT_6.828_2018/tree/lab7

系统内核

核心思想:CPU以线程为单位,其他资源以进程为单位。

1. 进程、线程管理及调度

修改如下文件,主要是仿照Env建立Thd结构,并创建一系列有关线程的函数(如创建、销毁等)。还要新增一些关于Thd的描述。

1
2
3
4
5
inc/env.h
kern/env.h
kern/env.c
inc/error.h
inc/memlayout.h

修改如下文件,主要是修改原本涉及进程的地方,使之改用/兼容线程。

1
2
3
4
kern/cpu.h
kern/pmap.c
kern/sched.c
kern/trap.c

2. 相关系统调用

修改如下文件,增加一系列关于线程的系统调用。

1
2
3
kern/syscall.h
kern/syscall.c
inc/syscall.h

用户代码

1. 用户库

修改如下文件,在用户层提供线程的系统调用、修改运行单位为线程以及做一些适配等。

1
2
3
4
5
6
7
lib/fork.c
lib/ipc.c
lib/syscall.c
lib/libmain.c
lib/thread.c
lib/pipe.c
lib/spawn.c

2. 测试程序

修改如下文件,其中hellothread为新增文件,用于测试线程。剩余两个是既有文件,用于测试进程。

1
2
3
user/primes.c
user/stresssched.c
user/hellothread.c

Make

此外,修改Makefrag文件,将新增的文件添加到编译列表中。

1
2
kern/Makefrag
lib/Makefrag