본문 바로가기

Studying/Operating System

03. Process (2/3), (3/3)

1. Thread: CPU를 이용하는 기본 단위

-> 같은 작업을 하는 새로운 프로세스를 만들 경우, 프로세스를 만들기 위한 여러 가지 것들이 중복을 필요하는 문제가 발생

-> Thead를 활용하면 Thread에 필요한 부분만 추가로 만들면 됨

가. 구성

1) 공유하지 않는 부분(thread 생성 때마다 독립적으로 생기는 부분)

가) program counter

나) register set

다) stack space

2) 공유하는 부분

가) code section

나) data section

다) OS resource

나. 특징

1) 다중 스레드로 구성하면 한 스레드가 blocked(wait) 상태일 동안 다른 스레드가 running 상태가 되어 빠르게 처리할 수 있음

2) 동일한 일을 수행할 때, 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있음(자원 효율도)

3) 스레드를 사용하면 병렬성을 높일 수 있음


*PCB에서 OS 관리용 정보, CPU 정보, Resouce 관리용 정보가 있는데, thread를 생성하면 CPU관련 정보만 추가로 만들면 됨


다. 장점

1) 응답성 (Responsiveness): 하나의 스레드가 웹서버에 요청하면 blocked 되는데 다른 스레드가 읽어온 것을 표시함

2) 자원 공유(Resource Sharing): 똑같은 일을 여러개 할 때, 하나의 프로세스가 여러 스레드가 같은 자원을 사용해서 효율적

3) 경제성 (Economy): 더 빠르다는 의미 (응답성과는 약간 다름)

-> 새로운 프로세스를 만들거나 프로세스 끼리 CPU Switching을 하는 것보다 스레드에서 하는 것이 오버헤드가 훨씬 적음

-> 위 3개는 CPU가 1개일 때도 사용가능함

4) Utilization of MP Architectures: CPU가 여러개일 때, 서로 다른 CPU에서 병렬적으로 작업을 할 수 있음


라. 구현 방법

1) Kernel Threads: Kernel에서 지원하는 법 (커널이 Thread가 여러개라는 것을 알고 있음)

2) User Threads: 라이브러리에 의해 지원하는 법(커널이 모르고 유저가 직접 관리함, 구현상의 제약점이 있을 수 있음)

3) real-time Threads