[OS] Semaphore

2024. 4. 29. 18:02·OS

세마포어

멀티프로그래밍 환경에서 공유자원에 대한 접근 제어를 하는 방법으로 사용되며, 1개의 공유되는 자원에 제한된 개수의 프로세스(Process), 또는 스레드(Thread)만 접근할 수 있도록 한다. 
  •  value와 wait Q를 가짐초기화 중요초기 값 적절하게 설정해야 함구슬 주머니에서 구슬을 넣고 빼는 동작과 비슷
  • 초기화 중요
    • 초기 값 적절하게 설정해야 함
  • 구슬 주머니에서 구슬을 넣고 빼는 동작과 비슷

 

☁️ sem_wait

  • value 값 감소(구슬을 가져가는 것)
  • wait Q에 넣고 sleep

☁️ sem_post

  • value 값 증가(구슬을 넣는 것)
  • wait Q에서 제거하여 Ready Q로 옮김

 

이진 세마포어(락)

  • 초기 value 값 1로 설정

 

순서 보장 세마포어

  • 초기 value 값 0으로 설정
  • 컨디션 변수를 사용했던 것과 유사하게 동작

 

Producer/Consumer 문제 (유한 버퍼 문제)

  • 세마포어 value가 컨디션 변수의 count를 대신함
  • empty 세마포어의 초기 value 값 MAX(producer 개수)로 설정
  • full 세마포어의 초기 value 값 0으로 설정
  • put, get에 의해 경쟁 조건 발생 ← atomic 하지 않음
  • mutex lock 설정
    • 이진 세마포어이므로 초기 value 값 1로 설정
    • wait 할 때 lock을 가지고 sleep하면 안 됨 ← Deadlock 발생
    • lock, unlock을 wait, post 사이에 들어오도록 바꿈

 

Dining Pilosopher

  • 왼쪽 포크 잡기 → 오른쪽 포크 잡기 → 식사 → 왼쪽 포크 내려놓기 → 오른쪽 포크 내려놓기
  • 포크를 잡는 순서에 의해 종속성이 생김 → Deadlock
  • 마지막 쓰레드만 오른쪽 포크를 잡고 왼쪽 포크를 잡으면 해결

 

제마포어

  • 컨디션 변수 + 세마포어
  • value 값을 음수가 안되도록 구현
  • value가 음수가 되면 sleep

 

RW lock

  • Bad
    • Read 실행 중 Write가 들어온 후 새로운 Read 들어와도 새로운 Read 실행
  • Good
    • Read 실행 중 Write가 들어온 후 새로운 Read가 들어오면 Sleep
    • wake는 Write 먼저 깨우며 Read만 남았을 때는 Read 모두 동시에 깨울 수 있음
728x90
반응형

'OS' 카테고리의 다른 글

[OS] Hard Disk Drives  (1) 2024.04.29
[OS] Common Concurrency Problems  (1) 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] Common Concurrency Problems
  • [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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바