본문 바로가기

OS/운영체제론

[운영체제론] 스레드 / 2021.10.26

* 참고 자료 : 운영체제론 한빛아카데미

 

1. 스레드 정의 

스레드는 명령어들의 한줄기, 프로그램 제어 흐름 한 가닥을 나타낸다. 멀티 프로세서 시스템에서는 여러 스레드를 동시에 실행할 수 있다.

 

(1) 스레드 특성

- 경량 프로세스라고 하고도 하며, 많은 프로세스의 속성을 가진다.

- 프로세스나 다른 스레드와 독립적으로 주어진 작업을 실행한다.

- 그러나 스레드가 홀로 존재한다는 의미는 아니다. -> 한 프로세스에 속한 스레드들은 프로세스의 여러 자원을 공유한다. -> 프로세스에 있는 스레드들은 병행으로 실행되면서 공통의 목표를 이루려고 협력한다.

- 각 스레드마다 각기 특정 데이터(레지스터, 스택, 신호 마스크 등)를 가진다.

- 프로세스에 속한 주소 공간은 해당 프로세스에 속한 모든 스레드들이 공동으로 사용한다.

 

(2) 스레드 관리

특정 플랫폼에서 스레드를 구현한 방식에 따라 스레드를 운영체제에서 관리하기도 하고, 스레드를 생성한 사용자 프로그램에서 관리하기도 한다.

 

스레드와 프로세스의 관계

 

2. 스레드 사용 동기

(1) 멀티 스레딩 선호 요인

- 소프트웨어 설계 : 많은 프로그램을 독립적인 부분으로 구성할 수 있다. 독립적인 부분들을 개별 스레드로 분리하여 프로그램 성능을 향상하고 병렬 처리 작업을 간단하게 표현한다.

- 성능 : 멀티 스레드 프로그램은 작업을 완료하는데 필요한 시간을 크게 감소시킨다.

- 협력 : 한 프로세스에 속한 스레드들은 주소 공간을 공유하기 때문에 이를 이용해 상호 간 통신이 용이하다.

 

(2) 스레드 사용 예

- 웹서버 : 클라이언트의 요청마다 스레드를 하나씩 할당에 서비스하고 클라이언트의 요청을 수신하는 스레드 등.

- 워드프로세서 : 철자를 체크하는 스레드와 편집 중간중간에 문서 사본을 저장하는 스레드 등.

 

1. 개선된 소프트웨어 설계는 멀티스레드 응용 프로그램의 실행 속도를 어떻게 향상하는가?
답 : 많은 응용 프로그램은 서로 독립적으로 실행할 수 있는 코드 세그먼트들을 포함하고 있다. 이러한 코드 세그먼트들을 개별 스레드로 만들어 여러 프로세서에서 동시에 실행할 수 있다.
2. 같은 프로세스에 속한 스레드들이 통신하는 것이 여러 독립된 프로세스들이 통신하는 것보다 특히 효율적인 이유는 무엇인가?
답 : 같은 프로세스에 속한 스레드들은 프로세스의 주소 공간을 공유해 서로 통신할 수 있기 때문에 커널을 호출하는 IPC메커니즘에 의존하지 않고 통신할 수 있다.

 

3. 스레드 연산

스레드 연산은 대게 프로세스 연산과 똑같지만 프로세스 연산과 일치하지 않는 연산이 2가지 있다.

- 취소 (cancel) : 스레드나 프로세스는 취소를 통해 프로세스나 스레드를 실행 중간에 종료할 수 도 있다. 그러나 프로세스 종료와 달리 스레드 취소는 스레드가 종료함을 보장하지 않는다. 

- 결합 (join) : 주 스레드는 자신의 작업이 다 끝나도 각 스레드가 작업을 완료할 때까지 휴면하는 것이 보통이다. 이를 자신이 생성한 스레드와 결합한다고 한다. 한 스레드가 다른 스레드를 결합하면 이전 스레드는 후자의 스레드가 종료할 때까지 종료되지 않는다.