[OS] 경쟁상태, 교착상태, 기아상태

김진회·2023년 2월 8일
0

cs

목록 보기
14/14
post-thumbnail

1. 경쟁상태란? (Race Condition)

공유 자원에 여러 프로세스가 동시에 접근을 시도할 때, 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태

1) 발생 조건 및 해결 방안

1) 커널 작업 중 인터럽트가 발생하여 같은 데이터 조작할 때

  • 커널의 전역 변수는 모든 프로세스의 공유물이므로 경쟁 상태의 가능성이 있다.
    👉 커널 모드 작업 중에는 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하게 하면 된다.

2) 프로세스가 시스템 콜을 하여 커널 모드로 작업을 수행 중 문맥 교환이 발생할 때

  • 프로세스1이 커널 모드에서 데이터를 조작하는 중, 시간이 초과되어 CPU 제어권이 프로세스2로 넘어가 같은 데이터를 조작하는 경우
    👉 시간이 초과되어도 CPU 제어권이 다른 프로세스에게 넘어가지 않도록 하면 된다.

3) 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 경우

  • 멀티 프로세서 환경에서 2개의 CPU가 동시에 커널 내부의 공유 데이터에 접근하여 조작하는 경우
    👉 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대해 lock/unlock하면 된다.

2. 교착 상태란? (DeadLock)

두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 아무것도 완료되지 못하는 상태

1) 발생 조건

아래 4가지 조건을 모두 충족시켜야 발생

  1. 상호배재 : 하나의 프로세스가 자원을 사용중일 때 다른 프로세스는 그를 사용할 수 없다.

  2. 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.

  3. 비선점 : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.

  4. 순환대기 : 프로세스의 집합에서 순환형태로 자원을 대기하고 있어야 한다.

2) 해결 방안

  1. 예방 : 교착 상태 발생 조건 중 하나를 제거하면서 해결 👉 자원 낭비가 가장 심하다.

  2. 회피 : 교착 상태 발생 시 피해나가는 방법 👉 은행원 알고리즘

    은행원 알고리즘
    자원을 할당하면 문제가 발생하지 않는지 확인 후, 할당하는 방법
    
    단점
    할당할 수 있는 자원의 수와 사용자 수가 일정해야 함
    항상 불안전 상태를 방지해야 하므로 자원 이용도가 낮음
    최대 자원 요구량을 미리 알아야 함
    프로세스들은 유한한 시간 안에 자원을 반납해야 함
    👉 매우 복잡하고, 최대 자원 요구량을 미리 알기 힘들기 때문에 오버헤드가 크다. 현재 채택하고 있는 방식은 아니다.
  3. 탐지 : 자원 할당 그래프 혹은 알고리즘을 통해 교착 상태를 탐지

  4. 회복 : 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법


3. 기아상태란? (Starvation)

특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태

1) 해결 방안

에이징(Aging)을 통해 시간이 지나면 우선 순위를 낮춘다.


Reference

https://jhnyang.tistory.com/102

profile
SSAFY 7기. HMG. 협업, 소통, 사용자중심

0개의 댓글