본문 바로가기
Computer Science/운영체제

[운영체제] 멀티 프로세싱

by brother_stone 2023. 5. 2.

멀티 프로세싱

하나의 프로그램을 여러 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것. 

이를 통해 특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생되어도, 다른 프로세스를 이용해서 처리할 수 있는 장점이 있다.(신뢰성 ↑)

그러나 프로세스 마다 독립된 메모리 영역을 가지고 있어, 작업량이 많을 수록 오버헤드가 발생하며, Context Switching으로 인한 성능 저하가 발생할 수 있다.

 

면접을 위한 CS 전공지식 노트 p.167

* 오버헤드: 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다. 예를 들어 A라는 처리를 단순하게 실행한다면 10초 걸리는데, 안전성을 고려하고 부가적인 B라는 처리를 추가한 결과 처리시간이 15초 걸렸다면, 오버헤드는 5초가 된다. 또한 이 처리 B를 개선해 B'라는 처리를 한 결과, 처리시간이 12초가 되었다면, 이 경우 오버헤드가 3초 단축되었다고 말한다

 

 

IPC(Inter Process Communication)

프로세스 간 데이터를 주고 받고 공유데이터를 관리하는 메커니즘

 

프로세스와 스레드

출처: https://chacha95.github.io/2020-12-19-python4/

코드, 데이터, 힙을 서로 공유하는 스레드와는 다르게 프로세스는 코드, 데이터, 스택, 힙을 독립적으로 가진다.

운영체제는 보안 및 안정성 위해 한 프로세스에서 다른 프로세스의 메모리에 직접 접근이 불가능하도록 독립된 가상 메모리 공간을 할당하는 것이다.

따라서  기본적으로 프로세스의 메모리를 다른 프로세스가 접근할 수 없지만, IPC를 통해 프로세스간 데이터 공유가 가능하다.

공유 메모리(Shared Memory)

면접을 위한 CS 전공지식 노트 p.168

여러 프로세스가 동일한 메모리 공간을 공유할 수 있도록 한다. 같은 메모리 영역을 여러 프로세스가 공유하기 때문에 동기화 작업이 필요하다.(세마포어, 뮤텍스 등의 동기화 작업 필요)

과도한 복사를 피할 수 있어 속도가 빠르다는 장점이 있다.

파일

파일 시스템을 활용하여 프로세스간 데이터를 공유하는 방법이다. 단순하고 구현이 쉽지만 동기화 문제가 발생할 수 있음.

소켓

네트워크 인터페이스를 통해 다른 프로세스나 다른 컴퓨터로 전송하는 데이터를 의미. 

클라이언트 서버가 소켓을 통해 통신하는 구조로 원격에서 프로세스 간 데이터를 공유할 때 주로 사용한다.

양방향 통신이 가능하다.

다음 이미지는 소켓을 사용한 로컬 컴퓨터간의 통신 과정을 설명한 것이다. 아래 계층을 내려가면서 송신을 하고, 아래 계층부터 위로 올라가면서 대상 프로세스가 수신을 하는 방식이다.

출처: https://velog.io/@redgem92/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-IPC-%EA%B8%B0%EB%B2%95

파이프

운영체제가 제공하는 버퍼를 사용하여 데이터를 전송하는 IPC기법이다. 버퍼의 크기가 제한되어 있기 때문에 일정 크기 이상의 데이터를 전송하기 위해선 여러 번 나누어 보내야 하는 단점이 있다.

 

익명 파이프(Unnamed Pipe)

FIFO방식의 단방향 통신이며, 부모 - 자식 프로세스 간에만 사용가능한 파이프이다. 

면접을 위한 CS 전공지식 노트 p.169

명명된 파이프(named pipe)

파이프 서버와 파이프 클라이언트로 구성. 프로세스 간 통신은 물론 네트워크상에서 서버와 클라이언트가 통신할 때 사용한다.

 

익명 파이프, 명명 파이프는 모두 단방향 통신을 지원하며 프로세스 상호간의 양방향 통신을 구현하기 위해선 쓰기, 읽기 파이프를 하나씩 두어 구현할 수 있다.

 

면접을 위한 CS 전공지식 노트 p.169

익명 파이프는 이름이 없기 때문에 외부에서 사용할 수 없고 명명된 파이프는 이름이 존재하기 때문에 외부에서 호출 가능하다고 생각하면 이해가 쉽다.

메시지 큐

메시지를 큐(queue) 자료구조 형태로 관리하는 것. 커널에서 전역적으로 관리되며 동기화 처리를 해줘야 하는 다른 방식과는 달리 코드 몇 줄의 추가 만으로 접근할 수 있다는 장점이 있다. 그리고 데이터의 크기가 제한되지 않는다는 장점 역시 가지고 있다.

메시지 큐 시스템 콜을 이용해서 생성하고 조작 가능하다. POSIX 표준에 의하면 'msgget', 'msgsnd', 'msgrcv'함수를 사용하여 메시지 큐를 생성하고 메시지를 보내고 받을 수 있다고 한다.

면접을 위한 CS 전공지식 노트 p.170

 

예상 질문

IPC란 무엇이고 어떤 기법들이 있는지 설명하시오.

각 프로세는 독립된 메모리 영역을 갖기 때문에 한 프로세스에서 다른 프로세스의 메모리에 직접 접근이 불가능합니다. 따라서 프로세스 간의 통신이 가능하도록 운영체제 커널에서 IPC를 지원합니다. IPC기법으로는 공유 메모리, 파이프, 메시지 큐 등이 있습니다.

'Computer Science > 운영체제' 카테고리의 다른 글

[운영체제] 멀티 스레딩  (0) 2023.05.11
[운영체제] 메모리 계층과 캐시  (0) 2023.04.24