HJW's IT Blog

Frame Pointer, Stack Pointer 본문

OS

Frame Pointer, Stack Pointer

kiki1875 2023. 4. 2. 12:52

Frame pointer 와 stack pointer 는 컴퓨터 아키텍처에서 스텍을 관리하기 위한 포인터 이다.

Stack은 데이터를 임시로 저장하는 메모리 구조로 LIFO 구조를 가지고 있다. 스텍의 데이터를 처리할 때, 가장 위에 있는 데이터를 우선적으로 처리한다.

 

각 함수는 매개변수 및 지역변수를 일시적으로 저장하는 지역 메모리가 있는데, 이를 Stack frame 이라 하며 process의 스텍에 할당된다. 

 

함수 내부의 지역변수에 접근하기 위한 코드는 Frame Pointer 에 대한 오프셋으로 생성된다

 

Frame Pointer는 함수 내에서 변경이 불가능 하다

 

Frame Pointer

Frame Pointer 는 함수 호출시 생성되는 프레임을 가리키는 포인터이다. 함수가 호출될 때, 프레임 포인터는 스텍에 새로운 프레임을 생성하고 그 프레임의 맨 위 주소를 가리킨다. 함수 실행 도중에는 프레임 포인터가 그대로 유지되며 함수 실행이 끝나면 해당 프레임이 스택에서 제거된다.

 

Stack Pointer

Stack Pointer 는 스택의 top을 가르키는 포인터 이다. 스택에 데이터가 쌓일때, 제거 될때 마다 stack pointer 는 새로운 위치를 가르키게 된다. 

 

함수 호출시 일어나는 일

  1. Frame Pointer 의 현제 값을 Stack 에 Push
  2. 현재 Stack Pointer를 Frame Pointer 로 이동
  3. 함수에서 사용되는 데이터 공간을 SP에서 빼서 할당
    1. 함수에서 사용할 공간 끝에 sp를 위치시키는데, 이는 stack에 push 되는 값들을 덮어쓰지 않기 위함
  4. 함수 코드 실행, 지역 변수에 대한 참조는 프레임 포인터의 음수로 표현
  5. 함수 종료시 frame pointer 의 값을 stack pointer 에 복사시키고 이전의 frame pointer 를 pop 시킨다
  6. ret 명령어로 return. 이로써 스텍에서 반환값을 pop 시키고 해당 주소로 실행 전환

'OS' 카테고리의 다른 글

OS:Cooperating Process  (0) 2023.04.06
CPU Scheduler  (0) 2023.04.03
OS: Process  (0) 2023.04.02
OS Management + System Call  (0) 2023.04.01
OS 개요  (0) 2023.03.31