묻공러
4-2] 프로세스 동기화: 동기화 기법
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (487)
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 (124)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
      • 유니티 (1)
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
CS/[혼자 공부하는] 운영체제

4-2] 프로세스 동기화: 동기화 기법

2023. 6. 7. 13:48

뮤텍스 락
상호 배제를 위한 동기화 도구 (자물쇠 역할)

뮤텍스 락의 단순한 형태: 전역 변수 하나, 함수 두 개
자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock
임계 구역을 잠그는 역할: acquire 함수
임계 구역을 잠금 해제하는 역할: release 함수


- 바쁜 대기 (busy waiting) 발생

 



세마포
좀더 일반화된 방식의 동기화 도구
뮤텍스 락은 공유 자원이 하나인 경우만 가능하지만
세마포는 공유 자원이 여러 개 있는 경우에도 적용 가능
세마포의 종류는 이진 세마포, 카운팅 세마포가 있는데 여기서는 카운팅 세마포를 지칭

세마포의 상호 배제를 위한 동기화 
세마포의 단순한 형태: 전역 변수 하나, 함수 두 개
임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원의 개수)를 나타내는 전역 변수 S
임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 wait 함수
임계 구역 앞에서 기다리는 프로세스에 가도 된다고 신호를 주는 signal 함수


예시)
세 개의 프로세스 P1, P2, P3가 두개의 공유 자원(S=2)에 P1, P2, P3 순서로 접근한다고 가정


- 바쁜 대기 (busy waiting) 발생

CPU 사이클 낭비

- 해결 방법
사용할 수 있는 자원이 없을 경우 대기 상태로 만듦
(해당 프로세스의 PCB를 대기 큐에 삽입)
사용할 수 있는 자원이 생겼을 경우 대기 큐의 프로세스를 준비 상태로 만듦
(해당 프로세스의 PCB를 대기 큐에서 꺼내 준비 큐에 삽입)

 

예시
세 개의 프로세스 P1, P2, P3가 두개의 공유 자원(S=2)에 P1, P2, P3 순서로 접근한다고 가정


세마포의 실행 순서 제어를 위한 동기화
세마포의 변수 S를 0으로 두고
먼저 실행할 프로세스 뒤에 signal 함수
다음에 실행할 프로세스 앞에 wait 함수를 붙이면 된다


매번 임계 구역 앞뒤로 wait(), signal()을 호출해야 한다면
실수로 인한 리스크가 너무 크게된다
ex. 세마포 누락한 경우, wait와 signal의 순서를 헷갈린 경우, wait와 signal을 중복 사용한 경우,...
따라서, 이러한 문제를 해결하기위해 등장한 모니터

 



모니터
사용자(개발자)가 다루기에 편한 동기화 도구

모니터의 상호 배제를 위한 동기화 
인터페이스를 위한 큐
공유 자원에 접근하고자 하는 프로세스를 (인터페이스를 위한) 큐에 삽입
큐에 삽입된 순서대로 (한번에 하나의 프로세스만) 공유 자원 이용


모니터의 실행 순서 제어를 위한 동기화
wait와 signal을 호출할 수 있는 조건 변수(condition variable) 이용
조건 변수: 프로세스나 스레드의 실행 순서를 제어하기 위해 사용하는 특별한 변수

조건변수 wait(): 대기 상태로 변경, 조건 변수에 대한 큐 삽입
조건변수 signal(): wait()으로 대기 상태인 조건 변수를 실행 상태로 변경


모니터 안에는 하나의 프로세스만이 있을 수 있기에
아래와 같은 두가지 방식 중 하나로 관리
1. wait()를 호출했던 프로세스는 signal()을 호출한 프로세스가 모니터를 떠난 뒤에 수행을 재개
2. signal()을 호출한 프로세스의 실행을 일시 중단하고 자신이 실행된 뒤에
다시 signal()을 호출한 프로세스의 수행을 재개

따라서,
특정 프로세스가 아직 실행될 조건이 되지 않았을 때에는 wait를 통해 실행을 중단하고
특정 프로세스가 실행될 조건이 충족되었을 때에는 signal을 통해 실행을 재개하는 방식을 가진 것이다

저작자표시 비영리 변경금지 (새창열림)

'CS > [혼자 공부하는] 운영체제' 카테고리의 다른 글

5-2] 교착상태: 교착 상태 해결 방법  (0) 2023.06.08
5-1] 교착상태: 교착 상태란  (0) 2023.06.07
4-1] 프로세스 동기화: 동기화란  (0) 2023.06.06
3-2] CPU 스케줄링: CPU 스케줄링 알고리즘  (0) 2023.06.06
3-1] CPU 스케줄링: CPU 스케줄링 개요  (0) 2023.06.05
'CS/[혼자 공부하는] 운영체제' 카테고리의 다른 글
  • 5-2] 교착상태: 교착 상태 해결 방법
  • 5-1] 교착상태: 교착 상태란
  • 4-1] 프로세스 동기화: 동기화란
  • 3-2] CPU 스케줄링: CPU 스케줄링 알고리즘
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.