스레드의 스택과 레지스터

nGyu·2022년 4월 1일
1

OS

목록 보기
2/10

Thread, 이는 무엇일까?
이는 프로세스 내에서 실행되는 흐름의 단위를 스레드라고 한다.
또, 프로세스 내에서 실제로 작업을 싱행하는 주체 라고 한다.

이 두가지의 설명을 보앗을 때 공통점이 있다. 바로, “프로세스에 의해 실행되는 것” 이라는 공통점이다.

자, 여기서 프로세스안에 스레드가 있다는것으로 보이는데 그럼 프로세스랑 스레드는 같은것일까?
이는 좀 에매한데 이 두개의 차이점을 알아보면 위 질문에 대해서 약간의 답이 될 것 같다.

차이점

프로세스 안에는 다른 어느 누구와도 공유하지 않는 Code, Data, Heap, Stack이 존재한다. 그런데 스레드의 경우 이 Stack과 Register를 독립적으로 할당을 해주게 된다.

이 때 프로세스 하나에 여러개의 스레드가 존재하기도 하며, 위에 할당을 해준 Stack과 Register를 제외한 Code, Data, Heap은 다양한 스레드가 서로 공유한다.


스택을 스레드마다 독립적으로 할당하는 이유

  • 스택은 함수 호출 시 전달되는 인자, 작업 후 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이다.
  • 이에 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 이는 독립적인 실행 흐름이 추가되는 것이다.
  • 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.

PC Register를 스레드마다 독립적으로 할당하는 이유

  • PC값은 스레드가 명령어의 어디까지 수행하였는지를 나타내게 된다.
  • 스레드는 CPU를 할당받았다가 스케쥴러에 의해 다시 선점당한다.
  • 그렇기 때문에, 명령어가 연속적으로 수해오디지 못하고 어느 부분까지 수행했는지 기억할 필요가 없다.
profile
지금보다 내일을, 모레를 준비하자

0개의 댓글