개발조아

프로세스 동기화 본문

CS/OS

프로세스 동기화

개발조아 2021. 10. 18. 11:26
728x90
  • 경쟁 상태(Race Condition)
    • 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 순서에 따라 영향을 줄 수 있는 상태
      • 동시 접근 시 자료의 일관성을 해치는 결과가 나타남
    • Race Condition이 발생하는 경우
      • 커널 작업을 수행하는 중 인터럽트 발생
        • 상황 : 운영체제가 커널모드에서 작업하다 인터럽트가 발생하여 같은 데이터를 조작하는 경우
        • 해결방안 : 커널 모드 시 인터럽트가 발생해도 제어권이 넘어가지 않도록 한다.
      • 프로스세가 System Call를 호출하여 커널모드로 수행 중일 때 ContextSwitching이 일어날 경우
        • 상황 : A 프로세스가 System Call 호출하여 커널모드로 커널의 변수를 조작하다 CPU 사용시간이 다되 ContextSwitching이 일어났다. 다음 프로세스가 동알한 System Call을 호출하여 동일한 데이터를 조작할 경우 발생한다.
        • 해결방안 : 커널 모드에서 작업하는 경우 CPU 제어권이 넘어가지 않도록 한다.
      • 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 경우
        • 상황 : 여러개의 프로세서가 동시에 커널 내부 공유 데이터에 접근하여 조작하는 경우
        • 해결방안 : 공유 데이터에 접근할 때 lock/unlock을 하도록 한다.
  • 임계 구역(Critical Section)
    • 여러 프로세스가 데이터를 공유하며 수행할 때, 그 공유하는 데이터에 접근하는 코드가 있는 부분
    • 공유 데이터에 여러 프로세스가 동시에 접근할 때 문제가 발생할 수 있으므로 한 프로세스 작업 중일 때 다른 프로세스는 접근하지 못해야한다.
    • 임계 구역 문제
      • 임계 구역에 여러 프로세스가 동시에 접근할 때 방생하는 문제
      • 문제 해결을 위한 조건
        • 상호배제(Mutual Exclusion)
          • 임계 구역에 한 프로세스가 진입했다면 다른 프로세스는 진입할 수 없어야한다.
        • 진행(Progress)
          • 임계 구역에 진입한 프로세스가 없고, 별도의 동작이 없는 프로세스만 임계 구역에 진입 후보가 될 수 있어야한다.
        • 유한 대기(Bounded Waiting)
          • 한 프로세스가 임계 구역에 진입 신청한 후 받아들여질때까지, 다른 프로세스가 임계 구역에 들어가는 횟수가 제한되어야한다.(기아방지)
      • 해결 방안
        • 스핀락
          • 공유 자원에 대한 여러 프로세스의 접근을 Lock을 걸어 막는 것
          • 만약 Lock가 걸린 상태라면 해당 프로세스는 무의미한 반복을 통해 Lock가 해제 될 때까지 기다림
            • Busy Waiting
        • 뮤텍스
          • 공유 자원에 대한 여러 프로세스의 접근하는 것을 막는 것
          • 오직 하나의 프로세스만이 임계구역에 들어갈 수 있음
          • 임계구역에 들어갈 때 Lock를 걸어 다른 프로세스가 접근 못하도록 막음
          • 임계구역에서 나올 때 Lock를 해제하여 다른 프로세스가 접근할 수 있도록 함
          • 이미 Lock가 걸려있다면 해당 프로세스는 Sleep되었다가 Lock가 풀리면 Wakeup 되어 다시 프로세스가 실행 됨
        • 세마포어
          • 소프트웨어 기반 해결책
          • 공유 자원에 대한 여러 프로세스의 접근하는 것을 막는 것
          • 여러 프로세스가 임계구역에 들어올 수 있음
          • P, V 연산을 통해 S의 값을 조정하여 공유 자원에 대한 Lock 수행
          • S는 임계 구역에 진입 가능한 개수를 의미
          • P 연산(wait 연산)
            • 임계 구역을 들어가기 전에 수행
            • S 값을 확인하여 남아있다면 S - 1하고 임계구역에 들어간다.
            • 그렇지 않다면 계속 기다린다.
          • V 연산(singal 연산)
            • 임계 구역에서 작업을 마치고 빠져나올 때 수행
            • S 값을 증가시켜 다른 프로세스가 진입할 수 있도록 한다.
          • 카운팅 세마포어
            • S가 2 이상인 값을 가진 세마포어로, 여러 프로세스가 임계구역에 접근할 수 있다.
          • 이진 세마포어
            • S가 1인 경우만 허용하며, 임계 구역에는 하나의 프로세스만 접근할 수 있다.
        • 뮤텍스와 세마포어의 차이
          • 뮤텍스는 동기화 대상이 하나, 세마포어는 동기화 대상이 여러개
            • 뮤텍스는 공유자원에 대해 오직 하나의 프로세스만 접근 가능
            • 세마포어는 공유자원에 대해 여러 프로세스가 접근 가능
          • 접근 권한 상태 변경
            • 뮤텍스는 임계구역에 들어선, 현재 실행중인 프로세스만이 lock를 해제할 수 있음
            • 세마포어는 다른 프로세스가 세마포어를 해제할 수 있음
              • 여러개의 프로세스가 하나의 S값으로 세마포어를 제어하므로

'CS > OS' 카테고리의 다른 글

메모리 관리  (0) 2021.10.18
프로세스 스케줄링  (0) 2021.10.18
교착상태(DeadLock)  (0) 2021.10.18
프로세스와 쓰레드  (0) 2021.10.18
운영체제란  (0) 2021.10.17
Comments