공유 메모리 시스템 (Shared memory)
공유 메모리를 사용하는 프로세스 간 통신에서는 통신하는 프로세스들이 공유 메모리 영역을 구축해야 한다. 보통 공유 메모리 영역은 공유 메모리 세그먼트를 생성하는 프로세스의 주소 공간에 위치한다. 이 공유 메모리 세그먼트를 이용하여 통신하고자 하는 다른 프로세스들은 이 세그먼트를 자신의 주소 공간에 추가하여야 한다.
일반적으로 운영체제는 한 프로세스가 다른 프로세스 메모리에 접근하는 것을 금지한다. 따라서, 공유 메모리를 사용하기 위해서는 둘 이상의 프로세스가 이 제약 조건을 제거하는 것에 동의를 해야 한다. 그 후, 프로세스들은 공유 영역에 읽고 씀으로써 정보를 교환할 수 있다.
데이터의 형식과 위치는 통신 프로세스들에 의해 결정되며 이는 운영체제의 소관이 아니다. 또한 공유 메모리를 사용하는 프로세스들은 동시에 동일한 위치에 데이터를 쓰지 않는다는 점을 보장할 책임이 있다.
협력하는 프로세스의 개념을 설명하기 위해서, 협력하는 프로세스의 일반적인 패러다임인 생산자-소비자 문제를 생각해 보기로 하자. 생산자 프로세스는 정보를 생산하고, 소비자 프로세스는 정보를 소비한다. 예를 들어, 웹 서버는 HTML 파일과 이미지를 생산하고 (즉, 제공하고), 이 자원들을 요청한 클라이언트 웹 브라우저가 그것들을 소비하게 된다(즉, 읽는다).
생산자-소비자 문제의 해결책 중 한 가지는 공유 메모리를 사용하는 것이다. 생산자와 소비자 프로세스들이 병행으로 실행되도록 하려면, 생산자가 정보를 채워 넣고 소비자가 소모할 수 있는 공유 아이템들을 위한 버퍼가 반드시 존재해야 한다. 이 버퍼는 생산자와 소비자가 공유하는 메모리 영역에 존재하게 된다. 생산자가 한 아이템을 생산하고, 그 동안에 소비자는 다른 아이템들을 소비할 수 있다. 생산자와 소비자가 반드시 동기화되어야 생산되지도 않은 아이템들을 소비자가 소비하려고 하는 등의 오류가 발생하지 않을 것이다.
이 공유 메모리를 위한 버퍼에는 두 가지 유형의 버퍼가 사용된다. 무한 버퍼(unbounded buffer)의 생산자 소비자 문제에서는 버퍼의 크기에 실질적인 한계가 없다. 소비자는 새로운 항목을 기다려야만 할 수도 있지만, 생산자는 항상 새로운 항목을 생산할 수 있다. 유한 버퍼(bounded buffer)는 버퍼의 크기가 고정되어 있다고 가정한다. 이 경우, 버퍼가 비어 있으면 소비자는 기다려야만 하며, 버퍼가 가득 차 있으면 생산자는 버퍼에 알맞은 크기의 빈 공간이 생길 때까지 기다려야 한다.
'OS > 프로세스 관리' 카테고리의 다른 글
스레드 (2) | 2018.11.12 |
---|---|
메시지 전달 시스템(Message-Passing System) (0) | 2018.11.08 |
프로세스간 통신(Interprocess Communication) (0) | 2018.11.04 |
프로세스에 대한 연산 (Operation on Processes) (0) | 2018.11.04 |
프로세스 스케줄링 (Process Scheduling) (0) | 2018.11.01 |