본문 바로가기

운영체제

[OS] 4강 스레드 관리

해당 학습 문서는 KOREATECH의 김덕수 교수님의 유튜브 무료 강의를 바탕으로 정리되었습니다

무료 강의를 제공해주신 김덕수 교수님께 감사드립니다

https://www.youtube.com/watch?v=YlnvCIZQDkw&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=7

 

프로세스(Process)와 스레드(Thread)

위 그림에서 ~ 기호가 제어의 한 단위인 스레드를 의미하며, 하나의 프로세스는 여러 개의 스레드로 구성될 수 있음을 표현

프로세스는 독립적인 자원(메모리, 파일 등)을 할당받는 실행 단위이고,

스레드는 하나의 프로세스 내에서 자원을 공유하며 실행되는 흐름의 단위

프로세스가 리소스를 제어할 때, 제어 영역에 다양한 제어정보를 포함하는 것을 알 수 있다

SP(stack pointer: CPU가 실행중인 프로세스의 메모리 주소 저장)

PC(program counter: 제어 위치 저장)

지역 데이터→ 각 코드 구간마다 선언되는 지역 변수 데이터(제어를 위해 사용) → stack 영역에 저장이 된다

하나의 프로세스는 여러 제어 단위인 스레드로 나뉘어질 수 있지만 같은 프로세스 내의 스레드는 자원을 공유한다

 

식당의 비유로 이해

이를 다음과 같은 비유로 이해할 수 있다

식당음식을 제공하는 하나의 서비스(프로세스)를 제공하는 곳(자원)이라고 볼 수 있다

이 때 요리를 만들어주는 주체인 요리사는 서비스의 프로세서(CPU)라고 생각할 수 있다

웨이터는 주문 받은 음식에 대한 정보(제어 정보)를 갖고 요리사(프로세서)에게 이를 전달하는 스레드라고 볼 수 있다

멀티 스레딩은 음식 제공이라는 프로세스 안의 일을 여러 실행 단위(웨이터) 로 나눠 동시에 진행하는 것으로 이해할 수 있다

모든 웨이터(스레드)는 식당이라는 같은 공간(자원, 메모리 공간)을 공유하고 있다

또한, 웨이터(스레드)는 자신이 받은 주문서를 요리사가 처리할 수 있도록 주문 스택에 쌓는다

이 때 요리사는 여러 주문서를 받고 요리를 번갈아 가며(CW) 동시에 처리할 수 있다(동시성)

 

메모리 관점에서 스레드의 자원 공유

heap, data, code 구간의 메모리는 공유하고 같은 프로세스의 스레드들은 동일한 주소 공간을 공유한다

스레드의 역할: 한 프로세스 안의 일을 더 잘게 쪼개 여러 실행 흐름(스레드) 으로 만들어 번갈아/동시에 돌릴 수 있게 함(특히 I/O 대기와 계산을 겹치게 유리)

스레드(Thread)

Light Weight Process(LWP)

프로세서(e.g, CPU) 활용의 기본 단위

구성 요소

  • Thread ID
  • Register set (PC, SP 등)
  • Stack(i.e. local data)

제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유

전통적 프로세스 = 단일 스레드 프로세스

더보기

💡스레드는 왜 경량 프로세스인가? 자원을 공유하고 제어를 독립적으로 실행한다는 것은 무슨 의미일까?

 

프로세스처럼 독립적인 메모리 공간을 할당받지 않고(힙, 코드, 데이터 공유), 스택 영역만 독립적으로 가져서

생성 및 CW 오버헤드가 프로세스보다 훨씬 적고, 자원 소모가 적어 가볍고(경량), 효율적으로 병렬 처리를 가능하게 한다

이러한 이유로 스레드를 LWP라고 부른다

그 외에도 같은 프로세스 내의 통신(IPC), 스케줄링 효율성 증가 등의 이유가 있다

스레드의 장점

사용자 응답성(Responsiveness)

  • 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능

자원 공유(Resource sharing)

  • 스레드는 코드/데이터/힙/핸들공유하므로 생성·통신·메모리 사용이 효율적
  • 전환 시 주소 공간 전환이 없어 프로세스 전환보다 오버헤드가 적다(TLB flush 부담 감소)

커널 개입(Kernel Involvement)

  • KLT: 전환은 커널 진입(CS 시 트랩) + 스레드 컨텍스트 교체프로세스 전환보다 싸지만 0은 아님
  • ULT/가상 스레드: 유저 공간 전환 가능(트랩 없이) → 더 싸다. 단, I/O는 여전히 syscall이고 블로킹 I/O는 주의

경제성 (Economy)

  • 프로세서의 생성, context switch에 비해 효율적

멀티 프로세서(multi-processor) 활용

  • 병렬처리를 통해 성능 향상

스레드 사용의 예시

강의에서는 위의 그림을 통해 멀티 스레드의 동시성을 설명한다

