프로세스 동기화
프로세스 간 통신
💡 프로세스는 독립적으로 실행되기도 하지만, 다른 프로세스와 데이터를 주고받으며 통신을 하는 경우도 있다.
프로세스의 통신
한 컴퓨터 내에 존재하는 다른 프로세스와의 통신
네트워크로 연결 된 다른 컴퓨터의
프로세스의 통신의 종류
한 컴퓨터 내에서 프로세스 간 통신
파일 : 두 프로세스가 하나의 파일을 읽고, 쓰는 방법
파이프 : 운영체제가 생성한 파이프를 이용해 데이터를 읽고 쓰는 방법
한 프로세스 내에서 쓰레드 간 통신
쓰레드가 공유하는 코드, 데이터, 힙 영역 중 데이터 영역에 있는 전역변수나 힙을 이용하면 통신할 수 있다.
네트워크를 이용한 통신
운영체제가 제공하는 소켓통신 이용
다른 컴퓨터에 있는 함수를 호출하는 **RPC(원격 프로시저 호출)**을 이용
공유자원
프로세스간 통신을 할 때 공동으로 이용하는 변수나 파일들
여러 프로세스가 공유자원을 공유하기 때문에 여러가지 문제가 존재한다.
프로세스의 접근 순서에 따라 결과가 달라질 수 있다.
컨텍스트 스위칭으로 시분할 처리를 하기 때문에, 어떤 프로세스가 먼저 실행되는지 예측하기 힘들다.
연산결과를 예측하기 힘들다.
공유자원에서 발생한 문제를 동기화문제라고 한다.
임계구역
여러 프로세스가 동시에 사용하면 안 되는 구역이다.
경쟁조건(Race condition) : 공유자원을 서로 사용하기 위해 서로 경쟁하는 것
임계구역에서 발생하는 문제를 해결하기 위해서는 상호배제(mutual exclusion) 매커니즘이 필요하다.
상호배제 매커니즘의 요구사항
임계 영역에는 동시에 하나의 프로세스만 접근한다.
동시에 여러 개의 요청이 있더라도, 하나의 프로세스의 접근만 허용한다.
임계 구역에 들어간 프로세스는 최대한 빨리 나와야한다. (다른 프로세스의 대기 시간이 길어지기 때문에)
세마포어
상호배제 매커니즘 중 하나
정수형 변수이며,
wait()
이 실행되면signal()
이 실행되기 전까지는 공유자원을 사용하는 코드는 실행할 수 없다.공유자원에 여러 프로세스가 접근하지 못하도록 하는 것으로, 동기화 문제가 발생하지 않는다.
단, wait()과 signal()의 순서를 잘못 호출한다면, 세마포어를 잘못 사용할 가능성이 존재한다.
모니터
세마포어의 단점을 해결한 상호배제 매커니즘이다.
모니터의 구현이 완벽하다면, 프로그래머는 세마포어처럼 wait()이나 signal()을 임계영역에 감싸지 않아도 된다. (편리하고 안전한 개발)
운영체제가 처리하는 것이 아니라, 프로그래밍 언어 차원에서 지원하는 방법이다.
자바의 모니터
ProcessA가 increase()를 실행한다면, 다른 프로세스는 synchronized키워드가 붙은 모든 함수는 실행할 수 없다. → 완벽한 상호배제
Last updated