[OS] Multi-Processing vs Multi-Thread (+ IPC, Multi-Core)

2023. 10. 11. 00:05Run/Operating System

 

1. Multi-Programming

- Multi-programming의 목적: CPU 이용 최대화하기 위해 항상 어떤 process 실행되도록 하는 것

→ 시분할: 각 프로그램 실행되는 동안 사용자와 상호작용 할 수 있도록 process 사이에서 CPU 빈번하게 교체하는 것

 

2. Multi-Processing (다중 처리기)

- Multi-core 라고도 함

- CPU scheduling (= process scheduling)

- CPU 여러 개 사용 (매우 밀접한 통신을 하는 둘 이상의 processor, 즉 CPU 가짐)

- n개의 CPU를 가지는 multi-processor 하나가 1개의 CPU를 가지는 single-processor n개보다 비용 적게 듦

- 기능 적절히 분산된 경우 한 CPU가 고장나도 나머지도 동작 못하는 것이 아님

- 속도가 정확히 n배 증가하는 것은 아님 (∵ overhead 및 경쟁 존재)

 

Process Scheduling?

- Process scheduler: CPU에서 실행 가능한 여러 process 중 하나 선택

- Scheduling queue 사용 (process는 일생 동안 다양한 scheduling queue 사이를 이동)

- Context switch: Interrupt 발생 시 현재 process 상태(context) 보관하고 새 process의 보관된 상태(context) 가져오는 것

- Context switch 시간은 순수한 overhead

 

Interprocess Communication (IPC)?

- OS 내에서 실행되는 병행 process가 협력적인 경우

- Information sharing, computation speedup, modularity, convenience

 

Message Passing / Shared Memory

 

1) Message Passing

- 동일한 주소공간 공유하지 않고도 process끼리 통신

- Kernel level에서 진행되므로 안전함 (빠르긴 하나 전체적으로 봤을 때 shared memory보다 느림)

- Message queue 사용, message 간 우선순위 이용하려면 queue만으로는 부족

→ 여러 CPU scheduling algorithm 존재 (https://serinyoon.tistory.com/70)

- Direct communication (1:1): 수신자/송신자 이름 명시

- Indirect communication (1:N): mailbox 사용

 

2) Shared Memory

- Shared memory 영역은 shared memory segment를 생성하는 process의 주소공간에 위치

- 이 segment를 이용하여 통신하고자 하는 process는 자신의 주소공간에 segment를 추가

- User level에서 진행됨

- 보통 OS는 한 process가 다른 process의 메모리에 접근하는 것 금지 → 제약 조건 제거해야 shared memory 가능

- Process들은 동시에 동일한 위치 쓰지 않도록 해야 함 (무한 버퍼, 유한 버퍼 사용)

 

Message Passing vs Shared Memory

- Message passing은 적은 양의 데이터 교환할 때 유용, 분산 시스템에서 shared memory보다 구현 쉬움

- 시스템의 처리 core 수가 증가할수록 message passing이 더 선호됨

- Shared memory가 메시지 전달 더 빠름 (∵ shared memory 영역 구축할 때만 system call 딱 한 번 함, 커널 도움 필요 X)

 

 

3. Multi-Core

- 하나의 칩에 여러 개의 core를 포함시키는 것

- 모든 multi-core 시스템은 multi-processor 시스템이지만, 그 반대는 성립하지 않음

- Multi-thread programming은 multi-core를 더 효율적으로 사용할 수 있는 기법을 제공함

 

multi-core

 

Parallelism

 

Concurrent (동시 실행) → Pseudo-Parallelism (병행하는 척!)

 

- Parallelism (multi-core): 동시에 여러 task 실행 가능한 것

     - Data parellelism: 여러 core에 같은 data를 분배함, same operation on each

     - Task parallelism: 여러 core에 thread 분산함, each thread performing unique operation

     - 속도 빠르나 debugging 어려움, data 나눌 때 sync 맞추기 어려움

- Concurrency (single-core): 여러 task 진행시킬 수 있는 것 (동시는 아님)

 

Multi-core = 하나의 CPU에 여러 core 넣는 것
Multi-thread = 하나의 CPU에 여러 thread 넣는 것
결국 비슷한 것 아닐까?

 

 

4. Multi-Thread

- 프로그램 하나, thread 여러 개

- Thread들은 각각의 program counter를 가짐

- Responsiveness: 시간 많이 걸리는 작업 별도의 작업에서 실행, 동시에 사용자에게 응답

- Resource sharing: IPC의 message passing과 shared memory는 명시적으로 처리, thread는 자동적으로 공유

- Economy: thread를 사용하면 새로운 process 생성하는 것보다 overhead 덜 함

 

1) Many-to-One Model

- Kernel Thread : User Thread = 1 : N

- 한 thread의 block이 모든 thread의 block이 됨

- 한 번에 하나의 thread만 kernel에 접근할 수 있기 때문에 multi-thread가 병렬로 실행될 수 없음

 

2) One-to-One Model

- Kernel Thread : User Thread = 1 : 1

- 한 thread가 block 되어도 다른 thread는 실행 가능

- User thread 생성할 때 kernel thread도 생성해야 함 (overhead)

 

3) Many-to-Many Model

- Kernel Thread : User Thread = N : M

- 위 두 model의 단점을 해결 (한 thread의 block 상관 없음, 병렬 실행 가능, 필요한 만큼 user thread 생성 가능)

 

4) Two-level Model

- Many-to-Many + One-to-One

 

 

'Run > Operating System' 카테고리의 다른 글

[OS] CPU Scheduling  (0) 2023.10.11
[OS] Memory Management  (0) 2023.10.11
[OS] Synchronization & Deadlock  (0) 2023.10.11