운영체제

[운영체제] 스택

parangofsky 2026. 2. 9. 23:53

프로세스와 스레드의 구조를 정리해보면, 멀티 스레드는 하나의 프로세스 안에서 여러 실행 흐름이 동시에 존재하는 방식이었습니다.
이때 운영체제는 CPU 시간을 여러 스레드에 번갈아 할당하면서 실행을 이어가고, 그 과정에서 컨텍스트 스위칭이 발생한다고 했습니다.

 

Q. 같은 프로세스 안에서 메모리를 공유하는데, 스택은 스레드마다 독립적으로 할당하는 이유

 

이번 포스트에서는 이 질문을 중심으로 정리해보겠습니다.


1.  스택은 실행 흐름의 상태를 담는 공간

스택에는 주로 다음 정보가 들어갑니다.

  • 함수 호출 순서(콜 스택)
  • 리턴 주소(어디로 돌아갈지)
  • 매개변수
  • 지역 변수
  • 임시 계산 값

스택은 단순한 메모리 공간이 아니라 지금 이 스레드가 어디까지 실행했는지를 저장하는 실행 기록입니다.


2.  스레드마다 실행 흐름이 다르다

멀티 스레드 환경에서는 스레드마다 실행 흐름이 서로 다릅니다.

예를 들어 같은 프로세스 안에서도,

  • 스레드 A는 main → foo → bar를 실행 중일 수 있고
  • 스레드 B는 main → baz를 실행 중일 수 있습니다.

만약 스택을 공유한다면

  • A가 쌓아둔 호출 프레임 위에 B가 호출 프레임을 덮어써버리는 일이 발생하게 됩니다.

그 순간부터 함수 리턴이 불가능해지고, 프로그램은 정상 동작할 수 없습니다.

 

따라서 스레드가 독립된 실행 흐름이라면, 그 실행 흐름을 담는 스택도 반드시 독립이어야 합니다.


3. 컨텍스트 스위칭이 가능하려면 스택이 분리되어야 한다

컨텍스트 스위칭을 할 때 운영체제는 다음을 저장/복원한다고 했습니다.

  • 레지스터
  • 프로그램 카운터(PC)
  • 스택 포인터(SP)

여기서 핵심은 스택 포인터(SP)입니다.

스레드 A가 멈출 때 A의 SP를 저장해두고
스레드 B를 실행할 때 B의 SP를 복원해야
B는 자기 함수 실행 지점으로 정확히 복귀해서 이어서 실행할 수 있습니다.

 

하지만 스택이 공유된다면,

  • 어느 스레드의 SP가 맞는지 지금 쌓여 있는 프레임이 누구 것인지 자체가 성립하지 않습니다.

즉, 컨텍스트 스위칭은 실행 상태를 저장했다가 다시 복원하는 것인데 그 실행 상태의 핵심이 스택 기반 호출 프레임이기 때문에
스택은 스레드마다 분리되어 있어야 합니다.

 

결론

 

정리해보면,

  • 스레드는 독립적인 실행 흐름
  • 스택은 그 실행 흐름의 상태(호출/리턴/지역변수)를 담는다
  • 스택을 공유하면 실행 상태가 섞여서 정상 동작이 불가능

스택은 스레드의 실행 상태를 저장하는 공간이기 때문에, 스레드마다 독립적으로 할당되어야 합니다.

'운영체제' 카테고리의 다른 글

[운영체제] 복습  (2) 2026.02.16
[운영체제] 프로세스와 스레드  (0) 2026.02.06