같은 프로세스의 스레드들은 동일한 주소 공간을 공유한다.
사용자 응답성
- 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능
자원 공유 (Resource Sharing)
- 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있음)
ex) 도일 address space에서 스레드 여러개
경제성 (Economy)
- 프로세스의 생성, Context Switch에 비해 효율적
멀티 프로세서 (Multi - Processor) 활용
- 벙렬 처리를 통해 성능 향상
사용자 영억의 스레드 라이브러리로 구현 됨
- 스레드의 생성 및 종료, 스케쥴링, 컨텍스트 등
커널은 스레드의 존재를 모름
장점: 커널의 개입을 받지 않음
1. 이식성이 높음
커널에 독립적으로 스케쥴링을 할 수 있어 모든 운영체제에 적용할 수 있다.
2. overhead가 적음
스케쥴링이나 동기화를 하려고 커널을 호출하지 않으므로 커널 영역으로 전환하는 오버헤드가 줄어든다.
3. 유연한 스케쥴링이 가능
커널이 아닌 스레드 라이브러리에서 스레드 스케줄링을 제어하므로 응용 프로그램에 맞게 스케줄링을 할 수 있다.
단점: 커널은 프로세스 단위로 자원 할당
1. 시스템의 동시성을 지원하지 않음
스레드가 아닌 프로세스 단위로 프로세서를 할당하여 다중 처리 환경을 갖춰도 스레드 단위로 다중 처리를 하지 못한다. 동일한 프로세스의 스레드 한개가 대기 상태가 되면 이 중 어떤 스레드도 실행하지 못한다.
2. 확장에 제약이 따름
커널이 한 프로세스에 속한 여러 스레드에 프로세서를 동시에 할당할 수 없어 다중 처리 시스템에서 규모를 확장하기 어렵다
3. 스레드 간 보호 불가능
스레드 간 보호에 커널의 보호 방법을 사용할 수 없다. 스레드 라이브러리에서 스레드 간 보호를 제공해야 프로세스 수준에서 보호가 가능하다.
사용자 수준 스레드의 한계를 극복하는 방법으로, 커널이 스레드와 관련 된 모든 작업을 관리한다.
하나의 스레드가 block 상태가 되어도, 다른 스레드들은 계속 작업 수행
Context Switching등 부하(Overhead)가 큼
유저 레벨 스레드 | 커널 레벨 스레드 | |
---|---|---|
장점 | 전환이 필요 없기 때문에 성능이 좋음 | 안전성, 기능의 다양성 |
단점 | 프로세스 내에 스레드가 하나만 블로킹 되어도 나머지 스레드가 작동하기 어려움 | 커널에서 기능을 제공하기 때문에 속도 저하 |
-보통 운영체제는 유저 레벨 스레드와 커널 레벨 스레드 모두 제공한다. 두 스레드간의 관계 모델 유형을 살펴보면 다음과 같이 3가지로 분류할 수 있다.
프로세스 | 스레드 | |
---|---|---|
정의 | 실행중인 프로그램 | 프로세스의 실행 단위 |
생성 및 종료 시간 | 많은 시간 소요됨 | 적은 시간 소요됨 |
context 전환 | 많은 시간 소요됨 | 적은 시간 소요됨 |
상호작용 | IPC 사용 | 공유 메모리 사용 |
자원 소모 | 많음 | 적음 |
독립성 | 각각 독립적 | 스택만 독립적이고 이외에는 공유 |
컨텍스트 전환(contetxt switch)은 다른 프로세스의 수행을 위해 실행되고 있는 프로세스의 현재 상태를 저장하는 절차를 의미한다. 다시 말해, 실행되고 있던 프로세스의 내용을 프로세스 제어 블록에 저장하고 다른 프로세스의 컨텍스트를 그 프로세스의 제어 블록으로부터 불러와 실행하는 것이다. 컨텍스트 전환 시간은 하드웨어에 지원에 따라 크게 달라지기 때문에 시스스템마다 다르며, context switch이 일어나는 동안은 아무런 작업이 수행되지 않아 순수한 오버헤드(overhead)다.
프로그램을 구현할 때 연산량 증가, 모듈화, 편의성 등의 이유로 하나의 작업을 여러 개의 프로세스로 구성하거나 여러 개의 스레드로 구성한다. 전자를 멀티프로세스(multi-process), 후자를 멀티스레드(munlti-thread)라고 한다.
각각의 장점은 각각의 단점이 되는데, 이는 프로세스와 스레드의 차이점에서 기인한다. 즉, 멀티 프로세스는 시스템 자원을 많이 사용하고 프로세스 간 통신이 어려운 반면 여러 개의 프르세스 중 하나에 문제가 발생하면 그 문제가 다른 프로세스로 확산이 되지 않지만, 멀티 스레드는 시스템 자원은 적게 소모하고 스레드 간 통신은 쉽지만 반면 공유 메모리의 동기화가 문제가 된다.