본문 바로가기

CS

[OS]스레드 동기화 기법

스레드 동기화란?


  • 쓰레드의 실행순서를 정의하고, 이 순서에 반드시 따르도록 하는 것(실행순서의 동기화)
  • 특정 메모리영역에 둘 이상의 쓰레드가 동시에 접근할 때에는 문제가 발생(메모리 접근에 대한 동기화)

스레드 동기화 구분


유저 모드 동기화

  • 동기화 시 커널의 힘을 빌리지 않는 동기화로 커널모드로 전환되지 않아 성능상 이점이 있지만 동시에 기능상 제한도 있음
  • 크리티컬 섹션 기반의 동기화 : 열쇠기반, 예시) 화장실에 들어가기 전 열쇠로 문을 열고 들어가고, 나와서는 다른 사람을 위해 화장실 앞에 열쇠를 둔다
  • 인터락 함수 기반의 동기화: 변수 하나에 대한 동기화를 할 때 유용

커널 모드 동기화

  • 커널에서 제공하는 동기화 기능을 활용하는 방법
  • 뮤텍스 기반의 동기화
  • 세마포어 기반의 동기화

크리티컬 섹션과 뮤텍스 차이

  • 크리티컬 섹션: 유저 객체, 가볍고 빠르지만 하나의 프로세스 내의 쓰레드 사이에서만 동기화가 가능
  • 뮤텍스: 커널 오브젝트, 무겁지만, 여러 프로세스의 스레드 사이에서 동기화 가능, 프로세스 다중 실행 방지는 크리티컬 섹션으로는 불가능

참고

  • 커널 오브젝트 : 운영체제에서 리소스(Resource : 프로세스, 쓰레드, 파일)들을 관리하기 위한 데이터를 저장하는 메모리 블록