由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个OS里面spin lock的问题。
相关主题
面经+一点个人体会问一个进程调度的问题。
embedded Linux ,面试了几次,都问这个问题了。不知道答案??人生中第一次面试
谁给讲讲test-and-set怎么实现mutex?问个今天被问道的OS问题。
怎样 avoid deadlock ??请问pure storage 的那道用spin lock and flags to implement mutex怎么做
怎么才是 精简,准确呢? spinlock VS semaphore 的 区别??吐嘈一下软软
请教大牛用mutex lock实现reader writer lockmulti thread复习请教
请问C++ threading w/ lock free algorithms问个thread synchronization的问题
菜鸟请教多线程怎么学新鲜出炉的Broadcom电话面试题
相关话题的讨论汇总
话题: lock话题: preemption话题: spin话题: cpu话题: 进程
进入JobHunting版参与讨论
1 (共1页)
r****o
发帖数: 1950
1
【 以下文字转载自 InterviewHackers 俱乐部 】
发信人: roufoo (五经勤向窗前读), 信区: InterviewHackers
标 题: 问个OS里面spin lock的问题。
发信站: BBS 未名空间站 (Thu May 20 01:18:51 2010, 美东)
我发现我对OS里面进程的同步和调度的概念很不清楚。
spin lock的机制是一个进程A检测自己能否获得lock,如果不能就一直try,直到获得
lock。我的问题是,在uniprocessor系统里面,CPU的调度是不是只分配一部分时间片
给进程A,同时还运行其他进程B,C,D...? 还是说这个进程A就独霸CPU了?
我看到有的文章说因为在uniprocessor上没有别的进程能够获得CPU来释放lock,所以
不能用spin lock。所以很迷惑。
不知道我的问题说清楚没有。请大牛指教。
l*******y
发帖数: 1498
2
为啥没有别的进程获得CPU?只要别的进程priority比A高,就可以preempt A吧,还有A
的时间片用完了,就自动让出CPU了吧。
还有我没看到过说uniprocessor上不能用spin_lock
r****o
发帖数: 1950
3
我也这么觉得。
你能不能看看这篇文章,好像还涉及到什么抢占的问题。
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=linuxk&Number=622919&page=119&view=collapsed&sb=5&o=all&fpart=all

有A

【在 l*******y 的大作中提到】
: 为啥没有别的进程获得CPU?只要别的进程priority比A高,就可以preempt A吧,还有A
: 的时间片用完了,就自动让出CPU了吧。
: 还有我没看到过说uniprocessor上不能用spin_lock

l*******y
发帖数: 1498
4
我的理解是,当spin_lock()后,cpu是disable kernel preemption,当spin_unlock()
后,cpu enable kernel preemption. 所以当A进程spin_lock()后,只有等A的time
slice用完了才会让出CPU。在uniprocessor里,disable kernel preemption和用spin_
lock()效果是一样的,所以它就没用实际的spin_lock()而直接
disable kernel preemption。
这本书我看过,它没有专门说spin_lock()后会disable kernel preemption,只是说在
uniprocessor里会这样。我觉得在multi-processor,spin_lock()也会disable 当前
cpu的 preemption
a**********k
发帖数: 1953
5
That's correct.
on UP without preemption, spinlock is no-op.
r****o
发帖数: 1950
6
多谢。
请问A进程spin_lock()的过程中,time slice还有效吗? A会不会独占CPU,一直到获得
lock为止?

()
spin_

【在 l*******y 的大作中提到】
: 我的理解是,当spin_lock()后,cpu是disable kernel preemption,当spin_unlock()
: 后,cpu enable kernel preemption. 所以当A进程spin_lock()后,只有等A的time
: slice用完了才会让出CPU。在uniprocessor里,disable kernel preemption和用spin_
: lock()效果是一样的,所以它就没用实际的spin_lock()而直接
: disable kernel preemption。
: 这本书我看过,它没有专门说spin_lock()后会disable kernel preemption,只是说在
: uniprocessor里会这样。我觉得在multi-processor,spin_lock()也会disable 当前
: cpu的 preemption

