학습개요
서브프로그램은 독자적인 자신만의 영역을 관리해야 하기 때문에 이를 구현하는 것은 다소 복잡합니다. 더구나 서브프로그램에서 비지역변수를 사용할 경우에는 이를 호출자의 영역에서 찾아야 하므로 일이 더 복잡해집니다. 그럼 서브프로그램을 어떻게 구현할 수 있을까요? 서브프로그램을 구현할 때에는 활성 레코드라는 것을 사용합니다. 활성 레코드는 서브프로그램의 매개변수와 지역변수를 포함하고 있으며 서브프로그램 호출 관계를 관리하기 위해서 다른 관리 정보도 포함하고 있습니다. 이번 강의에서는 서브프로그램을 구현하기 위한 활성 레코드에 대해 알아보고 활성 레코드 사이에서 비지역변수를 참조하기 위한 방법을 알아봅니다.
학습목표
- 서브프로그램의 데이터를 관리하기 위한 활성 레코드의 기능을 설명할 수 있다.
- 비지역변수를 참조하기 위한 정적 체인과 동적 체인을 설명할 수 있다.
- 비지역변수 참조를 효율적으로 수행하기 위한 구현 방법을 설명할 수 있다.
정리하기
- 서브프로그램 호출과 복귀를 합쳐 서브프로그램 연결이라고 부르며 이때 제어 흐름뿐 아니라 자료 흐름도 관리해야 한다. 자료 흐름을 관리하기 위해 활성 레코드를 사용한다.
- 활성 레코드에는 서브프로그램의 데이터뿐 아니라 호출자의 상태, 복귀 주소, 반환값, 각종 관리 데이터가 저장된다.
- 초기 언어에서는 정적 활성 레코드 할당 방법을 사용했으나 이는 재귀호출이 불가능하다. 현재는 대부분 동적 활성 레코드를 사용한다.
- 활성 레코드에는 영역 규칙을 구현하기 위해 동적 링크와 정적 링크가 주로 사용된다.
- 정적 링크가 연결된 정적 체인은 정적 영역 규칙을 구현하기 위해 사용되고, 동적 링크가 연결된 동적 체인은 동적 영역 규칙을 구현하기 위해 사용된다.
- 정적 체인을 거슬러 올라가는 부담을 줄이기 위해서 디스플레이를 활용할 수 있다.
- 동적 영역 규칙에서 모든 변수에 대한 정보를 한곳에서 관리하며 변수를 참조하는 방법을 얕은 참조라고 한다. 얕은 참조에는 변수 스택 방법과 중앙 테이블 방법이 있다.
- 과거 민감 서브프로그램이란 이전의 호출 내용을 기억하는 서브프로그램이다.
- 코루틴이란 여러 개의 진입 지점을 스스로 관리하는 서브프로그램을 뜻한다. 코루틴은 ‘호출된다’고 하지 않고 ‘재개된다’고 한다.