[OS] 멀티프로세스, 멀티스레드, 멀티 프로그래밍, 멀티프로세스 멀티스레드에서의 데이터 통신

nnnyeong·2021년 5월 2일
0

OperatingSystem

목록 보기
3/11

포스팅 시작에 앞서서 프로세스와 스레드의 생김새가 어땠더라?

❗️위의 프로세스와 스레드의 생김새를 기억하면서 이해해보자!

멀티 프로세스 / 멀티 스레드

1. 멀티 프로세스

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

장점

  • 메모리 침범 문제를 OS 차원에서 해결
  • 여러 자식 프로세스 중 하나에 문제가 발생하여도 그 프로세스만 타격, 확산되지 X

단점

  • 각 프로세스가 독립된 메모리 영역 (Code, Data, Heap, Stack)을 가지고 있기 때문에 작업량이 많아지면 오버헤드가 발생함 (context switching)
  • 프로세스 간의 복잡한 통신 (IPC) 가 필요함

💡 PCB (Process Control Block)
프로세스의 메타데이터들을 저장하는 블록, 프로세스 별로 존재하는 자료 구조 (linked list 로 구성)


2. 멀티 스레드

: 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

장점

  • 메모리 공간, 시스템 자원의 효율성 증가
  • Data, Heap 영역을 이용해 데이터를 주고 받으므로 스레드간 통신이 간단함
  • context switching시 비용이 적음 (교환해야 할게 적으니까!) -> 시스템 처리량 향상, 프로그램 응답 시간 단축됨

단점

  • 서로 다른 스레드가 Stack을 제외한 메모리 공간을 공유하기 때문에 동기화 문제가 발생할 수 있음
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받음
  • 주의 깊은 설계가 필요하며 디버깅이 까다로움

💡 TCB (Thread Control Block)
스레드의 메타데이터를 저장하는 블록, 스레드 별로 존재하는 자료 구조

💡 PCB 와 TCB 가 사용될 때
같은 프로세스 내에서, 스레드간의 context switching -> TCB만!
다른 프로세스의 스레드로 context switching -> PCB & TCB!

(TCB가 context switching의 기본 단위이다)



멀티 프로세싱 / 멀티 코어 / 멀티 태스킹 / 멀티 프로그래밍

컴공을 4년 다녀도 헷갈리는 이놈들!!!

1. 멀티 프로세싱

  • CPU가 1개가 아닌 여러개인 것을 말함
  • register와 cache를 독립적으로 가진 여러개의 CPU가 1개의 메모리에 연결된 구조

2. 멀티 코어

  • CPU 칩 내부에 register와 cache를 갖고 있는 core 만 따로 회로를 구성한 구조

3. 멀티 태스팅 / 멀티 프로그래밍

  • 메모리에 여러 프로그램을 올려서 사용하는 구조
  • 메모리에 여러개의 프로세스를 동시에 올리고, CPU는 프로세스를 concurrency 하게 실행

4. 멀티 프로그래밍

  • 하나의 메모리에 동시에 여러개의 프로세스를 올림

5. 멀티 태스킹

  • 멀티 프로그래밍된 메모리를 대상으로 CPU가 시분할로 여러 프로세스를 빠르게 처리함 (= concurrency)

역시나 오늘도 헷갈리는 cpu,, 프로세서,, 코어,, 무슨 차이일까?!

CPU vs 프로세서 vs 코어

프로세서

  • 컴퓨터 운영을 위해 기본적인 명령어들을 처리하고, 반응하기 위한 논리 회로
  • control unit(신호를 보내는 제어장치) + ALU (사칙 연산, 논리 연산)

CPU

디바이스가 해야할 일을 총 지휘하는 프로세서로, 기억 연산 제어 3대 기능을 종합하는 장치

코어

각종 연산을 하는 CPU의 핵심 요소

💡 concurrency 란?
동시에 실행되는 것 처럼 보이는 것, 물리적으로는 병렬 X, 순차적으로 진행
time sharing으로 CPU를 나누어 사용


프로세스간에는 서로 메모리가 모두 독립되어 있다는데, 통신이 필요하면 어쩌지??


IPC (Inter-Process Communication)

프로세스들은 서로 통신이 필요하면, 커널이 제공하는 IPC 설비를 이용해 통신을 진행한다! 다음은 6가지의 IPC 설비들에 대한 간단한 설명이다.

1. 익명 PIPE

: 파이프는 두 프로세스를 연결, 한 쪽은 쏘기만 하고 한 쪽은 읽기만 하는 반이중통신 (한방향) -> 양방향 통신을 위해서는 2개의 파이프가 필요하다!

장점

  • 매우 간간한 사용, 단순한 데이터 흐름에서는 효율적

단점

  • 양방향 통신을 위해서는 파이프 두개를 만들어야 하기 때문에 구현이 복잡해짐

2. Named PIPE

: 익명 파이프와 유사하게 동시에 읽기와 쓰기가 불가능한 반이중 통신이지만, 전혀 모르는 관계의 프로세스 간의 통신 -> 이름이 있는 파일 사용

  • 장단점은 익명 파이프와 동일하다!

3. Message Queue

  • 입출력 방식은 Named PIPE와 동일하지만 데이터의 흐름이 아닌 메모리 공간(-> 뮤텍스, 세마포어와 같은 동기화가 필요!)
  • 사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다

4. Shared Memory

  • 파이프, 메세지 큐가 통신을 이용한 설비라면, 공유 메모리는 데이터 자체를 공유하도록 지원하는 설비
  • 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용한다
  • 프로세스가 공유 메모리 할당을 커널에 요청 -> 커널은 해당 프로세스에 다른 프로세스들이 접근 가능한 메모리 공간을 할당한다

장점

  • 중개자 없이 곧바로 메모리에 접근하기 때문에 가장 빠른 IPC 설비이다!

5. 메모리 맵

  • 공유 메모리 처럼 메모리를 공유하지만!
  • 열린 파일을 메모리에 매핑시켜 공유하는 방식
  • 즉, 공유 매개체가 파일 & 메모리 인 형식
  • 주로 대용량 데이터를 공유해야 할 때 사용함

6. 소켓

  • 네트워크 소켓 통신을 통한 데이터 공유
  • client - server 가 소켓을 통해 통신하는 구조
  • 원격의 프로세스 간의 통신에 사용됨
profile
주니어 개발자까지 ☄️☄️

0개의 댓글