쓰레드
웹 서버(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 |
쓰레드
웹 서버(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 |