YUNA's Programming
DAY 4 스레드의 개념 본문
스레드의 개념
; 프로세스의 특성인 자원과 제어에서 제어만 분리한 실행 단위
; 프로세스 하나는 스레드 한 개 이상으로 나눌 수 있음
; 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보 공유
; 다른 프로시저 호출, 다른 실행 기록(별도 스택 필요)
; 관련 자원과 함께 메모리 공유 가능하므로 손상된 데이터나 스레드의 이상 동작 고려
경량 프로세스 LWP (Light Weight Process)
; = 스레드
; 프로세스 속성 중 일부가 들어 있는 것
중량 프로세스 HWP (Heavy Weight Process)
; 스레드 하나에 프로세스 하나인 전통적인 경우
**같은 프로세스의 스레드들은 동일한 주소 공간 공유
**동일 프로세스의 여러 스레드는 코드 영역, 데이터 영역, 운영체제 자원을 공유
ex) 열린 파일, 시그널
** 프로세스가 다수의 제어 스레드를 가진다면, 프로세스는 동시에 하나 이상의 작업을 실행할 수 있음
스레드 병렬 수행
; 프로세스 하나에 포함된 스레드들은 공동의 목적 달성을 위해 병렬 수행
; 프로세스가 하나인 서로 다른 프로세서에서 프로그램의 다른 부분 동시 실행
스레드 병렬 수행의 이점
- 사용자 응답성 증가
- 프로세스의 자원과 메모리 공유 가능
- 경제성 좋음
- 다중 처리(멀티 프로세싱)로 성능과 효율 향상
단일스레드
; 프로세스 하나에 스레드 하나가 실행되는 전통적인 방식으로
스레드의 개념이 불확실함
ex) DOS
다중스레드
; 프로그램 하나를 여러 실행 단위로 쪼개어 실행한다는 측면에서
다중 처리 (다중 프로세싱)와 의미가 비슷함
** 스레드별로 실행 환경 정보가 따로 있지만, 서로 많이 공유하므로,
프로세스보다 동일한 프로세스의 스레드에 프로세서를 할당하거나
스레드 간의 문맥 교환이 훨씬 경제적임
스레드 이용 예제
; 현재 운영체제의 대다수 소프트웨어 패키지는 다중 스레드를 지원함
; 웹 브라우저의 스레드 이용
- 이미지와 텍스트를 표시(display)하는 스레드 1개
- 네트워크로부터 데이터를 읽어내는 스레드 1개
; 워드 프로세서의 스레드 이용 예
- 그래프를 표세(display)하는 스레드 1개
- 스펠링, 문법 검사를 수행하는 스레드 1개
++ 웹 서버
; 단일 스레드 웹 서버
- 한 클라이언트 요청에 대한 서비스를 완료할 때까지
다른 클라이언트 요청에 대한 서비스를 기다려야 함
; 다중 프로세스 웹 서버
-스레드가 일반화되기 전에 사용되엇으며, 새로운 프로세스를
생성하여 추가적인 클라이언트 요청을 처리함
; 다중 스레드 웹 서버
- 프로세스에 비해 오버헬드가 작은 스레드를 생성하여
여러 클라이언트에 대해 동시에 서비스 함
- 여러 스레드들이 커널 내에서 동작함
- 각 스레드는 장치를 관리하거나 인터럽트를 처리하는 등 특정 작업을 수행함
다중스레드 프로그램의 장점
; 반응성(Responsiveness)
- 상호작용 응용의 다중 스레딩은 하나의 스레드가 일시 봉쇄(blocking)되어도
다른 스레드는 수행을 계속하게 함 -> 사용자 응답성 증가
; 자원공유(Resource Sharing)
- 하나의 프로세스에 속한 여러 스레드는 메모리 등의 자원을 공유
; 경제성 (Economy)
- 스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에
스레드를 생성하고 문맥을 교환하는 것이 보다 더 경제적임
; 확장성(Scalability) ~ 다중 프로세서 구조의 활용
- 다중 프로세서 (다중 코어) 시스템에서 스레드는
서로 다른 플세서(코어)에서 병렬로 실행될 수 있음
다중 스레드 모델
; 사용자 스레드 (User thread)
- 사용자 레벨 스레드 라이브러리에 의해 이루어짐
- 커널 위(Above)에서 동작하므로, 커널의 지원 없이 관리됨
ex) POSIX Pthreads , Win32 threads, Java threads
; 커널 스레드 (Kernel thread)
- 운영체제 커널에 의해 직접 지원받고 관리됨
ex) Windows XP/2000, Solaris, Linux, Tru64 Unix, Mac OS X
**운영체제 커널은 커널 수준에서 스레드를 지원하고 관리함
**사용자 스레드는 프로그래머에게는 보이나 커널에게는 알려지지않은 스레드임
** 일반적으로 사용자 스레드는 커널의 개입이 필요 없기 때문에, 커널 스레드보다 더 빨리 생성하고 관리할 수 있음.
사용자 스레드들과 커널스레드들 사이의 관계
다대일 (Many-to-One) 모델
; 여러 사용자 스레드들이 하나의 커널 스레드에 매핑됨
; 한번에 하나의 스레드만이 커널에 접근할 수 있기 떄문에,
다중 스레드가 다중 프로세서에서 돌아도 병렬로 작동할 수 없음
ex) Solaris 스레드 라이브러리, GNU Portable 스레드
일대일 (One-to-One) 모델
; 하나의 사용자 스레드는 하나의 커널 스레드에 매핑됨
; 다대일 모델보다 더 많은 병렬성을 제공함
다대다 (Many-to-Many) 모델
; 여러 사용자 스레드가 여러 커널 스레드와 매핑됨
ex) Solaris 9 이전 버전, ThreadFiber 패키지를 가진 Windows NT/2000
스레드의 상태변화
; 프로세서와 함꼐 사용, 항상 하나만 실행
; 한 프로세스에 있는 스레드는 순차적 실행, 해당 스레드의 정보 저장레지스터, 스택)
; 프로세스의 생성과 종료보다는 오버헤드가 훨씬 적음
; 실행 상태의 스레드가 대기 상태가 되면, 다른 스레드 실행가능 (서로 독립적이지 않음)
스레드 제어 블록(=TCB)
; 정보 저장
; 프로세스 제어 블록은 스레드 제어 블록의 리스트
; 스레드 간에 보호 하지 않음
**TCB의 내용
; 실행 상태
- 프로세서 레지스터, 프로그램 카운터, 스택 포인터
; 스케쥴링 정보
- 상태(실행, 준비, 대기), 우선순위, 프로세서 시간
;계정 정보
Question
프로세스와 스레드의 차이점은?
프로세스는 실행 중인 프로그램으로 리소스와 스레드로 구성되어 있다.
그리고 프로세스는 하나 이상의 스레드를 가지고 있다. 스레드는 경량화된 프로세스로서
프로세스 내에서 실제 작업을 수행하고 있습니다.
'Computer Engeering > OS' 카테고리의 다른 글
DAY 3 프로세스의 개념 (0) | 2023.03.23 |
---|---|
DAY 2 운영체제의 기능과 서비스 (1) | 2023.03.18 |
DAY 1 운영체제 개요 (0) | 2023.03.18 |