[OS] Common Concurrency Problems

2024. 4. 29. 18:05·OS

병행성 관련 버그

1. Deadlock이 아닌 버그

  • 원자성 위반 버그
    • 쓰레드의 코드 행 간에 interrupt가 걸려서 불필요한 변화가 생기는 것
    • 해결
      • lock 사용하여 상호 배제
  • 순서 위반 버그
    • 쓰레드들의 순서가 바뀌면 에러
    • 컨디션 변수 사용

2. Deadlock 관련 버그

  • 발생 이유
    • 코드가 많아지면 구성 요소 간 복잡한 의존성 발생
    • 캡슐화
  • Deadlock 조건
    1. 상호 배제(Mutual Exclusion): 쓰레드가 자신이 필요로 하는 자원에 대한 독자적인 제어권 주장
      • ex) lock 획득
    2. 점유 및 대기(Hold-and-wait): 쓰레드가 자신에게 할당된 자원을 점유한 채로 다른 자원을 대기
      • ex) 이미 lock을 얻었는데 다른 lock을 위해 대기
    3. 비 선점(No preemption): 자원을 점유하고 있는 쓰레드로부터 자원을 강제적으로 빼앗을 수 없음
      • ex) lock을 얻으면 일이 끝날 때까지 lock을 뺏기지 않음
    4. 환형 대기(Circular wait): 각 쓰레드는 다른 쓰레드가 요청한 하나 또는 그 이상의 자원을 갖고 있는 쓰레드들의 순환 고리가 있음
      • ex) cycle을 이룸
  • Deadlock 예방
    • Deadlock 조건을 하나만 만족하지 않아도 예방
    • Circular wait
      • 전체 순서(total ordering)
        • lock을 얻는 순서를 하나로 정의
      • 부분 순서(partial ordering)
        • lock의 주소 값을 비교하여 큰 경우, 작은 경우 나눠서 정의
        • Dining Philosopher 예제 같은 경우, 마지막 사람만 순서를 변경
    • Hold-and-wait
      • atomic하게 만들어 상호 배제 되도록 하기 위해 전역 lock을 정의
    • No preemption
      • 상황에 따라 lock을 얻고 놓는 것을 반복
      • 무한 반복할 수 있는 문제 발생 가능
    • Mutual Exclusion
      • lock 사용 X
      • atomic하게 구 현(ex. LD, ADD, ST를 한번에)
  • Deadlock 회피
    • 스케줄링
      • 병렬로 실행되면 Deadlock이 걸리는 쓰레드들은 같은 CPU를 쓰도록 배치
      • 하나의 CPU에 몰리게 되면 성능 저하
728x90
반응형

'OS' 카테고리의 다른 글

[OS] Hard Disk Drives  (1) 2024.04.29
[OS] Semaphore  (0) 2024.04.29
[OS] Condition Variables  (0) 2024.04.29
[OS] Locks  (0) 2024.03.31
[OS] Concurrency and Threads  (0) 2024.03.31
'OS' 카테고리의 다른 글
  • [OS] Hard Disk Drives
  • [OS] Semaphore
  • [OS] Condition Variables
  • [OS] Locks
nueos
nueos
  • nueos
    nueos 공부 기록
    nueos
  • 전체
    오늘
    어제
    • 분류 전체보기 (191)
      • 해커톤 (1)
      • 네이버 BoostCamp (6)
      • LG 유플러스 유레카 SW (3)
        • React (21)
        • TypeScript (2)
        • JavaScript (2)
        • HTML+CSS (5)
        • Spring (7)
        • Java (6)
        • SQL (2)
        • Algorithm (8)
        • CX (6)
        • Git (2)
        • 프로젝트 (2)
        • 스터디 (9)
        • 과제 (8)
        • 특강 (1)
      • React (3)
      • Next (0)
      • Javascript (2)
      • HTML (2)
      • CSS (9)
      • Algorithm (6)
      • Database (0)
      • OS (13)
      • C++ (24)
      • Python (1)
      • jQuery (1)
      • Django (1)
      • Git (1)
      • 개발 지식 (3)
      • 정보 보안 (22)
      • 포렌식 (1)
      • 암호 (2)
      • 기타 (4)
      • 패스트캠퍼스 FE 프로젝트십 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스택
    힙
    완전 탐색
    Queue
    디지랩챌린지
    제주지역혁신플랫폼지능형서비스사업단
    큐
    exhaustive search
    heap
    기술로바꾸는세상
    Stack
    디지털혁신
    제주해커톤
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
nueos
[OS] Common Concurrency Problems
상단으로

티스토리툴바