作者lystyp (真是疯了)
看板Programming
标题作业系统 kernel thread 疑问
时间Tue May 17 16:53:24 2022
最近在念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比较合理
-----
Sent from JPTT on my iPhone
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.136.134.241 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1652777606.A.F29.html
1F:推 gusion: kernel不认识user-thread,它只知道有哪 123.252.23.7 05/17 22:18
2F:→ gusion: 些kernel thread,然後控制彼此间的切换 123.252.23.7 05/17 22:19
3F:→ gusion: 而user-thread是由user library产生及控制 123.252.23.7 05/17 22:19
4F:→ gusion: 所以是在这个process所拥有的CPU时间里切 123.252.23.7 05/17 22:20
5F:→ gusion: 换不同的user-thread执行 123.252.23.7 05/17 22:20
6F:→ gusion: 如果是user-thread sleep的话,那是看 123.252.23.7 05/17 22:21
7F:→ gusion: library怎麽implement 123.252.23.7 05/17 22:22
8F:→ gusion: 如果是这个process对应的kernel-thread 123.252.23.7 05/17 22:22
9F:→ gusion: sleep的话,那就是整个process都不会执行 123.252.23.7 05/17 22:22
10F:→ gusion: 即所有user-thread都暂停 123.252.23.7 05/17 22:23
11F:→ gusion: 另外,文中有错字,是kernel不是kernal 123.252.23.7 05/17 22:23
12F:推 sorcerer1973: 你的推理有钱途,但你问其它同事意 101.12.51.140 05/27 17:25
13F:→ sorcerer1973: 见好了 101.12.51.140 05/27 17:25