1. 교착상태

  1. 상호 배제에 의해 나타나는 문제점
  2. 둘 이상의 프로세서들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 무한정 대기
  1. 상호 배제
    1. 한번에 한개의 프로세스만이 공유 자원을 사용할 수 있어야 함
  2. 점유 대기
    1. 최소 하나의 자원 점유 && 다른 프로세스에 할당 되어있는 자원 점유 위해 대기하는 프로세스 존재
  3. 비선점
    1. 다른 프로세스에 할당된 자원을 사용이 끝날 때 까지 강제로 빼앗을 수 없어야 함
  4. 환형대기
    1. 공유 자원, 공유자원사용을 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당 된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 함

방어 기법

면접 질문

  1. 뮤텍스와 세마포어의 차이는?(상호 배제 조건을 해결하기 위한 방법)

    1. 뮤텍스
      1. 멀티 스레드실행하는 환경에서 자원에 대한 접근제한을 강제하기 위한 동기화메카니즘
      2. boolean 타입의 lock 변수를 사용하여 자원에 대한 접근 제한
      3. 임계 영역의 자원에 접근하면 해당 스레드는 락을 걸음
      4. 다른 스레드가 공유자원에 접근시 block 후 대기 큐로 보냄
      5. 공유 자원사용을 마친 스레드는 lock을 해제, lock 해제는 lock을 건 스레드만 해제할 수 있음

    b. 세마포어

    1. 변수를 통해 접근 가능한 스레드 제한(뮤텍스는 1개스레드 자원만 사용)

    2. 세마포어는 세마포어 변수만큼 공유자원 접근 가능

    3. 세마포어 변수를 통해 wait, signal을 관리한다(0이상이 정수값을 갖음)

    4. 세마 포어변수가 1개일 경우 뮤텍스 처럼 사용 가능(세마표어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다)

    5. 뮤텍스와 달리 lock을 걸지 않는 스레드도 signal을 통해 lock을 해제할 수 있다.

    6. 경쟁상태, 교착상태, 기아상태 차이는?

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

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

        교착 상태의 조건 : 아래 4가지 조건을 모두 충족시켜야 함

        1. 상호배재 : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다.
        2. 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
        3. 비선점 : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
        4. 순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
        • 해결 방안
          1. 예방 : 교착 상태 발생 조건 중 하나를 제거하면서 해결(자원 낭비 심함)
          2. 회피 : 교착 상태 발생 시 피해나가는 방법 (ex. 은행원 알고리즘)
          3. 탐지 : 자원 할당 그래프를 통해 교착 상태를 탐지(그에 대한 오버헤드 발생함)
          4. 회복 : 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법
      3. 기아상태(Starvation) : 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태

      • 해결 방안

        스케줄링으로 해결 (우선 순위를 변경해준다.)

      컨텍스트 스위칭

      1. 프로세스 : 자원을 공유하지 않음
      2. 스레드 : 자원을 공유함
        1. 한 프로세스 내부의 메모리를 공유함 이때 stack을 제외한 부분은 모두 공유함 따라서 스레드간 문맥 교환시 stack 부분만 바꾸면 되기 때문에 오버헤드가 덜 걸린다

    어떤 프로그램이 실행되고 있는 와중에 디스크 입력 요청이 발생할 경우 어떤 일이 일어나는지 설명해보세요.