공부/Operating system

OS : Locks - The Basic Idea

상연 2022. 5. 3. 05:57

목차

    학부 수업 내용을 필기한 내용입니다.
    필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
    그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다.

    이번에는 LOCK에 대한 기본적인 개념과, LOCK 구현의 평가기준에 대해 알아볼 것이다.

     

     

    저번 포스팅에서 여러 스레드가 4번 라인을 실행하려 할 때 Race Condition이 발생한다고 했다.

     

     

    그 이유는 이와 같이 4번 라인의 과정이 Atomic 하지 않기 때문이다.

    그 결과 Indeterminate가 된다.

    이러한 문제를 해결하기 위해서 나온 것이 바로 LOCK이다.

     

     

    위의 코드를 보면 기존 Critical Section의 위아래로 새로운 코드가 추가되어있다.

    이것이 LOCK인데, 이러한 처리를 해 줌으로써 하나의 스레드가 처리하는동안에는 다른 쓰레드가 하지 못하도록 막아준다.

     

    Pthread Locks


     

     

    pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

    위의 코드가 같이 필요한 만큼 Lock 변수를 생성 후 초기화하여 사용하면 된다.

    3번, 5번 Line에서는 그 변수를 인자로 하여 함수를 사용해서 Lock을 건다.

    Evaluating Locks


    Lock을 여러 가지 방법으로 만들기 전에 Lock을 평가하는 기준이 있다.

    • Correctness(정확도) - 올바르게 되어야 한다.
      • Mutual exclusion
        • Critical Section에 한 번에 한 스레드만 사용 가능하게 해야 한다.
      • Progress(deadlock-free)
        • Deadlock에 걸리면 안 된다.
        • 최소한 하나의 스레드는 실행되고 있어야 한다.
      • Bounded wait(starvation-free)
        • Fairness와 연관이 있다. Lock 때문에 기다리기만 하느라 사용을 못하면 안 된다.
    • Fairness
      • 공평해야 한다, 각 스레드들이 같은 시간을 기다려야 한다.
    • Performance
      • CPU의 시간이 효과적으로 되어야 한다.

    '공부 > Operating system' 카테고리의 다른 글

    OS : Spin Lock  (0) 2022.05.03
    OS : Lock - Controlling Interrupts  (0) 2022.05.03
    OS : Thread - API  (0) 2022.04.28
    OS : Concurrency - Race Condition  (0) 2022.04.28
    OS : Concurrency : 병행성 - Intro(2)  (0) 2022.04.28