본문 바로가기
운영체제

[OS] 쓰레드와 프로세스

by 파스텔코랄 2023. 3. 20.

쓰레드

웹 서버(Web server)

  • 웹 페이지를 전송하는 컴퓨터 프로그램

웹 서버는 한 번에 많은 클라이언트에 서비스를 제공

웹 서버가 I/O 작업을 수행하는가?

  • 차단
  • 다른 클라이언트의 요청을 처리할 수 없다.

동시 서비스에는 많은 서버 프로세스가 필요

  • 메모리 공간을 낭비
  • 프로세스 생성 시간 지연

쓰레드가 필요하다.

  • 공유 가능 : 코드, 데이터, 리소스
  • 공유 불가 : 레지스터 값, 스택

쓰레드

  • CPU 활용도의 기본 단위
  • 각 프로세스많은 쓰레드를 포함 가능

공유 가능 쓰레드

  • 코드, 데이터, (heap)
  • 파일 열기
  • 신호 처리기(signal handlers)
  • 작업환경(현재 디렉토리, 사용자 ID 등)

고유 쓰레드(공유 불가)

  • 스택
  • 레지스터
  • 쓰레드 ID

단일 및 다중 쓰레드 프로세스

 


쓰레드 vs 프로세스

포크(fork)를 사용하여 새 프로세스을 만드는 것은 비용이 많이 든다.

  • 시간 & 메모리

쓰레드에는 많은 메모리나 시작 시간이 필요없다.

  • 경량 프로세스(lightweight process)라고도 불린다.

응답성(Responsiveness)

  • 프로세스의 일부가 차단되더라도 프로세스가 계속 실행될 수 있다.
  • 예) 웹 서버는 파일이 다른 쓰레드에서 로드되는 동안 한 쓰레드에서 다른 웹 클라이언트를 위해 서비스를 제공할 수 있다.

리소스 공유

  • 메모리 및 리소스를 공유할 수 있다.

경제성(Economy)

  • 프로세스 생성 및 컨텍스트 전환에 대한 오버헤드가 낮다.

멀티프로세서 아키텍처 활용

  • 멀티프로세서 아키텍처의 병렬성이 증가

 


멀티코어 프로그래밍

멀티코어/멀티프로세서 시스템의 문제점

  • 활동 분할(Dividing activities)
  • 균형(Balance)
  • 데이터 분할(Data splitting)
  • 데이터 종속성
  • 테스트 및 디버깅

병렬 처리(Parallelism) : 시스템이 두 개 이상의 작업을 동시에 수행

동시성(Concurrency) : 하나 이상의 작업 진행을 지원

  • 단일 프로세서/코어, 스케줄러를 통해 동시성 제공

단일 코어 시스템에서 동시성 :

멀티 코어 시스템에서 병렬 처리 :

 


사용자 쓰레드 vs 커널 쓰레드

사용자 쓰레드

  • 사용자 수준(user-level) 쓰레드 라이브러리에서 지원
      POSIX pthreads
      Win32 쓰레드
      자바 쓰레드

커널 스레드

  • 운영체제에서 직접 지원 및 관리
      윈도우 XP/2000
      솔라리스
      리눅스
      Mac OS X

 


리눅스 쓰레드

리눅스 쓰레드

  • clone() 시스템 호출 : 스레드 생성
  • Linux는 프로세스와 쓰레드를 구분하지 않는다.
  • 클론 플래그 집합(Flag set of clone)은 부모와 자식 간의 공유 정도를 결정한다.
      예) clone(CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND, 0)
      → 쓰레드에 가깝다.
      예) clone(CLONE_SIGHAND, 0)
      → 프로세스에 가깝다.
플래그 의미
CLONE_FS 파일 시스템 정보 공유
CLONE_VM 동일한 메모리 공간 공유
CLONE_SIGHAND 신호 처리기 공유
CLONE_FILES 열린 파일 집합 공유

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

 


요약

  • 쓰레드
      CPU 사용률의 기본 단위
  • 각 프로세스는 많은 쓰레드를 포함 가능
  • 프로세스의 쓰레드
      공유 O : 코드, 데이터, 열린 파일, 신호 처리기
      공유 X : 스택, 레지스터, 쓰레드 ID
  • 쓰레드 특징
      응답성
      리소스 공유
      경제성
      멀티프로세서 아키텍처 활용
  • 리눅스는 프로세스와 스레드를 구분하지 않는다.

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

[OS] 동기화 도구  (0) 2023.04.03
[OS] CPU 스케줄링  (0) 2023.03.27
[OS] 프로세스  (0) 2023.03.13
[OS] 서비스, 시스템 콜, 구조, 부팅 과정  (0) 2023.03.09
[OS] 정의, 구조, 작업, 구성 요소  (0) 2023.03.06

댓글