본문 바로가기
System SW

[3.1] Procedure Call in MIPS I (프로그램의 메모리 주소 공간 구조)

by Hangii 2022. 10. 2.

  • 오른쪽(고급 언어로 작성된 프로그램)을 컴파일하면 실행 파일이 만들어지고 고급 언어가 기계어로 바뀐다. 실행 파일은 메모리에 올라가서 실행된다. (알다시피 메모리에는 주소가 byte단위로 매겨진다.)
  • 위 사진 왼쪽에 쓰여있는 논리 주소란, 실제 하드웨어 상에서의 물리적 주소가 아닌, 각 프로그램이 실행될 때마다 생기는 상대적인 주소를 말한다. 논리 주소의 크기는 ISA에 따라 결정된다. MIPS에서는 32bit 주소 체계를 가지기 때문에 0~(2^32)-1, 총 4GB의 메모리 주소가 매겨진다.
  • 정리하자면 MIPS 아키텍쳐에서는 어떤 프로그램을 쓰든 컴파일이 되었을 때 메모리 상에 0번지부터 (2^32)-1번지까지의 논리 주소가 생성된다. 
  • 논리 주소 내의 공간은 Code, Data, Stack으로 나뉜다. 
    • Code 부분에는 작성한 프로그램이 컴파일되어 만들어진 기계어가 저장된다. C언어로 작성된 프로그램의 경우, main함수의 첫 문장부터 실행될 것이기 때문에 PC가 메모리 상에서 main함수의 시작 위치에 있는 기계어를 가리키게 된다.(낮은 주소부터 시작)
    • 기계어는 기본적으로 read-only이다. 즉, 고급 언어 코드를 insturction형식으로 바꾼 것 그 자체이기 때문에 내용을 바꿀 수는 없다. 하지만 프로그래밍을 하다 보면 변수처럼 바뀌어야 하는 값들이 존재한다. 이런 값들은 논리 주소의 DataStack 부분에 나뉘어 들어가게 된다. 
    • Data영역에는 프로그램이 시작할 때부터 종료될 때까지 계속 존재해야 하는 값들이 저장된다. (예를 들면 전역변수나 함수 내의 static변수 - cf.static(정적)변수는 함수 내부에 위치해도 프로그램의 시작-끝까지 살아있다)
    • 함수와 운명을 같이하는 지역변수 등의 값들은 Stack에 저장된다. Stack은 함수 호출과 리턴에 관한 값들을 저장하는 주소 공간이다. 예를 들면, main함수가 A 함수를 호출했을 때 A함수가 끝나고 main내의 어디로 되돌아와야하는지에 대한 정보, main함수가 A함수를 호출할 때 전달해야 하는 파라미터 값 등이 저장된다. 

댓글