스레드

반응형
728x90
반응형

스레드

프로세스는 두가지 특정 자원, 제어로 구분할 수 있는데 '제어'만 분리한 실행 단위를 '스레드'라고 한다.

프로세스 하나는 스레드 한  개 이상으로 나눌 수 있다. 스레드들은 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유한다.

 

스레드의 구조

https://vicente-blog.com/blog/65/

 

스레드는 별도의 스택이 필요하고, 프로그램 카운터가 독립적이라서 같은 프로세스의 여러 스레드들이 동시에 코드의 동일한 부분이나 다른 부분을 실행할 수 있다. 스레드는 관련 자원과 함께 메모리를 공유할 수 있는데, 이 때문에 손상된 데이터나 스레드의 이상 동작을 고려해야한다. 

 

응용 프로그램은 적어도 하나의 프로세스가 있고, 프로세스에는 스레드가 1개 이상 있다. 같은 프로세스의 스레드들은 동일한 주소 공간을 공유한다. (위 사진에서 스택을 제외한 공간을 공유하고있다.)

 

 

스레드 병렬 수행

프로세스 하나에 포함된 스레드들은 공동의 목적을 달성하려고 병렬로 수행한다. 즉, 프로세스가 하나인 서로 다른 프로세서에서 프로그램의 다른 부분을 동시에 실행할 수 있는데, 이때 스레드를 사용하면 아래와 같은 장점이 존재한다.

 

▶ 사용자 응답성 증가

응용 프로그램의 일부분을 봉쇄하거나 긴 작업을 수행하더라도 병렬 프로그래밍으로 프로그램을 계속 실행할 수 있어 사용자 응답성이 증가한다. 다중 스레드를 적용한 웹 브라우저는 스레드 1개가 파일을 로딩하는 동안 다른 스레드는 사용자와 상호작용을 할 수 있다.

 

▶ 프로세스의 자원과 메모리 공유 가능

스레드들이 프로세스 자원 하나와 메모리를 공유하므로 응용 프로그램 하나가 동일한 주소 공간에서 스레드를 여러개 실행하여 시스템 성능을 향상시킬 수 있다.

 

▶ 경제성이 좋음

프로세스를 생성하는 것보다 스레드를 생성하여 문맥을 교환하면 오버헤드가 줄어든다.

 

▶ 다중 처리(멀티 프로세싱)로 성능과 효율 향상

각 스레드를 여러 프로세서에서 병렬로 실행하여 성능과 효율성을 높일 수 있다.

 

 

 

단일 스레드와 다중 스레드

운영체제는 단일 프로세스에서 단일 스레드 실행(스레드를 1개 실행)이나 다중 스레드 실행(스레드를 여러개 실행)을 지원한다. 

http://mm.sookmyung.ac.kr/~bigrain/class/2011/mmso/StallingsOS6e-Chap04.pdf

 

동일한 프로세스의 스레드는 자원을 공유하므로 자원 생성과 관리의 중복성을 최소화하여 실행 능력을 향상시킬 수 있다. 

모든 스레드가 해당 프로세스의 자원을 공유하고, 같은 주소 공간에 있고, 동일한 데이터에 접근한다. 

스레드 1개가 전역 데이터를 변경하면 다른 스레드도 이 데이터에 접근하여 변경 결과를 확인할 수 있다. 

이러한 특성 때문에 프로세스보다 스레드를 생성하는 것이 더 빠르고, 동일한 프로세스에 있는 스레드 간의 교환이나 스레드 종료도 훨씬 빠르다. 

 

 

 

웹에서의 스레드 사용

현재 실행중인 스레드를 대기 상태로 바꾸고 제어를 다른 스레드로 옮기는 상태 변화를 이용하여 많은 요청을 효과적으로 처리할 수 있다.

다중 스레드의 개념을 적용한 웹 브라우저는 스레드 한개가 이미지나 텍스트를 로딩하는 동안 다른 스레드는 네트워크에 연결하여 데이터를 검색할 수 있다.

또 다른 스레드는 사용자와 상호작용 등을 할 수 있으므로, 웹 서버는 여러 사용자가 동시에 접근하여 요청한 웹 페이지나 이미지를 효과적으로 처리할 수 있다.

 

 

 

스레드의 상태 변화

스레드도 프로세스처럼 준비, 실행, 대기(보류), 종료 상태가 있다. 스레드는 프로세서를 함께 사용하고 항상 하나만 실행한다. 또 한 프로세스에 있는 스레드는 순차적으로 실행하고, 해당 스레드의 정보를 저장하는 레지스터와 스택이 있다.

 

https://velog.io/@0mi/%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%83%81%ED%83%9C-%EB%B3%80%ED%99%94

 

보통 프로세스를 생성하면 해당 프로세스의 스레드도 함께 생성한다. 

스레드 생성에서는 운영체제가 부모 프로세스와 공유할 자원을 초기화할 필요가 없다. 

해당 프로세스가 스택과 레지스터를 제공하기 때문이다. 그러므로 프로세스의 생성, 종료보다는 오버헤드가 훨씬 적다.

 

 

스레드의 제어 블록 (TCB)

프로세스가 프로세스 제어 블록(PCB)에 정보를 저장하듯이, 스레드도 스레드 제어 블록(TCB; Thread Control Block)에 정보를 저장한다. 프세스는 스레드 한개 이상을 가질 수 있으므로, 결국 프로세스 제어 블록은 스레드 제어 블록의 리스트를 가리킨다.

 

스레드 제어 블록도 레지스터 값, 프로그램 카운터, 스택 포인터, 스케줄링 상태 외에도 스레드 ID와 해당 스레드를 포함하는 프로세스 포인터 같은 특정 값도 저장한다. 

 

https://yeo-computerclass.tistory.com/15

 

 

반응형

Designed by JB FACTORY