티스토리 뷰
Process vs Threads
Process : 실행 중인 프로그램 하나를 OS 관점에서 다룰 때 "프로세스"
실행의 단위 (자신만의 실행상태를 가진다, CPU가 프로세스를 실행할 때 ), 시스템 자원의 집합, 자원소유단위
지금까지는 하나의 프로세스가 하나의 실행 흐름만 가진다고 가정했지만,
하나의 프로세스 내에 여러 실행흐름을 가질 수 있어서 그것을 Thread라고 한다.
Multithreading
한 프로세스 내에서 여러 실행흐름(thread)를 동시에 실행하는 기능, 여러작업 동시에 하는거
main thread: 프로세스가 처음 시작될 때 생성되는 최초의 스레드 , peer thread: 메인 스레드가 생성하는 추가 스레드들
같은 프로세스의 thread들은 같은 자원을 가지지만, 각자 독립적인 실행흐름 (stack)을 가진다.
지원방식의 진화
Concurrency & Parallelism
Concurrency (동시성)
두 개 이상의 프로세스(또는 스레드)가 시간적으로 겹치거나(interleave), 동시에 실행(overlap)될 때 concurrent(동시 실행)이라고 한다. 반대로, 한 번에 하나씩 순차적으로 실행되면 sequential (순차 실행) 이다.
스레드/작업이 동시에 진행 중인 것처럼 보이는 상태, 독립적으로 실행을 진행(make progress), 반드시 동시에 실행되는건 아님.

Parallelism (병렬성)
여러 코어/프로세서에서 스레드가 물리적으로 동시에 실행되는 것, 진짜 동시에 실행된다.
데이터 병렬성 : 하나의 데이터를 여러 조각으로 나누고, 여러 코어에서 동일한연산을 하는 방식 (데이터만 나눔, 작업은 동일)
작업 병렬성 : 하나의 데이터에 대해, 서로다른 연산을 여러코어에 분산시켜 하는 방식 (데이터는 같아도, 작업은 다름)
동시성의 정도, 병렬성의 정도
동시성의 정도 : 진행중이거나(running, ready )동시에 진행 중일 수 있는 쓰레드 수
병렬성의 정도 : 물리적으로 동시에 진행 중인 쓰레드 수(실행 중인 수, CPU개수)

Benefits
1. Faster response
프로그램 일부가 차단되거나 오래 걸리는 작업을 수행 중일 때도, 나머지 부분은 계속 실행될 수 있음.
결과적으로 전체응답시간이 개선됨 >> 사용자입장에선 프로그램이 느려지지않고 빠르게 반응하는 것처럼 느껴짐.
RPC : 한 프로그램이 다른 시스템의 함수/프로시저를 마치 자신의 것처럼 호출하는 기술
✔ 멀티스레딩을 쓰면 시간이 오래 걸리는 작업 때문에 전체 프로그램이 멈추는 것을 막을 수 있음
✔ 이는 특히 I/O 대기, 서버 응답 대기가 많은 프로그램에서 큰 장점
✔ 예: 웹 서버, 데이터베이스, 분산 시스템, 네트워크 프로그래밍 등
2.Creation / Communication cost
-1) 시간자원절약
멀티프로세싱: PCB (Process Control Block) 전체를 만들어야 함 → 무겁고 느림, fork() 시스템 호출로 자식 프로세스를 생성 → 비용 큼
멀티스레딩: TCB (Thread Control Block)만 만들면 됨 → 훨씬 가볍고 빠름, 스레드는 같은 프로세스 안에서 생성되므로 context switch 비용도 낮음
✅ 그래서 스레드는 생성/전환 속도가 더 빠름
-2) 자원절약
멀티프로세싱 : 프로세스 간에는 메모리를 공유하지 않음, 커널이 개입해야 하고, 프로그래머가 직접 구현해야 함
멀티프로그래밍 : 모든 스레드는 같은 프로세스 내의 메모리 공간을 공유 → 글로벌 변수, 힙, 파일 디스크립터 등 공유 가능, 공유데이터의 동기화문제를 조심해야함.
3. Parallel Processing
멀티코어 CPU구조에서의 확장성
병렬처리 : 하나의 프로세스가 여러 쓰레드로 나뉘고, 이 쓰레드들이 여러 CPU에서 동시에 실행되는 것
전체처리속도대폭향상, 같은 어플리케이션이 여러코어에서 동시에 실행됨.

