'Stack'에 해당되는 글 2건

  1. 2012.08.26 Stack frame
  2. 2012.08.16 Stack에 변수가 저장되는 방식
OS/Concept2012. 8. 26. 15:50

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
Posted by slimV
OS/Concept2012. 8. 16. 15:35

Stack에 변수가 저장되는 방식



위의 코드상에서 보여지는 변수 입력 순서는 1, 2, 3, 4, 5입니다.


하지만 gdb로 stack을 보면 1, 2, 5, 4, 3 순으로 들어간 것을 확인할 수 있습니다.


컴퓨터가 stack에 변수를 집어넣는 방식을 나열하자면

1. 'int a = 1'을 통해 stack에 4-byte를 확보하고 1을 입력

2. 'int b = 2'를 통해 stack에 4-byte를 확보하고 2를 입력

3. 'int c[] = {3, 4, 5}'를 통해 12-byte를 확보하고 낮은 주소에서부터 차례로 3, 4, 5를 입력 


Low addr

 3

   ┐

 4

  c[]

 5

   ┘
 2

  b

 1

  a

High addr


'OS > Concept' 카테고리의 다른 글

Copy On Write  (0) 2012.11.15
Stack frame  (0) 2012.08.26
CPU register  (0) 2012.08.18
Little endian  (0) 2012.08.16
Posted by slimV