본문 바로가기

카테고리 없음

[HMobility] 차량용 RTOS 기반 프로그래밍 (스레드)

Thread와 Process 사이의 주요한 차이점?

  • 프로세스와 달리 쓰레드 사이에서는 동일한 address space 및 global variable을 공유함
  • RTOS에서는 Thread를 더 많이 사용하게 된다
  • 쓰레드 스위칭은 CPU의 작업 흐름을 크게 방해하지 않으며, 비교적 가벼운 작업이다.
  • 프로세스 스위칭은 context switching을 포함하기 때문에 상대적으로 무거운 작업이다.

-> 처음에는 프로세스가 먼저 등장하고 process는 변수를 공유하는 등의 작업을 할 수 없다는 단점이 있었습니다. 또한, 프로세스 스위칭은 메모리 cost를 많이 잡아먹고 성능을 느려지게 하는 원인이 되었습니다. 따라서 thread라는 좀 더 상대적으로 가벼운 개념이 등장했고 지금은 task가 컴퓨터에서 일을 수행하는 기본 단위입니다. 

메모리의 할당된 주소 공간을 바꾸냐, 바꾸지 않느냐가 비교 요소가 됨을 볼 수 있습니다.
쓰레드는 같은 주소 공간 내에 있으니 스위칭에 소모되는 cost가 없습니다.

 

 

Thread

  • 프로세스를 경량화 한 것으로 Thread 간에는 address space 및 global variable를 공유함
  • 프로세스 내에서 하나로 실행되는 흐름, 프로세스는 여러 개의 쓰레드 포함 가능
  • 프로세스를 경량화한 것
  • 서로 다른 Program Counter, Stack Point, Register 사용
  • 현재의 프로세스 안에서 추가적으로 새로운 쓰레드를 만드는 것이 프로세스를 만드는 것보다 훨씬 적은 시간 소요
  • 쓰레드 간에는 별도의 통신을 사용하지 않고도 공통의 데이터를 공유할 수 있음
  • 쓰레드 스위칭이 프로세스 스위칭보다 더 빠르다
  • 쓰레드를 종료하는 것이 프로세스를 종료하는 것보다 더 시간이 덜 소요된다

 

Thread Switching

  • Running thread가 ready나 blocked로 바뀌고 ready thread가 running으로 바뀌는 것

 

 

프로그램 카운터란 결국 현재 실행되는 프로세스의 메모리 주소를 저장하는 레지스터를 의미한다. 즉, 현재 실행 중인 코드의 메모리 상에서의 위치입니다. 프로세스는 개별적인 프로그램 카운터를 갖지만 , 스레드는 자신의 개별적인 스택과 프로그램 카운터를 갖습니다.
스레드는 개별적인 스택 포인터, 프로그램 카운터를 갖습니다." 캐시를 바꾸지 않아도 된다"는 맞는 설명입니다.

 

-> 캐시는 CPU 내에 있지만, "프로세스 단위"가 아니라 "메모리 주소 단위"로 동작

  • 같은 주소 공간을 공유하는 스레드는 캐시를 공유 가능
  • 서로 다른 프로세스는 캐시를 다시 채워야 할 가능성이 높음

 

 

***개인적으로 공부한 것을 메모한 것입니다. 틀린 부분이 있을 수 있습니다***