※ 引述《wandog (fight!!)》之铭言:
: ※ [本文转录自 Linux 看板 #1RGrij4S ]
: 作者: wandog (fight!!) 看板: Linux
: 标题: [问题] 关于kernel的多执行绪?
: 时间: Mon Jul 9 20:55:07 2018
: 我看到的一些资料 不太确定我的认知正不正确 请各位指教
: 基本上 kernel space中 可以当作一个process一直在无限loop
: 并且里面有多个threads在执行
: 当user space的process执行kill这个指令
: 则会借由c lib呼叫syscall 并将要执行的vector function所对应
: 的代号放入特定暂存器后 执行软件中断 切换到kernel mode
: 而在kernel mode中 vector function读取站存器存放的代号
: 呼叫对应的函式做事
: 我不太懂的是 如果kernel space是一个多执行绪的process 他是另外产生一个
: thread来呼叫对应的函式做事 还是原本就在跑的thread自己会呼叫函式做事?
: 以及这个呼叫的过程是怎么实作的?
: 另外想接着问一个schedular的问题 他的运作方式是是在timer的中断产生后
: 直接在vetor function中就执行context switch的动作吗? 抑或是跟上一段
: 一样 vector function是让kernel process去执行context switch?
排程器主要靠TIMER来完成 另外TASK也能够主动释放出控制权
像是呼叫synchronized or usleep之类的通常会触发排程
kernel内的printk也常常会触发RESCHEDUER
系统设计基本上就那几种 (timer, workqueue , scheduler...etc)
JOB被放在CPU RQ的资料结构中
CPU在执行TASK前已经算好该TASK能够执行多少时间
所谓算好是指排程器给你的时间
当PROGRAM使用排程禁止便可以独占整个CPU, 只剩下中断可以抢占
这一般在USER SPACE是不许可的
有兴趣可以GOOGLE loda CFS 相关的字眼
网络资源其实颇多的
现在对岸的资料对于LINUX subsystem的分析很多
蜗窝科技上有很多文章可以参考