1. 用户态到内核态中间有个操作系统提供的“系统调用”的一层,那在用户空间想创建一条用户级的线程的话,那用户级的这个 TCB 是谁来创建的,是否也要经过“系统调用”层呢?
2. 用户线程和内核线程的对应关系有 1对多,1对1,N对M,没记错的话,java里头new tread 应该是1对1的,也就jvm里头创建了一条用户级线程的话,那在内核空间就会相应的有一条内核线程,请问老师这条内核级线程是怎么来的呢?假如说jvm想创建一条用户线程的话,我猜可能是jvm调用了类似 CreatUserThread() 之类的 Api ,那么与之对应的内核级线程,是否也是 jvm 调用了类似什么 CreatKernelThread() 之类的 Api 而来的呢?
3. Go语言里头的Goroutine我理解应该是个 N对M 的模型,一般像某些语言如果选用这种 N对M 的话,那N 和 M的关系可能是啥呀?是说这个语言的编译器,运行的一开始就在内核里头创建创了 M 条内核线程,之后就定死不变了,还是说当用户空间的协程数量极速增大的时候,M也会适当增大呀?
4. 一条进程一定会有一条主线程,这条主线程由操作系统创建。请问老师我是不是能理解为一个程序的主进程和主线程,都在内核空间里呢?
谢谢老师~