공부/Operating system

OS : Lock - Controlling Interrupts

상연 2022. 5. 3. 06:00

목차

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

    Controlling Interrupts


     

     

    Lock을 구현하는 방법(1) - Interrupts를 켜고 끈다

    Lock을 거는데 왜 Interrupts는 끄고 킬까?

    이에 대해서는 지난번 병행성 문제가 발생했던 상황의 Thread Trace를 살펴보자.

     

     

    보면 T1이 ADD 까지 진행된 상태에서 Interrupt가 발생하여 T2로 넘어가면서 문제가 발생했다.

    그렇다면 Critical Section에 진입하면서 Interrupt를 Disable 하게 되면?

    Interrupt에 의한 스레드 교환은 발생하지 않을 것이고 그에 따라 온전하게 진행될 수 있다.

    Critical Section이 끝나면서 다시 Interrupt를 able 하게 만들어주면 LOCK이 된다.

    다만 여기서 한 가지 생각할것이 있다. Time out

    Time out은 Interrupt를 발생시키면서 일의 전환을 하게 하는데, Interrupt를 Disable 하게 되면 Time out 또한 발생하지 않는다.

    이렇듯 Interrupt 를 관리하여 LOCK을 걸 수는 있지만 이것은 썩 좋은 방법은 아니다.

    그 이유로는 4 가지가 있다.

    • Interrupt는 privileged operation이다.
      • 즉, User Mode에서는 사용할 수가 없고 Kernel Mode에서만이 가능하다.
    • Multiprocessor에서는 사용할 수 없다.
      • MultiProcessor는 CPU가 2개 이상이라는 이야기인데 CPU1에서 T1이 진행되고 CPU2에서 T2가 진행된다고 하면 CPU1에서 Interrupt를 끈다 하더라도 CPU2가 있기 때문에 막을 방법이 없다.
    • Interrupt를 오래 끔으로써 문제가 발생한다.
      • Interrupt가 발생함으로써 장치를 관리하는 것도 있는데 이와 같은 방법으로 LOCK을 하고 그것이 오래되면 필요한 Interrupt 또한 발생하지 않으면서 문제가 발생한다.
    • Interrupt를 Control 하는 명령은 느리다.

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

    OS : Spin Lock  (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(2)  (0) 2022.04.28