← Back to Blog

[Operating System] Process and Thread

computer science > operating system

2026-07-044 min read

#computer-science #operating-system #thread

Concurrency와 Parallelism

concurrency and parallelism

이미지 출처: Stack Exchange image CDN

Concurrency

Concurrency(동시성)은 여러 작업이 동시에 수행되는 것처럼 보이는 특성을 의미한다.

실제로는 하나의 CPU만 존재하더라도 운영체제가 매우 짧은 시간 단위로 작업을 번갈아 실행하면 여러 작업이 동시에 진행되는 것처럼 보일 수 있다.

즉, 동시성은 "동시에 실행되는 것처럼 보이는 능력"에 초점을 둔다.

예를 들어 하나의 CPU에서

Thread A
↓
Thread B
↓
Thread A
↓
Thread C

와 같이 빠르게 문맥 교환(Context Switch)이 발생하면 여러 작업이 동시에 수행되는 것처럼 보인다.

Parallelism

Parallelism(병렬성)은 여러 작업이 실제로 동시에 실행되는 것을 의미한다.

여러 개의 CPU 코어가 존재할 때 각각의 코어가 서로 다른 작업을 수행하면서 진정한 의미의 동시 실행이 가능해진다.

병렬성은 일반적으로 다음과 같이 구분할 수 있다.

구분의미
Data Parallelism같은 작업을 여러 데이터에 나누어 병렬로 수행한다.
Task Parallelism서로 다른 작업을 여러 실행 흐름에서 병렬로 수행한다.

예시

4개의 CPU와 6개의 Thread를 사용한다고 할 때 Parallelism과 Concurrency는?

Parallelism = 4
Concurrency = 6

동시에 실제로 실행될 수 있는 작업 수는 CPU 수인 4개이며, 시스템이 관리하는 실행 흐름은 6개의 스레드이다.

따라서 병렬성은 4, 동시성은 6으로 볼 수 있다.

구분의미예시
Concurrency여러 작업이 동시에 진행되는 것처럼 보인다.1개 CPU가 여러 thread를 빠르게 번갈아 실행한다.
Parallelism여러 작업이 실제로 동시에 실행된다.4개 CPU core가 4개 thread를 동시에 실행한다.

Multithreading

Multithreading은 하나의 프로세스 내부에서 여러 개의 스레드를 생성하여 작업을 수행하는 기법이다.

여러 스레드는 동일한 프로세스의 자원을 공유하면서 독립적으로 실행된다.

예를 들어 웹 브라우저는

를 각각 다른 스레드에서 수행한다.

장점

Responsiveness

하나의 작업이 오래 걸리더라도 다른 작업은 계속 수행될 수 있다.

예를 들어 파일 다운로드 중에도 사용자 인터페이스는 계속 응답할 수 있다.

Economy

프로세스를 새로 생성하는 것보다 스레드를 생성하는 비용이 훨씬 적다.

Resource Sharing

동일한 프로세스에 속한 스레드는 주소 공간과 자원을 공유한다.

Scalability

멀티코어 환경에서는 여러 스레드를 서로 다른 CPU 코어에 배치하여 성능을 향상시킬 수 있다.


Thread Control Block(TCB)

각 스레드는 자신의 실행 상태를 저장하기 위한 TCB(Thread Control Block)를 가진다.

일반적으로 다음과 같은 정보가 저장된다.

항목의미
Thread State현재 thread 상태를 저장한다.
Program Counter (PC)다음에 실행할 명령어 주소를 저장한다.
CPU Registersthread 실행에 필요한 register 값을 저장한다.
Scheduling Informationscheduler가 사용하는 우선순위 등 정보를 저장한다.
Stack Pointerthread stack 위치를 저장한다.

운영체제는 문맥 교환(Context Switch) 시 현재 스레드의 상태를 TCB에 저장하고, 다음 스레드의 상태를 복원한다.


Thread 생성

동일한 프로세스 내에서 새로운 스레드를 생성할 경우 주소 공간은 공유된다.

따라서 일반적으로 새로 생성되는 것은 다음과 같다.

새로 생성되는 것이유
Stack각 thread가 독립적인 함수 호출 흐름을 가지기 때문이다.
TCB각 thread의 실행 상태를 따로 저장해야 하기 때문이다.

코드(Code), 데이터(Data), 힙(Heap)은 기존 스레드와 공유한다.


Multithreading Models

Kernel-Level Threads(KLT)

one-to-one

이미지 출처: GeeksforGeeks

커널이 각 스레드를 직접 관리하는 방식이다.

대표적으로 Linux와 Windows가 사용하는 One-to-One 모델이 이에 해당한다.

User Thread 1 ↔ Kernel Thread 1
User Thread 2 ↔ Kernel Thread 2
User Thread 3 ↔ Kernel Thread 3

장점은 다음과 같다.

단점은 다음과 같다.


User-Level Threads(ULT)

many-to-one

이미지 출처: GeeksforGeeks

사용자 영역의 스레드 라이브러리가 스레드를 관리하는 방식이다.

커널은 여러 개의 사용자 스레드를 하나의 실행 흐름으로 인식한다.

Multiple User Threads
          ↓
      One Kernel Thread

장점은 다음과 같다.

단점은 다음과 같다.


Combined ULT/KLT

many-to-many

이미지 출처: GeeksforGeeks

Many-to-Many 모델은 여러 개의 User Thread를 여러 개의 Kernel Thread에 매핑하는 방식이다.

Multiple User Threads
          ↓
Multiple Kernel Threads

사용자 수준 스레드의 유연성과 커널 수준 스레드의 병렬성을 동시에 활용할 수 있다.

장점은 다음과 같다.

단점은 다음과 같다.

Thread Model 정리

모델매핑장점단점
Kernel-Level Threadsuser thread와 kernel thread가 1:1로 매핑된다.멀티코어 활용과 blocking 대응이 좋다.생성과 context switch 비용이 크다.
User-Level Threads여러 user thread가 하나의 kernel thread에 매핑된다.생성과 전환이 빠르다.하나가 block되면 전체가 block될 수 있다.
Combined ULT/KLT여러 user thread가 여러 kernel thread에 매핑된다.유연성과 병렬성을 함께 얻을 수 있다.구현이 복잡하다.