임베디드/[ Linux Kernel ]

[ Linux Kernel ] 32. 콜 스택(Call Stack)

kim.svadoz 2021. 2. 19. 10:07
반응형

32. 콜 스택(Call Stack)

실행 중인 코드를 추적하는 공간이 콜스택

=> 함수(function)호출(call)을 기록하는 스택(stack) 자료구조

콜 스택(call stack)이란 컴퓨터 프로그램에서 현재 실행 중인 서브루틴에 관한 정보를 저장하는 스택 자료구조이다.

실행 스택(execution stack), 제어 스택(control stack), 런타인 스택(run-time), 기계 스택(machine stack)이라고도 하며, 그냥 줄여서 스택(stack)이라고도 한다. 소프트웨어 프로그램의 기능 수행에 있어 콜 스택의 관리가 중요함에도 불구하고, 상세한 구현은 고급 프로그래미이 언어에서는 보통 감추어지며 자동화되어 있따. 많은 컴퓨터들이 스택 관리를 위한 특별한 명령어(기계어)를 제공하고 있다.

콜 스택을 사용하는 목적은 여러 가지이지만, 주된 이유는 현재 실행중인 서브루틴의 실행이 끝났을 때, 제어를 반환할 지점을 보관하기 위해서이다. 실행 중인 서브루틴은, 호출되어서 그 실행이 아직 완료되지는 않았지만, 완료된 후에는 호출된 지점으로 제어를 넘겨야 한다.

서브루틴의 이러한 실행은 여러 단계로 중첩될 수도 있는데, 다른 호출에 의해서 또 다른 서브루틴으로 넘어가버리거나, 재귀같은 특별한 경우가 있다. 이러한 중첩의 특성 때문에 스택 자료구조를 사용하는 것이다.

예를 들어 만약 DrawSquare 라는 서브루틴이 있고 DrawSquareDrawLine을 호출한다고 해보자. (Square는 Line 4개니까 4번 호출하게 될 것이다.)

DrawLine 서브루틴은 자신이 호출된 뒤 어디로 돌아가야할지 알고 있어야만 한다. (그래야 4번만 불릴 것이다.) 이를 구현하기 위해 메모리 주소가 서브루틴이 끝날 때 반환 주소(return address)를 확인하도록 하고, 이를 위해 서브루틴 호출 시 콜 스택에 반환 주소를 제일 먼저 집어 넣는다.

반응형