✔ 멀티스레딩은 병렬성을 통해 CPU 활용도를 극대화
✔ 특히 멀티코어 환경에서 성능이 획기적으로 개선됨
✔ 그래서 요즘 대부분의 고성능 시스템은 멀티스레드 + 멀티코어 구조로 설계됨
멀티코어를 사용하면 멀티쓰레드에서 얼마나 빨라질수 있을까?
Amdahl’s Law :
병렬 처리의 한계를 설명하는 법칙으로, 전체 프로그램 중 병렬화 불가능한 부분(S)이 존재할 경우,
얼마나 많은 프로세서를 사용해도 속도 향상은 제한된다는 이론



성능이 다시 떨어지는 이유
1. Context Switching 비용 증가
→ 스레드가 너무 많으면 CPU가 번갈아가며 처리하느라 오히려 비효율
2. 동기화/경쟁 조건(lock, barrier 등)
→ 스레드 간 데이터 공유/경쟁이 발생하면 병목 생김
3. CPU 수보다 많은 스레드
→ 16개의 프로세서에 20~24개의 스레드를 돌리면 오버헤드 발생
Multithreaded Process Model
각각의 쓰레드는 자신만의 스택 공간이 필요하다.
스택이 쓰레드마다 필요한 이유:
스택은 지역 변수, 함수 호출 정보, 리턴 주소 등을 담기 때문에, 여러 스레드가 하나의 스택을 공유하면 충돌, 오동작 발생
TCP : 각 스레드마다 고유한 실행 정보를 저장하는 제어 구조체
✔ 하나의 프로세스(주소 공간) 안에서 스레드들은 자원(pcb, address space)을 공유하지만 실행 상태는 독립적이어야 함.
프로세스 생성 (fork() \ wo COW):
완전히 새로운 프로세스를 복사해서 생성, 스택, 힙, 데이터, 코드, PCB까지 전부 새로 생성됨, 비용이 매우 크다.
쓰레드 생성 (pthread_create()):
기존 프로세스 안에서 새로운 쓰레드만 생성, PCB,힙,코드,데이터는 공유, 스택과 TCB만 따로 생성.
Implementation of Threads

- User Level Thread
유저가 관리. 커널은 스레드의 존재를 모르고 하나의 프로세스로 인식한다.
장점 : 문맥전환 빠름 (커널 개입이 없어서)
단점 : 한 프로세스가 블로킹(중단)되면 전체 프로세스가 중단된다.병렬성불가능
- Kernel Level Thread
커널이 관리. 개별적으로 실행
장점 : 하나의 스레드가 중단되어도 다른 쓰레드는 계속 실행, 병렬성, cPU활용도 향상
단점 : 커널 개입 필요, 오버해드(모드전환을 필요로함) 큼, 성능저하
- Combined
여러 사용자 스레드를 하나 또는 여러 커널 스레드에 매핑,
커널 수준에서 블로킹이 발생해도 다른 KLT에서 다른 ULT 실행 가능
Thread API
Thread Synchronization
'학교복습용 > 오퍼레이팅시스템 OS' 카테고리의 다른 글
| 오퍼레이팅시스템 11주차 / 13. Condition Variables and Synchronization (3) | 2025.06.10 |
|---|---|
| 오퍼레이팅시스템 10주차/ 12.Mutual Exclusion and Synchronization (0) | 2025.06.05 |
| 오퍼레이팅시스템 목차 (0) | 2025.04.22 |
| 오퍼레이팅시스템 7주차 / Multiprocessor and Realtime Scheduling (0) | 2025.04.11 |
| 오퍼레이팅시스템 5주차 / Process Description and Control (2) (0) | 2025.04.08 |
