스레드의 개념과 상태 변화

0andme·2021년 8월 14일
0

운영체제

목록 보기
6/6

◼ 스레드의 개념

프로세스를 자원과 제어로 구분할 수 있는데 이 중 제어만 분리한 실행 단위를 스레드라고 한다.
프로세스는 여러 개의 스레드로 나눌 수 있다. 여러 스레드들은 프로세스와 직접적인 실행 정보를 제외한 나머지 부분을 공유하고 프로세스처럼 자신만의 실행 정보를 담을 레지스터와 데이터를 위한 데이터, 스택을 가지고 있다. 아래와 같이 같은 프로세스의 스레드들은 동일한 주소 공간을 공유한다.
스레드는 프로그램 카운터를 독립적으로 가지고 있기 때문에 프로세서가 여러 개라면 같은 프로세스의 스레드들을 동시에 실행할 수 있다.

단일 스레드와 다중 스레드

프로세스에 스레드가 1개라면 단일 스레드, 스레드가 2개 이상이면 다중 스레드라고 한다. 프로세서 개수와 한 프로세스당 스레드 개수에 따라 아래와 같이 다양한 유형이 나올 수 있다.

모든 스레드가 해당 프로세스의 자원을 공유하고, 같은 주소 공간에 있고, 동일한 데이터에 접근할 수 있다. 그러므로 스레드 한 개가 전역 데이터를 변경하면 다른 스레드도 데이터가 변경된 것을 확인 할 수 있다.

프로세스보다 스레드를 생성하는 것이 더 빠르고, 동일한 스레드 간의 데이터 교환도 더 빠르다. 물론 스레드를 만들면 그 만큼 스레드를 위한 별도의 저장 공간을 생성해야하지만 프로세스의 기능을 나눠 또다른 프로세스를 여러 개 생성하는 것보다 한 프로세스를 여러 개의 스레드로 나눠 병렬로 작업을 처리하는 것이 더 효율적이다.

◼ 스레드의 상태 변화


프로세스처럼 스레드도 생성, 준비, 실행, 대기, 종료 상태를 가지고 있으며 실행을 위해 하나의 프로세서를 사용한다. 보통 프로세스가 생성되면 스레드도 함께 생성되는데 부모 프로세스의 자원을 공유하기 때문에 새로 복사해올 필요가 없어 프로세스의 생성과 종료보다 오버헤드가 적다.

또 스레드 하나가 상태를 바꾼다고 해서 다른 스레드나 부모 프로세스의 상태 변화에 영향을 끼치지 않는다. 스레드 각각은 독립적으로 실행되나 자원만 함께 같이 사용하는 것이다.

프로세스의 PCB와 마찬가지로 스레드도 스레드 제어 블록 TCB를 가지고 있다. 상태가 변화할 때 TCB에 ID, 상태 정보, 레지스터 값, 포인터 값, 스케쥴링 상태 등을 저장한다.

이때 프로세스는 스레드를 여러 개 가지고 있으므로 PCB는 TCB 리스트라고 생각 할 수 있다.

profile
개발이 하고 싶어? 정말 하고 싶긴 한거야?

0개의 댓글