7. Lab
多线程的并行运行主要有两个策略:
-
第一个策略是在多核处理器上使用多个CPU,每个CPU都可以运行一个线程,如果你有4个CPU,那么每个CPU可以运行一个线程。每个线程自动的根据所在CPU就有了程序计数器和寄存器。但是如果你只有4个CPU,却有上千个线程,每个CPU只运行一个线程就不能解决这里的问题了。
-
所以这节课大部分时间我们都会关注第二个策略,也就是一个CPU在多个线程之间来回切换。假设我只有一个CPU,但是有1000个线程,我们接下来将会看到XV6是如何实现线程切换使得XV6能够先运行一个线程,之后将线程的状态保存,再切换至运行第二个线程,然后再是第三个线程,依次类推直到每个线程都运行了一会,再回来重新执行第一个线程。
- multi-core
- switch
在执行线程调度的时候,操作系统需要能区分几类线程:
-
当前在CPU上运行的线程
-
一旦CPU有空闲时间就想要运行在CPU上的线程
-
以及不想运行在CPU上的线程,因为这些线程可能在等待I/O或者其他事件
RUNNING,线程当前正在某个CPU上运行
RUNABLE,线程还没有在某个CPU上运行,但是一旦有空闲的CPU就可以运行
SLEEPING,这节课我们不会介绍,下节课会重点介绍,这个状态意味着线程在等待一些I/O事件,它只会在I/O事件发生了之后运行