[완료]리눅스커널 스핀락부분 햇갈립니다
글쓴이: nbspower3179 / 작성시간: 화, 2011/02/15 - 11:08오전
현재 자원에 접근하고 있는 cpu의 상태는 lock 상태인가요 unlock 상태인가요?
spin_lock()함수로 cpu0을 스핀락 걸고 있다고 하면 cpu0은 busy wait 상태라고 하는데 그럼 lock상태인가요??
그런데 또 책을 보면 이게 이건지 저게 저건지 햇갈립니다
책중에..
"잠금변수를 취득할 수 없었던 cpu는 잠금이 해제될 때까지 그자리에서 계속 이다리는데 이를 busy wait상태라고 합니다"
"참조접근을 하기 위해 잠금을 다중으로 실행할 수 있습니다. 여러 개의 cpu가 자원을 동시에 참조할 수 있습니다"
라고 되어있습니다. 전자를 보면 잠금이 되어 있으면 자원에 접근을 못한다는 말 같은데 후자를 보면 잠금이 되어 있어야 자원에 참조 할 수 있다는 말로 보입니다... 제가 잘 못 이해하고 있는 부분이 있으면 수정 부탁드려요.
Forums:
관련 정보는...
http://en.wikipedia.org/wiki/Spinlock
에 자세하게 나와있습니다. 찬찬히 읽어 보세요.
모두들 행복하세요~
제가 너무 성급했네요
질문전 좀더 좋은 태도를 지녀야 겠습니다 ㅎ
좋은정보 감사합니다ㅎ
그게.
스핀락으로 특정 CPU에 lock을 거는게 아니라,
특정 구간(정확히는 특정 resource)에 lock을 거는 겁니다.
나머지 CPU들은 해당 구간에 spin_lock()에서 busy waiting을 하는 거고요.
두번째 문장은
read-write lock에 대한 얘기 같군요.
read lock은 여러개가 lock할 수 있습니다.
read lock에 걸려있으면, read lock은 또 걸릴수 있지만, write lock은 block되죠.
write lock이 걸려있다면, read lock이든 write lock이든 block됩니다.
감사합니다
이해하는 방향이 잘 못되었었네요 감사합니다
댓글 달기