最近在念OS的kernal thread跟user thread时遇到一个问题是,
假设我有一个最简单的情境是只有一个cpu在跑多个thread,当我现在有两个user thread在执行,
分别是userA跟userB,我对kernal thread有两个猜想,不知道实际上kernal thread到底负责什么
假设1
cpu的context(就是register跟program counter那些)应该会是不停的在userA跟userB两个thread之间不停做context switch对吗?这时候kernal thread是闲置在旁边,等system call发生,cpu的context才会切换到kernal thread的context来执行kernal mode的相关指令吗 ?
假设2
cpu的context其实是在两个user thread跟一个kernal thread之间不停切换, kernal thread负责管理userA跟userB,thread塞到CPU里执行顺序是 : kernal thread执行,叫userA起来跑 > A跑一段时间该轮到B的时候会触发中断把kernal叫回来取代userA > kernal thread去叫userB开始跑 > userB跑一段时间又回到kernal > kernal叫userA起来跑
并且kernal thread也负责执行userA跟userB的system call
因为老师上课有提到当kernal thread-user-thread是一对多时,当userA去call sleep时,会整个process卡住,我一直想不太到原因,假如kernal thread在执行sleep,cpu不能先让给userA或userB跑吗?好像只有假设2比较合理