Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- factory
- Volatile
- 일급 컬렉션
- OAuth 2.0
- spring security
- 일급 객체
- synchronized
- Dependency Injection
- java
- Google OAuth
- lombok
- Spring
- builder
Archives
- Today
- Total
HJW's IT Blog
Frame Pointer, Stack Pointer 본문
Frame pointer 와 stack pointer 는 컴퓨터 아키텍처에서 스텍을 관리하기 위한 포인터 이다.
Stack은 데이터를 임시로 저장하는 메모리 구조로 LIFO 구조를 가지고 있다. 스텍의 데이터를 처리할 때, 가장 위에 있는 데이터를 우선적으로 처리한다.
각 함수는 매개변수 및 지역변수를 일시적으로 저장하는 지역 메모리가 있는데, 이를 Stack frame 이라 하며 process의 스텍에 할당된다.
함수 내부의 지역변수에 접근하기 위한 코드는 Frame Pointer 에 대한 오프셋으로 생성된다
Frame Pointer는 함수 내에서 변경이 불가능 하다
Frame Pointer
Frame Pointer 는 함수 호출시 생성되는 프레임을 가리키는 포인터이다. 함수가 호출될 때, 프레임 포인터는 스텍에 새로운 프레임을 생성하고 그 프레임의 맨 위 주소를 가리킨다. 함수 실행 도중에는 프레임 포인터가 그대로 유지되며 함수 실행이 끝나면 해당 프레임이 스택에서 제거된다.
Stack Pointer
Stack Pointer 는 스택의 top을 가르키는 포인터 이다. 스택에 데이터가 쌓일때, 제거 될때 마다 stack pointer 는 새로운 위치를 가르키게 된다.
함수 호출시 일어나는 일
- Frame Pointer 의 현제 값을 Stack 에 Push
- 현재 Stack Pointer를 Frame Pointer 로 이동
- 함수에서 사용되는 데이터 공간을 SP에서 빼서 할당
- 함수에서 사용할 공간 끝에 sp를 위치시키는데, 이는 stack에 push 되는 값들을 덮어쓰지 않기 위함
- 함수 코드 실행, 지역 변수에 대한 참조는 프레임 포인터의 음수로 표현
- 함수 종료시 frame pointer 의 값을 stack pointer 에 복사시키고 이전의 frame pointer 를 pop 시킨다
- 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 |