kakaotech-25 / cs-plant-interview

cs 의 씨앗을 심기 위한 레포지토리 🌱
2 stars 0 forks source link

[OS] 스핀락 #17

Closed msung99 closed 2 months ago

msung99 commented 3 months ago

예상 면접 질문

LEE-DA-EUN commented 3 months ago
  1. 락(Lock) 이란 무엇이고, 왜 필요한가요?

    • 락 이란 공유 자원을 특정 쓰레드가 사용하고 있을 때 다른 쓰레드는 해당 공유자원에 접근 목하도록 제한하는 것
    • 공유자원을 순차적으로 실행하게 만들어서 공유자원의 동기화를 구현하기 위해서 필요함
  2. 스핀 락이란 무엇이며, 어떠한 방식으로 동작하나요?

    • 스핀락은 쓰레드가 락을 얻을 때가지 무한 루프를 돌며 확인하는 동기화 메커니즘 [동작과정]
    • 쓰레드가 실행되는 동안 공유자원에 락을 걸고 쓰레드 작업이 종료되면 락을 해제함
    • 따라서 다음 쓰레드가 CPU를 차지하기 위해선 공유자원에 락이 걸렸는지 파악하는 과정이 필요함
    • 스핀락은 대기중인 쓰레드가 공유자원의 상태를 무한루프를 이용해 확인하는데 락이 걸려있으면 작업수행불가/락이 걸려있지않으면 작업수행가능이기에 무작정 반복적으로 락이 풀릴때까지 확인하며 대기함
  3. 스핀 락 방식의 장단점에 대해 설명해보세요. 세마포어와 비교해서 설명해보겠습니다. 스핀락의 장점으로는 문맥 교환에 필요한 오버헤드를 줄일 수 있다는 점과 락의 획득이 빠르다는 점이 있고 단점으로는 busy waiting, 즉 스핀락을 획득하기 위해 CPU 오버헤드가 발생할 수 있다는 점과 특정쓰레드나 프로세스가 공유자원을 오랫동안 점유할 때 발생하는 기아현상을 말할 수 있습니다. 이와 반대로 세마포어는 락을 얻지 못한 쓰레드를 대기 상태로 전환하기에 busy waiting을 피할 수 있고 대기 중인 쓰레드들이 차례대로 자원을 얻을 수 있도록 하여 기아현상을 방지할 수 있습니다. 하지만 이 과정에서 문맥교환이 빈번하게 발생할 수 있고 락 획득 속도가 스핀락에 비해 느리다는 단점이 있습니다. 이러한 차이점이 있기에 스핀락은 짧은 시간 동안 자원을 보호할 때 사용하는 것이 좋고, 세마포어는 장기간 대기가 필요하거나 여러 쓰레드가 자원을 공유해야 할 때 유용하다고 할 수 있습니다.

rimeir commented 2 months ago
  1. 락이란 공유 자원을 특정 스레드가 사용 중이면 다른 스레드는 해당 공유 자원에 접근할 수 없도록하여 스레드를 순차적으로 실행하게 만들줍니다. 따라서 공유 자원의 동기화를 구현할 때 필요합니다.
  2. 스핀락은 앞서 설명한 락의 종류 중 하나로 스레드가 락을 얻을 때까지 무한 루프를 돌며 확인하는 동기화 락 메커니즘입니다. 스핀락은 대기 중인 스레드가 공유 자원의 상태를 무한 루프로 확인하여 락이 걸려 있으면 작업을 수행하지 못하고, 락이 걸려있지 않으면 작업을 수행하여 반복적으로 락이 반환될 때까지 확인하면서 대기합니다.
  3. 락을 획득할 수 없는 스레드는 대기 상태로 전환되는 세마포어 및 뮤텍스와 달리 스핀락은 락을 획득하려는 스레드를 busy waiting하여 대기 상태로 전환되지 않아 context switching이 일어나지 않습니다. 따라서 이를 필요로 하는 CPU의 오버헤드를 줄일 수 있으며 락의 획득이 빠릅니다. 단점으로는 busy waiting 대기 방식으로 스핀락을 획득하기 위해 CPU를 계속 사용하여 오버헤드가 발생할 수 있습니다. 또한 특정 스레드가 긴 시간 동안 공유 자원을 점유하여 다른 쓰레드가 기아 상태에 빠질 수 있는 점이 있습니다.
JaeJunday commented 2 months ago

락(Lock) 이란 무엇이고, 왜 필요한가요?

  • 락이란 공유자원에 대한 동기화를 구현할 때 필요한 개념입니다. 스핀 락이란 무엇이며, 어떠한 방식으로 동작하나요?
  • 멀티스레드 환경에서 공유자원 접근을 제어할때 사용하는 기법중 하나입니다. 스레드가 자원을 얻기 위해서 락이 해제될때까지 반복적으로 락을 시도하며 다른작업을 하지 않고 반복적으로 락을 체크합니다. 스핀 락 방식의 장단점에 대해 설명해보세요. ( ps. 세마포어, Mutex 등의 다른 기법과 장단점을 각각 비교하여 설명해보셔도 좋습니다 🙂 )
  • 계속해서 체크하는 만큼 빠르게 락을 획득할 수 있고 구현이 간단합니다. 단점으로는 잡이 오래걸려서 스레드가 오래 기다려야 되면 CPU자원이 낭비될수있습니다. 세마포어나 뮤텍스는 사용하지 못하는 경우 스레드가 블로킹 되기 때문에 CPU자원의 낭비가 적습니다.
1013115 commented 2 months ago
  1. 락(Lock) 이란 무엇이고, 왜 필요한가요?

    • 락은 멀티스레팅 환경에서 공유 자원에 대한 동시 접근을 제어하기 위한 기법이다. 여러 스레드가 동시에 공유자원에 접근하면 데이터 일관성에 문제가 생길 수 있으므로 이를 방지하기 위해 하나의 스레드가 자원을 사용하는 동안 다른 스레드가 해당 자원에 접근하지 못하도록 하는 것이 락의 역할이다.
  2. 스핀 락이란 무엇이며, 어떠한 방식으로 동작하나요?

    • 스핀락은 락을 획득하기 위해 기다리는 동안 스레드가 CPU 사이클을 소비하면서 계속해서 락이 해제되었는지 확인하는 방식의 락이다.
    • 스레드가 락을 획득하지 못하면 짧은 루프를 돌면서 반복적으로 락을 시도한다. 이 과정에서 스레드는 차단(block)되지 않고, 계속해서 CPU를 사용하며 작업을 진행하려고 시도한다.
  3. 스핀 락 방식의 장단점에 대해 설명해보세요.

    • 다른 동기화 기법과 비교하여 스핀 락은 락을 획득할 때 스레드가 차단되지 않으므로, 락이 빠르게 해제될 것으로 예상되는 상황에서 매우 효율적이다. 또한 스레드가 차단되지 않고 계속해서 실행되므로, context switching 비용을 줄일 수 있다. 반면 레드가 락을 획득할 때까지 계속해서 반복 루프를 돌기 때문에, 락이 장시간 해제되지 않으면 CPU 자원을 비효율적으로 사용할 수 있고, 락이 장시간 해제되지 않거나, 스레드가 락을 얻기 위해 오래 기다려야 하는 경우, CPU를 다른 유용한 작업에 사용할 수 없게 되어 전체 시스템 성능이 저하될 수 있다.