👨‍🎓
Today I Learned
  • Today-I-Learend
  • 🍎WWDC
    • Developer Tools
      • Testing in Xcode
    • UIKit
      • UIDiffableDataSource
        • [WWDC 19] Advances in UI Data Sources
      • [WWDC2019] Advances in CollectionView Layout
  • 자료구조
    • Heap 자료구조
  • Clean code
    • 네이밍
    • 주석과 포맷팅
    • 함수
    • 클래스
    • 에러 핸들링
    • 가독성 높이기
    • 객체지향
  • Network
    • RestAPI
  • Swift
    • DateType
    • ARC
    • Availablity
    • KeyPath
    • Network
    • Never타입
    • Result
    • Selector
    • 검증함수
    • 메타타입
    • 동시성 프로그래밍
    • 메모리 안전
    • 에러처리
    • 접근제어 (Access Control)
    • 제네릭
    • 주요 프로토콜
  • 알고리즘
    • 그래프
    • 기초 알고리즘
    • 누적합(Prefix)
    • 복잡도
    • 비트마스킹
  • 운영체제
    • 운영체제의 개요
    • 프로세스와 스레드
    • CPU 스케줄링
    • 프로세스 동기화
    • 교착상태
    • 07. 메모리
    • 08.가상 메모리
    • 입출력 장치
    • 파일 시스템
  • UIKit
    • UITableView xib으로 만들어보기
  • 🖊️정보 기록
    • 코코아팟 배포하는 방법
  • iOS Project
    • 채팅 앱 만들기
      • Trouble shooting
      • 1. 디자인
      • 2. AutoLayout
    • 날씨 조회 어플리케이션
      • Figma를 이용한 UI 설계
      • TableView 연결하기
      • Networking
    • MVC -> MVVM으로 구조 변경해보기
      • MVC
      • MVVM
    • OAuth Project
      • 로컬 호스트를 이용한 로그인 페이지 제작
      • Github의 OAuth App 설정
    • Rest API 프로젝트
      • UI설계 (with Figma)
      • Network Model
      • MVVM 구조 전환
  • 🕶️UIKit
    • Compositional Layout
Powered by GitBook
On this page
  • 교착상태 (데드락)
  • 교착상태의 예시
  • 교착상태의 필요조건
  • 교착상태의 해결 방법
  • 교착상태 예방 (deadlock avoidance)
  • 교착상태 검출 방법
  1. 운영체제

교착상태

교착상태 (데드락)

💡 여러 프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가, 아무도 작업을 진행하지 못하는 상태이다. 즉, 교착상태는 공유자원 때문에 일어나는 현상이다. (특정 자원을 여러 프로세스가 공유하지 않는다면, 교착상태는 발생하지 않는다.)

교착상태의 예시

  • 원형 탁자에 세 개의 음식과, 세 개의 포크, 세 명의 사람이 있다. 음식을 먹기 위해서는 반드시 포크 두 개를 사용해야한다.

  • 이런 상황에서 세 명의 사람이 각자 포크를 하나씩 들어서 아무도 음식을 먹지 못하는 상태를 교착상태라고 한다.

교착상태의 필요조건

💡 필요 조건 중 한 가지라도 충족되지 않으면, 교착상태는 발생하지 않는다. 이에 필요 조건을 활용해 교착상태를 “예방”하려고 하였으나, 제약이 많고 비효율적이었다. 이에 교착상태에 빠진 후 해결하는 방법을 사용하게 되었다.

  1. 상호배제

    • 어떤 프로세스가 하나의 리소스를 점유했다면, 다른 프로세스와 공유할 수 없다.

      (내가 집은 포크는 다른 사람이 쓸 수 없다)

  2. 비선점

    • 프로세스 A가 자원을 점유했을 때, 프로세스 B가 해당 자원을 뺏을 수 없다.

      (내가 먼저 든 포크는, 다른 사람이 뺏어갈 수 없다)

  3. 점유와 대기

    • 프로세스가 리소스A를 가진 상황에서, 또 다른 리소스B를 기다리는 상태여야한다.

      (하나의 포크가 더 필요한 상황)

  4. 원형 대기

    • 점유와 대기를 하는 프로세스들이 원형을 이루고 있어야한다.

      (서로가 서로의 포크를 원하고 있어야한다.)


교착상태의 해결 방법

  1. 교착상태의 예방

  2. 교착상태 검출 후 해결

교착상태 예방 (deadlock avoidance)

  • 은행원 알고리즘 등을 사용하여 교착상태가 발생하지 않는 수준만 자원을 할당하는 방식이다.

    • 프로세스가 요청하는 프로세스의 수 뿐만 아니라, 최대 요청 수 및 운영체제가 가지고 있는 자원의 수를 비교하며 안정상태, 불안정상태로 분류한다.

    • 운영체제는 최대한 안정상태로 유지하고자 한다.

    • 불안정상태에 있더라도, 무조건 교착상태에 빠지는 것이 아니라 단순히 확률이 높아지는 것이다. (최대 요청개수를 요청하지 않을 가능성이 존재하기 때문이다) =

  • 운영체제는 위 방법을 위해 다음과 같은 정보를 알고 있어야한다.

    • 시스템의 총 자원 (전체 자원의 수)

    • 프로세스의 최대 요구자원

    • 프로세스의 요구자원

    ⇒ 남은 자원을 가지고 교착상태에 빠지지 않을 수 있을지 판단하는것이다.

  • 교착상태를 회피하기는 적절하지만, 오버헤드가 발생하므로 비싸고 비효율적이다. (불안정상태라고 항상 교착상태가 발생하는 것은 아니므로)

교착상태 검출 방법

💡 **교착상태 해결 방법 :** 일정 시점마다 체크포인트를 만들어 작업을 저장하고, 교착상태가 발생한다면 해당 체크포인트로 롤백하여 교착상태를 해결한다.

  1. 가벼운 교착상태 검출

    • 타이머를 이용한다.

    • 프로세스가 일정시간동안 작업을 하지 않는다면, 교착상태라고 판단한다.

  2. 무거운 교착상태 검출

    • 자원 할당 그래프를 이용한다.

    • 운영체제는 프로세스가 어떤 자원을 사용하는지, 요청하는지 확인하며, 해당 그래프에 순환구조가 생긴다면 교착상태를 일으킨 프로세스를 종료시킨다. (체크포인트로 롤백)

    • 해당 방법은 운영체제가 지속적으로 자원 할당 그래프를 유지하고 검사해야하는 오버헤드가 발생하지만, 가벼운 교착 상태 검출에서 발생하는 억울하게 종료되는 프로세스는 발생하지 않는다.

Previous프로세스 동기화Next07. 메모리

Last updated 2 years ago