Stack frame
Stack에서 주로 사용되는 세 개의 레지스터로는 EBP, ESP, EIP가 있습니다.
EBP는 Stack frame의 시작점을 가리키고
ESP는 Stack의 TOP을 가리키고
EIP는 다음에 실행할 명령의 offset을 가지고 있습니다.
다음 그림은 시스템에서 프로그램이 실행되고 함수가 호출될 때 stack의 변화를 나타낸 그림입니다.
main()이 실행되는 중에 func1()을 호출하면 func1()에게 stack을 할당합니다.
이때 func1의 실행이 끝나면 다시 main()으로 돌아와야 합니다.
그러기 위해 Return address를 stack에 넣어둡니다.
같은 방식으로 func1()에서 func2()를 호출합니다.
위와 같은 상황에서 Stack frame은 호출된 함수가 실행되는 동안
호출한 함수의 지역변수나 실행에 필요한 정보가 손실되지 않도록 stack에 저장하는 구조를 의미합니다.
Stack frame에 저장하는 정보는 다음과 같습니다.
- 함수의 실행이 종료된 후에 return 할 주소
- 지역 변수
- 자신을 호출한 함수의 Stack frame 위치
- Register와 같은 기계 상태
- 예외 처리 리스트 등
'OS > Concept' 카테고리의 다른 글
Copy On Write (0) | 2012.11.15 |
---|---|
CPU register (0) | 2012.08.18 |
Little endian (0) | 2012.08.16 |
Stack에 변수가 저장되는 방식 (0) | 2012.08.16 |