티스토리 뷰

TIL

[OS] 쓰레드와 멀티 쓰레드

sayho 2022. 2. 4. 20:36
프로세스 단위의 관리의 문제점

주기억장치에 적재된 프로세스의 구조

프로세스 코드를 순서대로 실행하게 되면 원하는 기능의 코드를 찾기까지 (큰 프로그램이라면) 오버헤드가 있을 수 있다.

위의 이미지에서 보는 프로그램은 정말 간단하지만,,  프로세스를 기능단위로 쪼개어 별도로 실행시켜 오버헤드의 단점을 극복하고자 쓰레드(Thread) 라는 개념이 등장했다고 한다. 

쓰레드(Thread)

  쓰레드는 하나의 프로세스에서 코드를 기능별로 구분한 것이다. 그래서 쓰레드를 경량 프로세스라고도 부른다.

  운영체제는 프로세스 단위가 아닌 쓰레드 단위로 스케줄링을 한다. 쓰레드의 장점은 다음과 같다.

  1. 자신의 기능만 수행하면 된다.
  2. 한 쓰레드가 블록되어도 다른 쓰레드는 실행 가능하다
  3. 동일한 프로세스에 포함되는 쓰레드를 각각 다른 CPU에서 실행할 수 있다. 

  동일한 프로세스에 포함되는 쓰레드를 동시에 실행하고 싶은 경우 각 쓰레드마다 프로세스 이미지가 있는 것이

  아닌 하나의 프로세스 이미지를 사용해서 쓰레드를 실행한다. 

쓰레드(Thread) 단위 스케줄링
  1. 하나의 프로세스 이미지를 주기억장치에 생성
  2. 쓰레드 단위로 프로세스 실행
  3. 각 쓰레드는 공통의 프로세스 이미지 정보를 이용해 자신의 프로그램을 개별적으로 실행
  4. 각 쓰레드는 쓰레드 제어블록에 자신의 상태를 저장하여 다음에 스케줄링 되어도 하던일을 실행
단일 쓰레드와 멀티 쓰레드

단일 쓰레드 프로세스 모델과 멀티 쓰레드 프로세스 모델

  멀티쓰레드 모델에서 쓰레드는 PCB(프로세스 제어 블록)을 공유하지만 TCB(쓰레드 제어 블록)은 각각 소유하고

  있다.

단일 쓰레드 장점
  • 단일 쓰레드를 사용하면 프로세스가 사용하는 공유 자원에 대한 동기화를 신경쓰지 않아도 된다. 여러개의 쓰레드가 자원을 사용하기 위해서는 자원에 대한 관리가 필요하지만 단일 쓰레드를 사용한다면 공유 자원에 대한 고민을 하지 않아도 된다. 
  • 쓰레드가 하나이기 때문에 문맥 교환에 대한 비용이 들지 않는다.
단일 쓰레드 단점
  • 만약 프로그램의 크기가 크다면 원하는 기능을 실행시키는 코드를 찾는 비용이 클 것이다.
멀티 쓰레드 장점
  • 프로세스의 스케줄링 비용보다 쓰레드의 스케줄링 비용이 더 적다.
  • 새로운 프로세스를 생성하는 것 보다 기존 프로세스 내에 새로운 쓰레드를 생성하는 것이 더 빠르다.
  • 프로세스 종료 시간보다 쓰레드의 종료 시간이 더 짧다.
  • 동일 프로세스 내의 쓰레드는 메모리 및 파일을 공유하기 때문에 공유 자원을 커널의 개입없이 사용할 수 있다. 
  • 멀티 CPU 환경에서 공통의 목적을 달성하기 위해 쓰레드가 병렬로 수행될 수 있다.
  • 프로세스의 쓰레드 일부가 블록상태가 되도 다른 쓰레드가 실행될 수 있기 때문에 프로세스의 실행은 중단되지 않고 계속될 수 있다.
멀티 쓰레드 단점
  • 공유 자원을 잘 사용해야하기 때문에 관리하기 까다롭다. 예를들어 4개의 CPU에서 동일한 프로세스에 속해있는 쓰레드 4개를 실행한다고 가정해보자. 4개의 쓰레드는 프로세스의 데이터 영역과 힙 영역을 공유한다. 4개의 프로세스가 쓰레드 4개를 실행하고 있다면 공유 자원을 동시에 사용할 수 있다. 그렇기 때문에 조심해야 한다. 
  • 구현하기 어렵다.
 쓰레드 제어 블록(TCB : Thread Control Block) 구성

 

프로세스 전체 구조

  • 쓰레드 ID : 쓰레드를 식별하기 위한 ID
  • 쓰레드 PC(Program Counter) : 쓰레드가 실행해야 할 명령어의 위치를 가리키는 레지스터. 함수 호출을 독립적으로 진행하기 때문에 각 쓰레드마다 PC의 값은 달라야 한다. 
  • 쓰레드 ST(Stack Pointer) : 스택의 데이터가 채워진 위치를 저장한다.
  • 쓰레드의 스케줄링 정보

'TIL' 카테고리의 다른 글

BigDecimal 정리 (1)  (0) 2022.08.08
데이터베이스 트랜잭션  (0) 2022.04.30
[OS] 프로세스 교환을 유발하는 인터럽트와 트랩  (0) 2022.02.04
[OS] 프로세스 상태  (0) 2022.02.03
[OS] 운영체제와 프로세스  (0) 2022.02.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함