b*********n
发帖数: 464
7
spinlock是busy waiting。在multiprocessor的情况下才比较有用(减少context
switch产生的cost等),uniprocessor下比较浪费cpu,要在调度(被动)后才能让出
cpu,效果不如一般的lock。

【在 r****o 的大作中提到】
: 多谢。
: 请问A进程spin_lock()的过程中,time slice还有效吗? A会不会独占CPU,一直到获得
: lock为止?
:
: ()
: spin_

K******g
发帖数: 1870
8
不是这样的吧?
据我的理解,如果另一个hold lock的进程如果时间比较长的话,spinlock在UniProc上
会增加scheduler的负担,大量的时间消耗在swap上,导致hold lock的那个进程的进展
很慢,结果系统的performance降低了。如果在MultiProc上,hold lock的那个进程不会
因为spinlock而减慢,这样子spinlock的影响就没有UniProc上那么大了.
如果spinlock真的要disable preemption的话,那么它只能出现在MultiProc上。但是,spinlock的概念在UniProc上也存在。

()
spin_

【在 l*******y 的大作中提到】
: 我的理解是,当spin_lock()后,cpu是disable kernel preemption,当spin_unlock()
: 后,cpu enable kernel preemption. 所以当A进程spin_lock()后,只有等A的time
: slice用完了才会让出CPU。在uniprocessor里,disable kernel preemption和用spin_
: lock()效果是一样的,所以它就没用实际的spin_lock()而直接
: disable kernel preemption。
: 这本书我看过,它没有专门说spin_lock()后会disable kernel preemption,只是说在
: uniprocessor里会这样。我觉得在multi-processor,spin_lock()也会disable 当前
: cpu的 preemption

r****o
发帖数: 1950
9
就是说uniprocessor下某个进程spin_lock()还是不能一直独占CPU的,时间片到了还是
得让出,对吗?

【在 b*********n 的大作中提到】
: spinlock是busy waiting。在multiprocessor的情况下才比较有用(减少context
: switch产生的cost等),uniprocessor下比较浪费cpu,要在调度(被动)后才能让出
: cpu,效果不如一般的lock。

l*******y
发帖数: 1498
10
time slice一直有效吧。在UP里,因为已经disable preemption了,所以A占不了CPU。
在MP里,A会占CPU资源,就跟普通的进程一样。所以说,由于它会在那浪费CPU资源一
直spin等lock,spin_lock()只适合短时间的lock,比如占用lock的时间小于2次
context switch时。否则用mutex更好。还有就是在interrupt里不能context switch,
就只能用spin_lock.

【在 r****o 的大作中提到】
: 多谢。
: 请问A进程spin_lock()的过程中,time slice还有效吗? A会不会独占CPU,一直到获得
: lock为止?
:
: ()
: spin_

相关主题
请教大牛用mutex lock实现reader writer lock问一个进程调度的问题。
请问C++ threading w/ lock free algorithms人生中第一次面试
菜鸟请教多线程怎么学问个今天被问道的OS问题。
进入JobHunting版参与讨论
l*******y
发帖数: 1498
11
请再去看看书,spin_lock就是kernel nonpreemptive的标志

是,spinlock的概念在UniProc上也存在。

【在 K******g 的大作中提到】
: 不是这样的吧?
: 据我的理解,如果另一个hold lock的进程如果时间比较长的话,spinlock在UniProc上
: 会增加scheduler的负担,大量的时间消耗在swap上,导致hold lock的那个进程的进展
: 很慢,结果系统的performance降低了。如果在MultiProc上,hold lock的那个进程不会
: 因为spinlock而减慢,这样子spinlock的影响就没有UniProc上那么大了.
: 如果spinlock真的要disable preemption的话,那么它只能出现在MultiProc上。但是,spinlock的概念在UniProc上也存在。
:
: ()
: spin_

