Tech Log

[Operating System] 멀티 프로세싱과 멀티 스레딩 본문

Computer Science/Operating System

[Operating System] 멀티 프로세싱과 멀티 스레딩

yuhee kim 2023. 2. 11. 02:05

멀티 프로세싱

여러 개의 프로세스를 통해 두 가지 이상의 일을 수행할 수 있는 것.

이를 통해 하나의 일을 병렬로 처리할 수 있다.

특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생되더라도,

다른 프로세스를 이용해서 처리할 수 있으므로 신뢰성이 높은 강점이 있다.

 

웹 브라우저의 멀티 프로세스

웹 브라우저는 멀티 프로세스 구조를 갖고 있다.

웹 브라우저에는 여러 프로세스가 있다.

  • 브라우저 프로세스 : 주소 표시줄, 북마크 막대, 뒤로 가기 버튼, 앞으로 가기 버튼 등을 담당. 네트워크 요청이나 파일 접근 같은 권한을 담당.
  • 렌더러 프로세스 : 웹 사이트가 보이는 부분의 모든 것을 제어.
  • 플러그인 프로세스 : 웹 사이트에서 사용하는 플러그인을 제어.
  • GPU 프로세스 : GPU를 이용해서 화면을 그리는 부분을 제어.

 

프로세스 간 통신(IPC)

멀티 프로세스는 IPC(Inter Process Communication)이 가능하다.

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

 

IPC의 예로는 클라이언트와 서버가 있다.

클라이언트는 데이터를 요청하고 서버는 클라이언트 요청에 응답하는 것은 IPC의 예가 된다.

 

IPC는 메모리가 완전히 공유되는 스레드보다는 속도가 느리다.

이러한 IPC에는 공유 메모리, 파일, 소켓, 익명 파이프, 명명 파이프, 메시지 큐가 있다.

 

공유 메모리(shared memory)

출처 : 면접을 위한 CS 전공지식 노트(2022)


여러 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여되어,

프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것.

 

기본적으로는 각 프로세스의 메모리를 다른 프로세스가 접근할 수 없다.

하지만 공유 메모리를 통해 하나의 메모리를 공유할 수 있다.

 

IPC 방식 중 어떠한 매개체를 통해 데이터를 주고받는 것이 아닌 메모리 자체를 공유하기 때문에,

불필요한 데이터 복사의 오버헤드가 발생하지 않아 가장 빠르다.

하지만 같은 메모리 영역을 여러 프로세스가 공유하기 때문에 동기화가 필요하다.

 

하드웨어 관점에서 공유 메모리는 CPU가 접근할 수 있는 큰 랜덤 접근 메모리인 RAM을 가리키기도 한다.

 

파일

파일은 디스크에 저장된 데이터,

혹은 파일 서버에서 제공한 데이터를 말한다.

이를 기반으로 프로세스 간 통신을 할 수 있다.

 

예를 들어 프로세스 A,B가 파일을 통해 통신한다고 하면,

A,B 프로세스의 사용자가 자기들끼리 공유하는 파일을 하나 열어놓고

파일에 데이터를 쓰고 읽는 것이다.

 

소켓

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

소켓을 이용한 IPC는 소켓을 매개로 한쪽의 프로세스와 반대쪽의 프로세스를 연결하는 작업이다.

 

통신하고자 하는 프로세스는 자신의 소켓과 상대의 소켓을 연결한다.

시스템에 있는 프로세스가 소켓을 바인딩한 후,

소켓에 쓰기 연산을 하면 데이터가 전송되고 읽기 연산을 하면 데이터를 받게 된다.

 

예로는 TCP와 UDP가 있다.

 

익명 파이프(unamed pipe)

출처 : 면접을 위한 CS 전공지식 노트(2022)

프로세스 간에 FIFO 방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고받는다.

단방향 방식의 읽기 전용, 쓰기 전용 파이프를 만들어서 작동한다.

이 방식은 부모, 자식 프로세스 간에만 사용할 수 있다.

 

일반적으로 파이프라고 하면 익명 파이프를 말한다.

 

파이프에 쓰기 연산을 하면 데이터가 전송되고 읽기 연산을 하면 데이터를 받게 된다.

 

*단뱡항 방식 : 한쪽 방향으로만 데이터를 전송할 수 있는 구조

 

명명된 파이프(named pipe)

출처 : 면접을 위한 CS 전공지식 노트(2022)

파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 이중 파이프를 말한다.

클라이언트/서버 통신을 위한 별도의 파이프를 제공한다.

여러 파이프를 동시에 사용할 수 있다.

컴퓨터의 프로세스끼리 또는 다른 네트워크 상의 컴퓨터와도 통신을 할 수 있다.

 

그림처럼 서버용 파이프와 클라이언트 파이프를 구분해서 작동한다.

하나의 인스턴스를 열거나 여러 개의 인스턴스를 기반으로 통신한다.

 

메시지 큐

출처 : 면접을 위한 CS 전공지식 노트(2022)

메시지를 큐 데이터 구조 형태로 관리하는 것이다.

이는 커널의 전역변수 형태 등 커널에서 전역적으로 관리된다.

다른 IPC 방식에 비해서 사용 방법이 매우 직관적이고 간단하며,

다른 코드의 수정 없이 단지 몇 줄의 코드를 추가해 메시지 큐에 접근할 수 있다.

 

공유 메모리를 통해 IPC를 구현할 때,

쓰기 및 읽기 빈도가 높으면 동기화 때문에 구현이 복잡해는데 이때 대안으로 메시지 큐가 사용된다.

 

스레드

출처 : 면접을 위한 CS 전공지식 노트(2022)

프로세스의 실행 가능한 가장 작은 단위.

프로세스는 여러 개의 스레드를 가질 수 있다.

 

프로세스는 코드, 데이터, 스택, 힙을 각각 생성하지만 

스레드는 코드, 데이터, 힙은 스레드끼리 서로 공유한다.

그 외 영역은 각각 생성된다.

 

멀티 스레딩

프로세스 내 작업을 여러 개의 스레드로 처리하는 기법.

스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다.

 

예를 들어 웹 요청을 처리할 때 새 프로세스를 생성하는 대신

스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비한다.

한 스레드가 중단(blocked)되어도 다른 스레드는 실행(running) 상태일 수 있다.

따라서 중단되지 않은 빠른 처리가 가능하다.

동시성에도 큰 장점이 있다.

 

*동시성 : 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것

 

단점으로는 한 스레드에 문제가 생기면 다른 스레드에도 영향이 간다는 것이다.

한 스레드에 문제가 생기면 스레드로 이루어져 있는 프로세스에 영향이 갈 수 있다.

 

멀티 스레드의 예에는 웹 브라우저의 렌더러 프로세스가 있다.

렌더러 프로세스 내에는 메인 스레드, 워커 스레드, 컴포지터 스레드, 레스터 스레드가 존재한다.

 

참조
  • 주홍철, 면접을 위한 CS 전공지식 노트, 길벗(2022)
  • 조성호, 쉽게 배우는 운영체제, 한빛아카데미(2018)
Comments