Recursion을 지원하는 언어의 경우
코드는 반드시 Reentrant, 재진입이 가능해야한다.
하나의 함수가 동시에 여러 번 실행 가능
각 실행마다 arguments, local variables, return pointer를 저장할 공간이 필요한데 이를 Stack으로 해결한다.
Stack discipline
함수 상태는 호출되고 나서 리턴될 때 까지의 시간만 필요함.
callee(호출 된 함수)가 caller(호출 한 함수)보다 먼저 종료되어야함.Stack frame
함수 상태(arguments, local variables, return pointer)를 저장하는 stack 공간
구성
관리
x86-64/Linux Stack Frame
Callee Stack Frame
- Argument build : caller로부터 받은 arguments
- Local variables : 지역 변수들
- Saved register context : 저장된 register 정보
- Old frame pointer
Caller Stack Frame
- Return address
- Arguments build
.
.
함수들은 register를 돌려 쓴다. register는 한정되어있기 때문.
이 과정에서 register에 저장해둔 값이 덮어써지는 것을 방지해야한다.
Caller Saved Convention
Caller 함수가 register 값을 stack에 백업해 두고 함수를 call 한다.
Callee Saved Convention
Callee 함수가 실행 전 본인의 frame에 현재 값들을 백업한다.
Caller에게 리턴하기 전 이 값들을 복원한다.
<참고자료>
Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition
안성용, "시스템소프트웨어", 부산대학교