- 오른쪽(고급 언어로 작성된 프로그램)을 컴파일하면 실행 파일이 만들어지고 고급 언어가 기계어로 바뀐다. 실행 파일은 메모리에 올라가서 실행된다. (알다시피 메모리에는 주소가 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형식으로 바꾼 것 그 자체이기 때문에 내용을 바꿀 수는 없다. 하지만 프로그래밍을 하다 보면 변수처럼 바뀌어야 하는 값들이 존재한다. 이런 값들은 논리 주소의 Data와 Stack 부분에 나뉘어 들어가게 된다.
- Data영역에는 프로그램이 시작할 때부터 종료될 때까지 계속 존재해야 하는 값들이 저장된다. (예를 들면 전역변수나 함수 내의 static변수 - cf.static(정적)변수는 함수 내부에 위치해도 프로그램의 시작-끝까지 살아있다)
- 함수와 운명을 같이하는 지역변수 등의 값들은 Stack에 저장된다. Stack은 함수 호출과 리턴에 관한 값들을 저장하는 주소 공간이다. 예를 들면, main함수가 A 함수를 호출했을 때 A함수가 끝나고 main내의 어디로 되돌아와야하는지에 대한 정보, main함수가 A함수를 호출할 때 전달해야 하는 파라미터 값 등이 저장된다.
'System SW' 카테고리의 다른 글
[2.3] MIPS Instruction Set Architecture III - 논리연산 & Data Transfer 연산 (0) | 2022.10.12 |
---|---|
[2.2] MIPS Instruction Set Architecture II - 비트 포맷 및 산술 연산 (0) | 2022.10.12 |
[2.1] MIPS Instruction Set Architecture - 레지스터 및 메모리 모델 (0) | 2022.10.12 |
[1] System Software & Instruction Set Architecture (0) | 2022.10.12 |
[3.2] Procedure Call in MIPS II (0) | 2022.10.02 |
댓글