32. 콜 스택(Call Stack)
실행 중인 코드를 추적하는 공간이 콜스택
=>
함수(function)
의호출(call)
을 기록하는스택(stack)
자료구조
콜 스택(call stack)
이란 컴퓨터 프로그램에서 현재 실행 중인 서브루틴에 관한 정보를 저장하는 스택 자료구조이다.
실행 스택(execution stack)
, 제어 스택(control stack)
, 런타인 스택(run-time)
, 기계 스택(machine stack)
이라고도 하며, 그냥 줄여서 스택(stack)
이라고도 한다. 소프트웨어 프로그램의 기능 수행에 있어 콜 스택의 관리가 중요함에도 불구하고, 상세한 구현은 고급 프로그래미이 언어에서는 보통 감추어지며 자동화되어 있따. 많은 컴퓨터들이 스택 관리를 위한 특별한 명령어(기계어)를 제공하고 있다.
콜 스택을 사용하는 목적은 여러 가지이지만, 주된 이유는 현재 실행중인 서브루틴의 실행이 끝났을 때, 제어를 반환할 지점을 보관하기 위해서이다. 실행 중인 서브루틴은, 호출되어서 그 실행이 아직 완료되지는 않았지만, 완료된 후에는 호출된 지점으로 제어를 넘겨야 한다.
서브루틴의 이러한 실행은 여러 단계로 중첩될 수도 있는데, 다른 호출에 의해서 또 다른 서브루틴으로 넘어가버리거나, 재귀같은 특별한 경우가 있다. 이러한 중첩의 특성 때문에 스택 자료구조를 사용하는 것이다.
예를 들어 만약 DrawSquare
라는 서브루틴이 있고 DrawSquare
가 DrawLine
을 호출한다고 해보자. (Square는 Line 4개니까 4번 호출하게 될 것이다.)
DrawLine
서브루틴은 자신이 호출된 뒤 어디로 돌아가야할지 알고 있어야만 한다. (그래야 4번만 불릴 것이다.) 이를 구현하기 위해 메모리 주소가 서브루틴이 끝날 때 반환 주소(return address)를 확인하도록 하고, 이를 위해 서브루틴 호출 시 콜 스택에 반환 주소를 제일 먼저 집어 넣는다.
'임베디드 > [ Linux Kernel ]' 카테고리의 다른 글
[ Linux Kernel ] 31. 메모리 맵 파일(mmap) (5) | 2020.11.13 |
---|---|
[ Linux Kernel ] 30. 스트림(Stream)이란? (0) | 2020.11.12 |
[ Linux Kernel ] 29. 버퍼 입출력 - 표준 입출력 라이브러리 (0) | 2020.11.12 |
[ Linux Kernel ] 28. 가상 파일 시스템 (0) | 2020.11.12 |
[ Linux Kernel ] 27. 다중 입출력 - poll() (0) | 2020.11.10 |