Home 프로세스 동기화
Post
Cancel

프로세스 동기화

프로세스 간 통신

프로세스는 독립적으로 실행되지만 다른 프로세스와 통신을 할수도 있다.

  • 한 컴퓨터 내에서 프로세스간 통신
    • 파일로 통신한다 : 하나의 파일을 여러개의 프로세스가 읽고 쓰는 방법
    • 파이프로 통신한다 : 운영체제가 만든 파이프를 통해 프로세스가 읽고 쓴다.
  • 쓰레드를 이용해서 통신
    • 한 프로세스 내에서 쓰레드간에 통신한다.
      • 쓰레드는 Code, Data, Heap 영역을 공유하고 스택만 각각 존재하는데, Code의 전역변수나 Heap을 이용하면 통신이 가능한다.
  • 네트워크를 이용해서 통신
    • 운영체제가 제공하는 소켓통신이나 다른 컴퓨터의 메소드를 호출하는 RPC 방법이 존재한다.

공유자원과 임계구역

  • 공유자원: 프로세스 간 통신을 할때 공동으로 이용하는 변수 혹은 파일 프로세스들이 공통으로 사용하기때문에 실행되는 프로세스의 순서에 따라 값이 변할 수 있고, 시분할 처리방식으로 어떤 프로세스가 먼저 처리 되는지도 예측하기 힘들다.
  • 임계구역: 여러 프로세스가 동시에 사용하면 안되는 구역
    • 상호 배제
      • 임계영역엔 동시에 하나의 프로세스만 접근한다.
      • 여러 요청에도 하나의 프로세스 접근만을 허용한다.
      • 임계구역에 들어간 프로세스는 빠르게 나와야 한다.
  • 경쟁조건: 공유자원을 서로 사용하기 위해 경쟁하는 것

세마포어

: 실제 정수형 변수로 대기큐에 있는 프로세스가 공유자원을 사용할때 세마포어를 통해 다른 프로세스가 실행되지 않게 할 수 있다.

  • 세마포어는 여러개의 값을 가질수있다.
1
2
3
4
5
6
7
//세마포어 선언
int s = 1 
wait(s); //cpu가 넘어가도 다른 작업이 실행되지 않는다.

비즈니스 로직 // 다시 cpu가 넘어오고 signal이 될때까지 계속 실행된다.

signal(s); //작업이 끝났음을 의미하며 다른 작업이 실행된다.
  • 세마포어를 이용하게 되면 공유자원에 여러 프로세스가 동시에 접근하지 못하기때문에 동기화 문제가 발생하지 않는다.

모니터

: 프로그래밍 언어차원에서 지원하는 방법으로 세미포어의 단점을 해결하는 상호배제 매커니즘이다. 예를들어 java는 아래와 같이 synchronized 를 지원하는데, 프로세스가 synchronized 메소드를 사용하게 되면 다른 프로세스들은 synchronized 메소드를 사용하지 못한다.

  • sum 함수가 실행중이면 minus함수는 실행되지 않는다.
1
2
3
4
5
6
7
8
9
10
11
public class A {

	synchronized void sum() {
	 sum += a;
	}

	synchronized void minus() {
		 sum -= a;
		}

}
This post is licensed under CC BY 4.0 by the author.

CPU 스케줄링

데드락