그림으로 쉽게 배우는 운영체제 - 섹션3 프로세스 동기화

이지섭·2023년 6월 27일
0

섹션3 프로세스 동기화

  • 한 컴퓨터 내에서 프로세스 간 통신하고,
    다른 컴퓨터와 네트워크로 연결되어 프로세스 간 통신도 가능하다.
  • 프로세스간 통신 종류
    • 한 컴퓨터 내에서
      • 파일 - 하나의 파일을 같이 읽고 쓴다
      • 파이프 - 운영체제가 생성한 파이프를 통해 데이터를 주고받는다
      • 쓰레드 간 통신 - 데이터, 힙 영역 공유
    • 네트워크 이용
      • 소켓 통신
      • RPC - 원격 프로시저 호출?
  • 공유자원 - 프로세스 간 통신시 공동으로 이용하는 변수 또는 파일
    • 동기화 문제 발생!
      • 여러 프로세스가 공유중이기 떄문에, 프로세스 접근 순서에 따라 결과가 달라질 수 있다!
      • 컨텍스트 스위칭으로 시분할 처리 되기 때문에 프로세스 실행 순서를 예측하기 힘듬
    • 해결
      • 임계 구역 지정 - 여러 프로세스가 동시에 사용하면 안되는 영역을 지정
        • 상호 배제 매커니즘
          • 임계영역엔 동시에 하나의 프로세스만 접근한다
          • 여러 요청에도 하나의 프로세스의 접근만 허용한다.
          • 임계구역에 들어간 프로세스는 최대한 빠르게 나와야한다.
            (다른 프로세스들이 기다리니까)
        • 경쟁 조건 - 공유자원을 서로 사용하기 위해 경쟁하는 것
  • 세마포어
    • 두 명의 직원(프로세스)이 하나의 프린트(공유자원)를 사용
      • 경쟁 조건 - 서로 먼저 출력하려고 경쟁
        • 서로 겹치는 상황을 막아야 한다
      • 따로 프린터실을 두어 그곳에 PC와 프린터기를 둔다
        • 방 밖에는 열쇠(세마포어) 관리자(운영체제)가 있다
        • 직원은 열쇠를 받아 사용 후 열쇠를 관리자에게 반납
        • 그러면 다음 직원이 차례대로(대기 큐) 프린터실을 사용
      • 세마포어는 정수형 변수(s)이고, (여러 개도 가능)
        wait(s) (세마포어를 획득할 때 까지 큐에서 대기) 와
        signal(s) (세마포어 반납) 를 사용하여 경쟁을 막음
    • 세마포어의 단점
      • wait()과 signal()의 순서 실수
        • 모니터를 사용하여 해결
  • 모니터
    • 세마포어의 단점을 해결한 상호배제 메커니즘
    • 운영제체 차원이 아닌, 프로그래밍 언어 차원에서 지원하는 방법이다.
      • 대표적으로 Java
public class Health {

	private int health = 100;

	// 동시에 여러 프로세스에서 실행시킬 수 없다.
	synchronized void increase(int amount) {
		health += amount;
	}

	// 어떤 프로세스가 increase를 실행중이라면,
	// 같이 synchronized가 붙은 decrease도 실행시킬 수 없다.
	// 반대도 마찬가지.
	synchronized void decrease(int amount) {
		health -= amount;
	}
}

출처 : 인프런, 그림으로 쉽게 배우는 운영체제

profile
Stop thinking. Just do it.

0개의 댓글

관련 채용 정보