[운영체제] 스레드의 개념과 상태 변화

hi·2022년 10월 12일
0

운영체제

목록 보기
8/9
post-thumbnail

⭐ 스레드란

프로세스는 자원과 제어로 구분할 수 있다. 그리고 이 중 제어만 분리한 실행 단위를 스레드 (Thread)라고 한다. 하나의 프로세스는 한 개 이상의 스레드로 나뉘어진다. 스레드들은 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유하는데 예를 들어 PC, SP 등의 직접 정보와 스레드 실행 환경 정보 (문맥 정보), 지역 데이터, 스택을 독립적으로 가진다. 그리고 코드, 전역 데이터, 힙 등은 다른 스레드와 공유함.


스레드는 다른 프로세저를 호출하고 다른 실행을 기록해야 하기에 별도의 스택을 가지고 있으며, PC가 독립적이기에 같은 프로세스의 스레드들이 동시에 코드의 동일한 부부닝나 다른 부분을 실행할 수 있다.



프로세스에 포함된 스레드들은 여러 프로세서에서 병렬로 (동시에) 수행되며, 스레드를 이용하면 다음 이점을 얻을 수 있다.



➡️ 사용자 응답성 증가

예를 들어 다중 스레드를 적용한 웹 브라우저는 스레드 한 개가 파일을 로딩하는 동안 다른 스레드는 사용자와 상호작용할 수 있음


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

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


➡️ 경제성 좋음

프로세스를 생성하는 것보다 스레드를 생성를 통한 문맥 교환이 오버헤드에 좋음


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

각 스레드를 여러 프로세서에서 병렬 실행하여 성능과 효율성 높임




⭐ 단일 스레드와 다중(멀티) 스레드

다중 스레드는 프로그램 하나를 여러 실행 단위로 쪼개 실행한다는 측면에서 다중 처리(다중 프로세싱)와 의마기 비슷하지만 동일 프로세스의 스레드들은 서로 자원을 공유하여 자원 생성과 관리의 중복성을 최소화한다는 점에서 다름. 또한 각 스레드는 커널의 개입 없이 독립적으로 실행할 수 있어 서버에서 많은 요청을 효과적으로 처리할 수 있다.



프로세스 관리 측면에서 단일 스레드 프로세스와 다중 스레드 프로세스




⭐ 스레드의 상태 변화

스레드의 상태에는 준비, 실행, 대기, 종료 상태가 있음. 스레드는 프로세서를 함께 사용하고 항상 하나만 실행함. 그리고 하나의 프로세스에 있는 스레드는 순차적으로 실행되며, 해당 스레드의 정보를 저장하는 레지스터와 스택이 있다.

스레드는 프로세스 생성시 함께 생성되며, 해당 프로세스가 스택과 레지스터를 제공하기 때문에 스레드 생성시 운영체제가 부모 프로세스와 공유할 자원을 초기화하지 않아도 됨. 따라서 프로셋스의 생성/종료와 비교했을 때 오버헤드가 훨씬 적음.

또한 스레드를 사용하면 하나의 스레드가 대기 상태 (Wait)로 변하더라도 전체 프로세스를 대기 상태로 바꾸지 않는다. 실행 상태의 스레드가 대기 상태가 되면 다른 스레드가 실행되며, 프로세스 하나에 존재하는 모든 스레드는 해당 프로세스의 모든 주소에 접근할 수 있으므로 스레드 한 개가 다른 스레드의 스택을 읽거나 덮어쓸 수 있다.




⭐ 스레드의 제어 블록 (Thread Control Block, TCB)

스레드의 정보는 TCB에 저장된다. 그리고 프로세스는 여러개의 스레드를 가질 수 있으므로 결국 PCB는 TCB 리스트를 말한다. TCB에는 레지스터 값, PC, SP, 스케줄링 상태, 스레드 ID, 해당 스레드를 포함하는 프로세스 포인터 같은 특정 값 등이 저장된다.

✔️ TCB

  • 실행 상태: 프로세서 레지스터, 프로그램 카운터, 스택 포인터
  • 스케줄링 정보: 상태 (실행, 준비, 대기), 우선순위, 프로세서 시간
  • 계정 정보
  • 스케줄링 큐용 다양한 포인터
  • PCB를 포함하는 포인터

0개의 댓글