[Operating System] Stack Frame


Stack Frame이란 함수의 호출 정보를 저장하는 자료구조이며, 이 자료구조는 스택으로 되어 있습니다. 이러한 스택 프레임에는 함수로 전달되는 인수와, 함수 실행 모두 마치면 돌아올 복귀 주소와 지역 변수 등의 정보가 들어갑니다. 빠르고 손쉽게 지역 변수 혹은 인수 등에 접근하기 위해 레지스터를 통하여 스택 프레임을 참조할 수 있습니다.


실행 중인 함수는 자신 만의 스택 영역을 사용하게 되고, Stack Frame을 열게되고, 종료할 시 Stack Frame을 닫게 됩니다. 


위의 그림은 Stack Frame의 구조입니다. 스택 프레임은 Stack Pointer, Frame Pointer 등의 요소로 이루어져 있으며 각각 다음과 같은 기능을 합니다.


1. Frame Pointer : 함수의 Stack Frame 시작 위치를 가리키는 포인터이며 레지스터에 의해 유지됩니다. Stack Frame을 오픈할 때 쓰이며 Stack Frame이 종료 시까지 변하지 않습니다.


2. Stack Pointer : 스택의 Top부분을 가르키는 포인터입니다.


또한 Stack Frame의 호출과정은 다음과 같습니다.


--- 준비 과정 (prolog)

1. 인자를 스택에 넣는다.

2. 함수를 호출한다.

3. 프레임 포인터를 설정한다.

4. 로컬 변수를 위한 공간을 할당한다.

5. 호출한 함수의 실행 상태를 보존한다.

--- 여기서 부터는 실행 및 회수과정 (epilog)

6. 함수를 실행한다.

7. 호출한 함수의 실행 상태를 복구한다.

8. 스택을 정리하고 프레임 포인터를 복구한다.

9. 함수로 돌어간다.

10. 인자들을 정리한다.


이 글을 공유하기

댓글(0)

Designed by JB FACTORY