하나의 스레드만 존재하는 단일 스레드 프로세스인 경우 다양한 I/O에 대응하기 어려움 → 화면을 통해 적을 보고 마우스를 돌리는 순간 화면과 스피커/마이크가 끊기는 현상이 발생하게 된다 → Multi Thread를 통해 자원을 공유하고 응답성을 높일 수 있다

하지만 이렇게 이해하면 자칫 스레드가 여러 프로세스를 정말로 동시에 처리할 수 있게 만들어준다고 착각할 수 있다

멀티 스레드는 한 프로세스 내부의 여러 작업저렴한 스레드 전환(CS) 으로 동시적으로 처리하게 해주는 것이다

더보기

💡동시성 vs 병렬성

이전의 식당의 비유로 다시 생각하면 왼쪽의 경우가 동시성(빠른 CW),

오른쪽이 병렬성(프로세스를 멀티 스레드로 분리 이를 멀티 코어로 처리)이다

멀티 스레드로 전환한다고 해서 결코 하나의 프로세서가 처리하는 양이 줄어들지 않는다

여러 스레드(또는 여러 프로세스)여러 코어에 배치하면 병렬성이 생긴다

한 줄 정리

  • 동시성: 한 코어에서 스레드들을 빠르게 교대(CS) 하며 겉보기 동시에
  • 병렬성: 여러 코어에서 스레드/프로세스를 진짜 동시에

아래 링크는 멀티코어로 게임의 성능이 향상되는 것을 볼 수 있는 좋은 예시이다

https://www.youtube.com/watch?v=pmJyQiL9wYg

영상에서 SA-1 패치는 보조 CPU 연산을 오프로드로 속도를 끌어올린 패치이다. SA-1은 CPU와 동시에 동작하는 보조 프로세서이다

스레드의 구현

사용자 수준 스레드(User Thread)

사용자 공간에서 생성, 관리 스케줄링되는 실행 단위

  • ‘실행 흐름’의 최소 단위인 스레드의 한 종류로, 멀티태스킹을 구현할 때 사용된다

사용자 영역의 스레드 라이브러리로 구현 됨

스레드 라이브러리: 프로그래머에게 스레드를 생성하고 관리하기 위한 API를 제공하는 것

  • 스레드의 생성, 스케줄링 등
  • POSIX threads, Win32 threads, java thread API 등

커널은 스레드의 존재를 모름

  • 커널의 관리(개입)를 받지 않음
    • 생성 및 관리의 부하가 적음 유연한 관리 가능
    • 이식성(portability)이 높음 → 대부분의 현대 OS가 커널이 직접 관리하는 스레드 모델을 공통적으로 제공해서, 프로그램을 다른 OS/아키텍처로 옮겨도 동작 의미와 성능 특성이 크게 바뀌지 않는다
  • 커널은 프로세스 단위로 자원 할당 (단점임)
    • 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기(single-threaded kernel의 경우)

사용자가 프로세스를 생성하면 커널수준의 스레드를 만들고 스레드 라이브러리가 여러개의 스레드를 사용 가능하도록 만들어준다. 라이브러리가 스레드를 스레드 정보를 담고 있는 TCB를 통해 제어한다

커널 수준 스레드(Kernel Threads)

운영체제 커널이 직접 생성하고 관리하는 스레드

스케줄링 대상이 되어 CPU를 할당받는 주체

하나의 프로세스는 여러 개의 커널 스레드를 가질 수 있다

OS(Kernel)가 직접 관리

커널 영역에서 스레드의 생성 관리 수행

  • Context switching 등 부하(Overhead)가 큼

커널이 각 스레드를 개별적으로 관리

  • 커널이 스레드 생성, 관리, 스케줄링 등 모든 것을 담당하여 사용자 수준 스레드의 한계를 극복
  • 프로세스 내 스레드들이 병행 수행 가능
    • 하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행 가능

Multi-Threading Model

다대일(n:1) 모델

  • 사용자 수준 스레드

일대일(1:1) 모델

  • 커널 수준 스레드

다대다(n:m) 모델

  • n > m
  • 혼합형 스레드

 

혼합형 (n:m) 스레드

n개 사용자 수준 스레드 - m개의 커널 스레드 (n>m)

  • 사용자는 원하는 수 만큼 스레드 사용
  • 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도 다른 스레드 수행 가능
    • 병행 처리 가능

효율적이고 유연함

 

노션 링크

https://www.notion.so/OS-4-2f19d2a6b975805b9574d08a2c32d41f#2f19d2a6b97580c1996dc319501aff42

 

시각 자료

OS-lecture4.excalidraw
0.70MB

excalidraw를 통해 파일을 open 하시면 자료를 수정 및 복사할 수 있습니다

 

 

 

'운영체제' 카테고리의 다른 글

[OS] 3강 프로세스 관리  (0) 2026.01.07
[OS] 2강 운영체제의 개요  (0) 2026.01.06
[OS] 1강 컴퓨터 시스템의 개요  (0) 2026.01.02