r****o
发帖数: 1950
12
非常感谢,请看看我的理解对不对。
UP系统里面,进程A启用spin_lock后,会在它所分配的time slice里面一直try,直到
获得lock。在CPU分配的其他time slice里面,拥有这个lock的那个进程会运行直到释
放这个lock.
MP系统里面,进程A启用spin_lock后,会一直霸占它所对应的那个CPU,一直到另一个
CPU上拥有这个lock的进程释放了这个lock为止。
我的问题是:
1)在MP系统里面,进程A不受time slice的约束吗?
2)为啥说spin_lock在MP系统里面更好,我觉得在MP系统里面,进程A浪费的时间更多啊?
先感谢了。

【在 l*******y 的大作中提到】
: time slice一直有效吧。在UP里,因为已经disable preemption了,所以A占不了CPU。
: 在MP里,A会占CPU资源,就跟普通的进程一样。所以说,由于它会在那浪费CPU资源一
: 直spin等lock,spin_lock()只适合短时间的lock,比如占用lock的时间小于2次
: context switch时。否则用mutex更好。还有就是在interrupt里不能context switch,
: 就只能用spin_lock.

l*******y
发帖数: 1498
13
在UP里,如果一个B进程已经得到了lock, 进程A不会去spin_lock(lock),因为B进程
spin_lock(lock)时已经disable preemption了,A只有等B运行完了或者等B spin_
unlock(lock)后 enable preemption了才可能去try。
在MP里,A也受time slice的约束,它的time slice完了就不能再spin了。但是一般情
况下,spin_lock用于短时间的lock,所以应该在time slice用完前它就会得到lock。
spin是会浪费CPU资源,所以在UP里就直接disable preemption了。但是在MP里,为了
protection from concurrency,这已经是相对来说low overhead了。你不可能像UP那
样disable 所有cpu的 preemption吧,那样更浪费。
所以spin_lock用于非常短时间的lock,比如时间短于2次process context switch (
mutex的overhead).

啊?

【在 r****o 的大作中提到】
: 非常感谢,请看看我的理解对不对。
: UP系统里面,进程A启用spin_lock后,会在它所分配的time slice里面一直try,直到
: 获得lock。在CPU分配的其他time slice里面,拥有这个lock的那个进程会运行直到释
: 放这个lock.
: MP系统里面,进程A启用spin_lock后,会一直霸占它所对应的那个CPU,一直到另一个
: CPU上拥有这个lock的进程释放了这个lock为止。
: 我的问题是:
: 1)在MP系统里面,进程A不受time slice的约束吗?
: 2)为啥说spin_lock在MP系统里面更好,我觉得在MP系统里面,进程A浪费的时间更多啊?
: 先感谢了。

a**********k
发帖数: 1953
14
preemption means time slice support.
so
on UP with preemption, spinlock = disabling preemption = no time slice;
on UP without preemption, spinlock = no op;
Hope this helps.
r****o
发帖数: 1950
15
非常感谢。
再问一下,是不是目前的UP系统里面大部分还是with preemption的啊?

【在 a**********k 的大作中提到】
: preemption means time slice support.
: so
: on UP with preemption, spinlock = disabling preemption = no time slice;
: on UP without preemption, spinlock = no op;
: Hope this helps.

a**********k
发帖数: 1953
16
yes, linux kernel2.6 has kernel preemption support.
m******t
发帖数: 99
17
UP 不会用spin lock的,而不是不能用。
1 (共1页)
进入JobHunting版参与讨论
相关主题
新鲜出炉的Broadcom电话面试题怎么才是 精简,准确呢? spinlock VS semaphore 的 区别??
Re: 别了,纽约 (转载)请教大牛用mutex lock实现reader writer lock
报个N家面经,攒RP!大家都加油请问C++ threading w/ lock free algorithms
FLAG rej/offer 求比较菜鸟请教多线程怎么学
面经+一点个人体会问一个进程调度的问题。
embedded Linux ,面试了几次,都问这个问题了。不知道答案??人生中第一次面试
谁给讲讲test-and-set怎么实现mutex?问个今天被问道的OS问题。
怎样 avoid deadlock ??请问pure storage 的那道用spin lock and flags to implement mutex怎么做
相关话题的讨论汇总
话题: lock话题: preemption话题: spin话题: cpu话题: 进程