社区
Linux_Kernel
帖子详情
spin_lock自旋锁的时间片轮转
againyuan
2011-03-10 11:32:24
很关键的内核问题
被保护的资源已经持有自旋锁,那么新的内核线程再度访问保护的资源的时候,会自旋等待。
1 那么此内核线程的时间片用完之后,自旋锁是会让出cpu,还是一直自旋等待锁的释放???
2 还有在中断处理程序执行的过程中,中断处理程序是否分配有时间片??? 假如有,内核是处于中断上下文中,中断处理程序让出CPU后又怎么会被再次调度呢????
...全文
364
6
打赏
收藏
spin_lock自旋锁的时间片轮转
很关键的内核问题 被保护的资源已经持有自旋锁,那么新的内核线程再度访问保护的资源的时候,会自旋等待。 1 那么此内核线程的时间片用完之后,自旋锁是会让出cpu,还是一直自旋等待锁的释放??? 2 还有在中断处理程序执行的过程中,中断处理程序是否分配有时间片??? 假如有,内核是处于中断上下文中,中断处理程序让出CPU后又怎么会被再次调度呢????
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
againyuan
2011-03-15
打赏
举报
回复
内核没有时间片轮转。打开内核抢占,内核调度的规则就变了。比如进程上下文,被中断抢占,中断处理之后,若没有打开抢占则返回进程上下文执行,不会去执行高优先级任务;若打开抢占,则会重新调度查看是否有更高优先级任务要是有则限制性高优先级任务。
ashengsheng
2011-03-14
打赏
举报
回复
楼上说的在理啊,好像在《linux的内核设计与实现》中看过这一段话。
在内核态真的没有时间片轮转吗?如果打开了内核抢占了,好像就有内核抢占了吧?还得请问一下楼上的了
againyuan
2011-03-11
打赏
举报
回复
看来时间片的轮转是在用户态,在内核态下面没有时间片轮转。请看下面的解释内核态的抢占:
从中断返回内核空间的时候,内核会检查need_resched和preempt_count的值。如果need_ resched被设置,并且preempt count为0的话,这说明可能有一个更为重要的任务需要执行并且可以安全地抢占,此时,调度程序就会被调用。如果preempt-count不为0,则说明内核现在处干不可抢占状态,不能进行重新调度。这时,就会像通常那样直接从中断返回当前执行进程。如果当前进程持有的所有的锁都被释放了,那么preempt_ count就会重新为0。此时,释放锁的代码会检查need_ resched是否被设置。如果是的话,就会调用调度程序。
againyuan
2011-03-10
打赏
举报
回复
低级的中断(软中断)???
这个是物理中断,调用的底半部才是软中断吧???
时间片中断,不是物理中断吗???
软中断是tasklet,workqueue才对啊,难道是我的概念有偏差?
假如中断处理程序有时间片轮转,是不是在中断处理程序中时间片超时,就丢掉cpu进程被切换了???
无知者无谓
2011-03-10
打赏
举报
回复
时间片用完并不会释放spin_lock,它拥有之后就一直到它主动释放,否则别人只能等待,除非使用别的方式让系统接入进来。
中断的调用和函数调用一个道理,都有一个调用栈。当在处理一个物理中断的时候低级的中断(软中断)是不能打断的,比如时间片中断就是软中断。你把不相关的问题搅在一起想当然想不通了
againyuan
2011-03-10
打赏
举报
回复
自旋锁保持期间是抢占失效的----
这句话是说时间片轮转(任务的切换)还是高优先级任务在时间片未用完时切换低优先级任务???
朱老师QT系列课程-1.5.QT标准控件之InputWidget
本课程主要讲了QT的编辑器类控件,包括: InputWidget ComboBox FontComboBox LineEdit TextEdit PlainTextEdit
Spi
nBox Double
Spi
nBox TimeEdit DateEdit Date/TimeEdit Dial HorizontalScrollBar ...
spi
n_
lock
自旋锁
spi
n_
lock
自旋锁
的
时间片轮转
很关键的内核问题 被保护的资源已经持有
自旋锁
,那么新的内核线程再度访问保护的资源的时候,会自旋等待。 1 那么此内核线程的时间片用完之后,
自旋锁
是会让出cpu,还是一直自旋...
spi
n_
lock
相关 -- 原子上下文
在前面文章描述
spi
n_
lock
的时候, 要求
spi
n_
lock
/un
lock
中间的代码不能有主动放弃cpu, 进入睡眠的函数。 (如sleep, schedule()等) 下面提一个问题? ... 故
时间片轮转
到了, 也不会调度。。。 ...
【Go并发】
自旋锁
及Go实现
通常有两种处理方式:一种是没有获取到锁的线程就一直循环等待判断该资源是否已经释放锁,这种锁叫做**
自旋锁
**,它不用将线程阻塞起来(NON-B
LOCK
ING);还有一种处理方式就是把自己阻塞起来,等待重新调度请求,这种...
OS
Spi
n
Lock
自旋锁
OS
Spi
n
Lock
:
自旋锁
,等待锁的线程会处于忙等(busy-wait)状态,一直占用这CPU资源 OS
Spi
n
Lock
要导入头文件 <libkern/OSAtomic.h> #import "DetailSaleTicketVC.h" #import &...
Linux_Kernel
4,441
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章