본문 바로가기
정글 2기/OS 운영체제

[Pintos] Project 2_Calling convention_Caller, Callee and registers

by Dean30 2021. 10. 9.
728x90

[Pintos] Porject 2_Calling convention_Caller, Callee and registers

 

 

함수 호출 규약 Calling Convention

 

  • 함수 호출 규약(Calling Convention)을 이해하기 위해서는 스택과 스택 프레임에 대한 정확한 이해가 있어야 한다.
  • 각각의 thread 마다 stack 이 생성되고, 각각의 함수마다 stack frame이 존재한다.
  • stack frame에는 해당 함수에 관련된 데이터가 push, pop되는데, 이를 위해 main()과 sum() 함수의 대화 방식이 같아야한다. 이 방식을 함수 호출 규약(Calling Convention) 이라고 한다.

 

 

함수 호출 규약 (Calling Convention)

- 함수 호출 규약은 아래 4가지 값을 기준으로 그 종류가 나눠진다.

  1. Parameter 전달 방법 -  어떻게 parameter 전달?(stack frame사용 or register 사용)
  2. Parameter 전달 순서 - 함수명(parameter1, parameter2, ...) 에서 어떤 parameter부터 먼저 전달할 것인가?
  3. 함수 리턴 값 전달 방법 - 함수 리턴 값을 어디에 저장해서 돌려줄 것인가?
  4. 함수 호출간 사용했던 stack frame을 정리하는 방법 - 함수 사용이 끝난 후 사용했던 stack frame 공간을 누가 정리?

 

Caller와 Callee

 

main() 함수에서 func()이 호출되는 경우 main을 caller(호출 함), func()를 callee(호출 됨)이다. 이 때 레지스터와 스택을 사용한다.

main()함수는 실행하면서 레지스터를 사용한다. 그러나 func() 함수가 return되면 다시 func()함수가 호출 되기 전 레지스터의 값을 갖고 있어야 한다. 이 때 caller가 저장하고 보존되도록 신경써야 하는 레지스터를 caller-saved-register라 하고, callee는 이 레지스터들을 자유롭게 사용할 수 있다.

 

 

 

 

콜러가 저장하는 레지스터 (caller-saved-register)

 

  • 사용하기 전 콜러가 반드시 백업해야 하는 레지스터, 콜리는 사용 가능
  • 값이 보존되지 않아도 되는 경우에는 백업하지 않을 수 있다.

 

EAX : Extended Accumulator Register - 논리 연산

ECX : Extended Counter Register - 카운터 레지스터. 반복 명령어 사용시 반복 카운터로 사용

EDX : Extended Data Register - EAX와 같이 연산에 쓰임. 부호 확장 명령 등에 쓰임.

 

 

콜리가 저장하는 레지스터 (callee-saved-register)

 

  • 사용하기 전 콜리가 반드시 백업해야 하는 레지스터, 콜러는 사용 가능
  • 함수 복귀 전 다시 값을 복원해야 함
  • 콜리 입장에서는 콜러가 백업을 필요로하는 레지스터가 무엇인지 모르기 때문에 무조건 백업해야한다.

 

EBX : Extended Base address Register - 메모리 주소 저장을 위한 레지스터. ESI나 EDI와 결합하여 사용 가능.

ESI  : Extended Source Index - 데이터 조작 및 복사시 소스 데이터의 주소가 저장됨 

EDI  : Extended Destination Index - 복사 시 목적지의 주소가 저장됨.  ESI 레지스터와 비슷

EBP :  Extended Base Pointer - 스택 프레임의 시작 지점 주소 (스택의 가장 윗 부분, 스택의 처음)가 저장. 현재 스택 프레임이 소멸되지 않는 이상 EBP 레지스터의 값은 변하지 않음

 

 

참고로 위 7개 레지스터들은 모두 범용 레지스터이다.

 

 

 

참조:

http://cr3denza.blogspot.com/2015/03/caller-callee.html

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=tjdghkgkdl&logNo=10117639381

728x90

댓글