[운영체제] 04. Threads & Concurrency

2024. 6. 18. 23:54·Computer Science/OS

 

 

스레드란 무엇인가?

웹 서버를 예시로 들어 설명할게요!

  • 웹 서버(Web server)
    • 웹 페이지를 제공하는 컴퓨터 프로그램

  • 웹 서버는 한 번에 많은 클라이언트를 서비스해야 합니다.
  • 웹 서버가 입출력(I/O) 작업을 수행하면?
    • 블록될 것입니다.
    • 다른 클라이언트의 요청을 처리할 수 없습니다.

  • 동시 서비스(concurrent service)를 위해 많은 서버 프로세스가 필요합니다.
    • 메모리 공간 낭비.
    • 프로세스를 생성하는 동안 delay 발생.

  • 스레드(Thread)가 필요합니다.
    • Code, data, and resources를 공유할 수 있습니다.
    • Register values and stacks은 공유할 수 없습니다.

 

Thread

  • CPU utilization의 기본 단위
  • 각 프로세스는 여러 스레드를 포함할 수 있습니다.

모든 프로세스의 스레드가 다음을 공유합니다.

  • code, data, heap
  • open files
  • signal handlers
  • working environment (현재 디렉터리, 사용자 ID 등)

각 스레드는 고유의 것을 가집니다. (공유하지 않는 것)

  • stack
  • register
  • thread ID

Single and Multi-threaded processes

 

스레드 vs 프로세스

  • fork를 사용한 새 프로세스 생성은 비용이 많이 듭니다.
    • time & memory
  • 스레드는 많은 메모리나 시작 시간(startup time)이 필요하지 않습니다.
    • 때로는 lightweight process라고 합니다.

  • 응답성(Responsiveness)
    • 프로세스의 일부가 블록되더라도 계속 실행할 수 있습니다.
    • 예: 웹 서버는 한 스레드에서 다른 웹 클라이언트를 서비스하면서 다른 스레드에서 파일을 로드할 수 있습니다.
  • 리소스 공유(Resource Sharing)
    • 메모리와 리소스를 공유할 수 있습니다.
  • 경제성(Economy)
    • 프로세스 생성 및 context switching에 대한 오버헤드가 낮습니다.
  • 다중 프로세서 아키텍처(MP Architectures)의 활용
    • 다중 프로세서 아키텍처에서의 병렬성(Parallelism)이 증가합니다.

Multicore Programming(멀티코어 프로그래밍)

  • 멀티코어(multicore) 또는 멀티프로세서(multiprocessor) 시스템은 프로그래머에게 압박을 줍니다. 도전 과제는 다음과 같습니다:
    • Dividing activities
    • Balance
    • Data splitting
    • Data dependency
    • Testing and debugging
  • 병렬성(Parallelism)은 시스템이 동시에 둘 이상의 작업을 수행할 수 있음을 의미합니다.
  • 동시성(Concurrency)은 진행 중인 하나 이상의 작업을 지원합니다.
    • 단일 프로세서/코어에서 스케줄러가 동시성을 제공합니다.
  • 단일 코어 시스템에서 동시 실행(Concurrent execution)

  • 멀티코어 시스템에서 병렬성(Parallelism)

 

User threads vs. Kernel thread

User thread

  • 사용자 수준의 쓰레드 라이브러리(user-level threads library)에서 지원됩니다.
    • POSIX pthreads
    • Win32 threads
    • Java threads

Kernel thread

  • 운영 체제에 의해 직접 지원되고 관리됩니다.
    • Windows XP/2000
    • Solaris
    • Linux
    • Mac OS X

Linux threads

  • 쓰레드를 생성하기 위해 clone() system call이 사용됩니다.
  • Linux는 프로세스와 쓰레드를 구분하지 않습니다.

clone 플래그 세트는 부모와 자식 간의 공유 정도를 결정합니다.

  • 예시 1: clone(COLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND, 0)
    • 쓰레드에 가깝습니다.
  • 예시 2: clone(CLONE_SIGHAND, 0)
    • 프로세스에 가깝습니다.
flag meaning
CLONE_FS 파일 시스템 정보가 공유됩니다.
CLONE_VM 동일한 메모리 공간이 공유됩니다.
CLONE_SIGHAND 시그널 핸들러가 공유됩니다.
CLONE_FILES 열린 파일들이 공유됩니다.

 

clone(CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND, 0)

'Computer Science > OS' 카테고리의 다른 글

[운영체제] 06. Synchronization Tools  (0) 2024.06.19
[운영체제] 05. CPU Scheduling  (0) 2024.06.19
[운영체제] 03. Process  (0) 2024.06.18
[운영체제] 02. Operating System Structures  (0) 2024.06.18
[운영체제] 01. Introduction to Operating System  (0) 2024.06.18
'Computer Science/OS' 카테고리의 다른 글
  • [운영체제] 06. Synchronization Tools
  • [운영체제] 05. CPU Scheduling
  • [운영체제] 03. Process
  • [운영체제] 02. Operating System Structures
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (463)
      • 개발 일지 (0)
        • Performance (0)
        • TroubleShooting (0)
        • Refactoring (0)
        • Code Style, Convetion (0)
        • Architecture (0)
      • Software Engineering (36)
        • Test (8)
        • 이론 (18)
        • Clean Code (10)
      • Java (72)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (13)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (16)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (130)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (6)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[운영체제] 04. Threads & Concurrency
상단으로

티스토리툴바