프로그램: 디스크에 저장된 수동적 실체
프로세스: 메모리에서 실행중인 능동적 실체
프로세스 : 실행 중인 프로그램, OS가 자원을 할당하는 작업의 기본 단위
하나의 프로그램은 여러개의 프로세스로 구성될 수 있고, 사용자는 같은 프로그램을 여러개의 프로세스로 동시에 실행 시킬 수 있다
OS는 4가지 영역으로 구성된 가상 주소 공간을 각 프로세스에게 할당하여 독립적인 실행환경 보장
공유메모리 : 성능이 중요할 때 사용
메세지 패싱 : 동기화가 간단하고 안전한 통신이 필요할 때 사용
여러 프로세스가 함께 접근할 수 있는 공통의 메모리 공간을 OS가 만들어주는 방식
한 프로세스가 OS에 공유 메모리 공간 할당 요청
다른 프로세스들이 해당 공간에 연결
이후 커널의 개입없이 각 프로세스는 자신의 메모리처럼 해당 공간을 자유롭게 읽고 쓸 수 있음
장점: 커널을 거치지 않기 때문에 통신 속도가 빠름
단점: 동기화 문제 발생(한쪽이 데이터를 쓰는 도중에 다른 쪽에서 데이터를 읽으면 깨진 데이터가 보일 수 있다) - 락같은 동기화 기법 필요
프로세스들이 커널을 통해 메세지를 전달
장점: 커널이 통신을 관리해주므로 안전하고 동기화가 비교적 쉽다
단점: 매번 커널을 거쳐야하므로(시스템 콜 오버해드), 공유 메모리 방식보다 느리다
구현 방식 종류
연결 방식:
직접 통신: 통신할 프로세스를 명시적으로 지정
간접 통신: 메일 박스 또는 포트라는 중간 매개체를 통해 메세지를 주고 받음
동기화 방식
블로킹(동기): 메세지를 보내거나 받을 때까지 프로세스가 대기
논블로킹(비동기): 메세지를 보내거나 받은 후 즉시 다음 작업 수행
공유메모리는 빠르지만 여러 프로세스가 동시에 한 공간에 접근할때 race condition 문제 발생
데이터 일관성을 보장하기 위해 프로그래머가 직접 동기화 문제를 해결해야함
핀토스는 안올려 주시나요?