ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] Synchronization과 Asynchronization
    CS/Operating System 2021. 9. 20. 20:26

    이 포스팅은 세미나를 위해 https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS를 참고하여 작성하였습니다.

     

    출처: https://velog.io/@chjh121/%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4

     

    Synchronization vs Asychronization

    • Synchronization: 메소드를 실행했을 때 값이 반환되기 전까지 blocking되어 메소드 실행과 동시에 반환 값이 기대되는 경우를 말한다.
    • Asynchronization: 메소드를 실행했을 때 blocking되지 않고 이벤트 큐에 넣거나 백그라운드 스레드에게 해당 task를 위임하고 다음 코드를 수행하기 때문에 반환 값을 바로 반환하지 않는다.

     

    프로세스 동기화

     

    Critical Section (임계영역)

    • 동일한 자원을 동시에 접근하는 작업 (e.g., 공유하는 변수 사용, 동일 파일 동시 수정 등)을 실행하는 코드 영역

    Critical Section Problem (임계영역문제)

    • 프로세스들이 Critical section을 함께 사용할 수 있는 프로토콜을 설계하는 것
    • Requirements
      • Mutual Exclusion (상호 배제)
        어떤 프로세스가 Critical Section에서 실행 중이라면 다른 프로세스들은 그들이 가진 해당 Critical Section에서 실행될 수 없다.
      • Progress (진행)
        Critical Section에서 실행 중인 프로세스가 없고, Critical Section에 진입하고자 희망하는 프로세스가 존재한다면, Critical Section에 진입할 프로세스가 무기한 연기될 수 없다. → deadlock free
      • Bounded Waiting (한정된 대기)
        각 프로세스는 유한한 수의 시도 후에 Critical Section에 진입할 수 있어야 한다. → starvation free

    해결책

     

    Lock

    • 하드웨어 기반 해결책
    • 동시에 공유 자원에 접근하는 것을 막기 위해 C.S.에 진입하는 프로세스는 Lock을 획득하고 C.S.을 빠져나올 때, Lock을 방출함으로써 동시에 접근하지 못하도록 한다.
    • 한계: Multiprocessor 환경에서는 시간적인 효율성 측면에서 적용할 수 없다 (?)

    Semaphores

    • 소프트웨어 상에서 C.S. 문제를 해결하기 위한 동기화 도구
    • 종류
      • Counting Semaphore: 가용한 개수를 가진 자원에 대한 접근 제어용으로 사용되며, 세마포는 그 가용한 자원의 개수로 초기화 된다. 자원을 사용하면 세마포가 감소, 방출하면 세마포가 증가 한다.
      • Binary Semaphore: MUTEX라고도 부르며, 0 과 1 사이의 값만 가능하며, 멀티프로세스들 사이의 C.S. 문제를 해결하기 위해 사용한다.
    • 단점
      • Busy Waiting
        • Spin lock이라고 불리는 Semaphore 초기 버전에서 Critical Section에 진입해야하는 프로세스는 진입 코드를 계속 반복 실행해야 하며, CPU cycle이 낭비됨.
        • 일반적으로는 Semaphore에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해 block시킨 뒤, Critical Section에 자리가 날 때 다시 깨우는 방식을 사용한다. 이 경우 Busy waiting으로 인한 시간낭비 문제가 해결된다.
        •  Busy waiting을 할 경우 CPU cycle이 낭비된다는 단점이 있지만, C.S.에 진입하지 못한 프로세스를 block하는 경우 2번의 context switch가 일어나게 된다.
          만약 lock을 짧은 시간 동안 소유하고 있는 경우엔 busy waiting이 효율적일 수 있다
          → tradeoff: context switch time (block) vs busy waiting
    • 문제점 (수정 必)
      • Deadlock
      • Priority Inversion
      • Incorrect Use of Semaphores

    모니터

    • 고급 언어의 설계 구조물로서, 개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태이다.
    • 공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리한다.
      (Semaphore는 직접 키 해제와 공유자원 접근 처리가 필요하다. )

    'CS > Operating System' 카테고리의 다른 글

    [OS] Critical Section Problem S/W Solution - Peterson's Solution  (0) 2021.12.01
    [OS] Synchronization과 Critical-Section Problem  (0) 2021.12.01
    [OS] CPU Scheduler  (0) 2021.09.20
    [OS] Scheduler  (0) 2021.09.20
    [OS] Multithread  (0) 2021.09.20

    댓글

Designed by Tistory.