프로세스와 스레드의 연관성
- 프로세스는
할당
받은 자원을제어
함.
- 이 중에 제어 부분만 따로 떼어놓은 것을
스레드
라 함.
- 이 스레드는 여러 개 있음 = 하나의 프로세스 내 여러 스레드가 있을 수 있음 = 제어는 여러 개가 있음.
- 사람 손은 두 개지만 여러 도구를 다룰 수 있는 것처럼!
스레드란?

- 자원 영역과 제어 영역이 있음.
- 스레드에는 제어정보(SP, PC, 상태 등), 지역 데이터, 스택이 있음.
- ex) 지역 데이터는 for문의 스코프를 생각하면 됨.
- 여기서 자원을 공유한다는 개념이 중요함.
- 같은 프로세스의 스레드들은 동일한 주소 공간을 공유함.
- 스레드에 대한 정의들.
- Light Weight Process (LWP) - 프로세스는 자원과 제어를 각각 가지지만 스레드는 자원은 공유하고 제어만 하니 일반 프로세스보다 가벼움.
- 프로세서(CPU) 활용의 기본 단위 - 스레드가 여러 개면(
multi-threads
동시에 여러 CPU를 사용할 수 있음. - 구성요소
- Thread ID
- Register Set (PC
program counter
, SPstack point
등) - Stack ex) local data
- 제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유.
- 전통적 프로세스 = 단일 스레드 프로세스.
스레드 장점
- 뛰어난 반응성/응답성(Responsiveness)
- 프로세스의 일부가 blocked 상태여도 실행을 계속하는 것이 가능함.
- 유저 인터페이스에 있어 중요함. 특히 게임처럼 동시에 여러 개를 처리하는 환경에서 스레드가 유용함.
- 자원 공유(Resource Sharing)
- 자원을 공유해서 효율성이 증가함.
- 커널의 개입을 피할 수 있음.
- 경제성(Economy)
- 스레드를 생성하는 것이 프로세스를 생성하는 것보다 비용이 적게 듦 (오버헤드가 적음).
- 비용 : thread switching(스레드 전환) < context switching(컨텍스트 전환, 즉 프로세스 전환)
- 확장성(Scalability)
- 프로세스가 멀티 프로세서 구조의 이점을 적극적으로 활용할 수 있음. 즉, 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가함,
스레드의 구현
- 사용자 수준 스레드 (User thread)
- 사용자 영역의 스레드 라이브러리로 구현됨. ex) java thread
- 장점
- 커널은 스레드의 존재를 모르기 때문에 커널의 관리, 개입을 받지 않음 → 생성 및 관리의 부하가 적음, 유연한 관리 가능.
- 이식성이 높음 - 라이브러리만 있다면 사용 가능.
- 단점
- 커널은 프로세스 단위로 자원을 할당함.
- single-thread kernel의 경우 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기해야 함.

- 커널 수준 스레드 (kernel thread)
- OS(kernel)가 직접 관리.
- 단점
- 커널 영역에서 스레드의 생성, 관리 수행 → context switching 등 부하(overhead)가 큼.
- 장점
- 커널이 각 스레드를 개별적으로 관리, 프로세스 내 스레드들이 병행 수행 가능.
- 하나의 스레드가 block 상태여도 다른 스레드는 계속 작업 수행 가능.
- 다대일 (n:1) 모델
- 사용자 수준 스레드
- 일대일 (1:1) 모델
- 커널 수준 스레드
- 혼합형 (n:m) 모델
- 혼합형 스레드
- 사용자는 원하는 수만큼 스레드 사용
- 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도, 다른 스레드 수행 가능 (동적으로 스레드를 할당하고 병행 처리 가능)
- 효율적이고 유연하다는 장점이 있음.
- 실제 OS에서 사용하는 모델임.
Multi-Threading Model
