공부/Operating system

OS : Concurrency : 병행성 - Intro(2)

상연 2022. 4. 28. 02:14

목차

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

    p3.c 파일이 실행되었을 때 흐름에 대해 한 번 보자.

    Main 쓰레드가 실행되고, 이후 T1, T2가 생성되는데 join을 사용하였으므로

    Main은 T1을 waits 한다.

    이 과정에서 Main은 Block에 빠진다.

    T1은 creates Thread1에서 생성되는 시점에서는 READY

    runs 되면서 Running

    이 동안에는 Main은 Blocked 되어있다가 T1이 끝나면서

    Ready -> Running 하면서

    T2를 실행시켜주고 다시 마찬가지로 Blocked에 빠진다

    T2는 만들어진 시점부터 Ready였다가 Running이 되었던 것.

    T2가 끝나면서 Main을 깨우고 Main은 다시 실행된다.

    스케쥴링에 따라 이러한 경우도 있다.

    스레드가 만들어지자마자 실행되는 경우

    이렇게 되면, 각 스레드는 Ready -> Running -> Done

    메인의 경우에는...

    Creates 할 때는 Running

    Thread 실행되는 동안에는 Ready

    join에 다다라서 wait 하려고 보니 이미 Thread Done

    따라서 이 경우에는 Blocked으로 가지는 않는다.

    이런 경우도 있다.

    스레드 1, 2가 만들어지고

    쓰레드 2가 실행되는 동안에는

    Main과 Thread 1 둘 다 Ready

    그다음 waits for T1에서는 Main이

    Ready -> Running -> Blocked 으로 가며

    Thread1 은

    Ready -> Running이 된다.

    Thead1이 끝나면 Main이

    Ready -> Running 되는데 wait를 보니 이미 작업이 끝난 것이므로 Block 되지 않는다.

    실제로 실행을 하게 되면 위의 3 가지 예시 외에도 다른 경우의 수가 있을 수 있다.

    결론으로는, 다양한 실행 흐름이 있다면 이를 스케쥴링하는 방법은 천지차이이기 때문에 어떻게 될지 모른다.

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

    OS : Lock - Controlling Interrupts  (0) 2022.05.03
    OS : Locks - The Basic Idea  (0) 2022.05.03
    OS : Thread - API  (0) 2022.04.28
    OS : Concurrency - Race Condition  (0) 2022.04.28
    OS : Concurrency : 병행성 - Intro(1) + Thread  (0) 2022.04.28