중요하게 볼 점
- 기계 수준 프로그램의 형식과 동작은 ISA(인스트럭션 집합 구조)에 의해 정의된다.
- ISA는 다음과 같은 것을 정의한다.
- 프로세서의 상태
- 인스트럭션의 형식
- 프로세서 상태에 대한 각 인스트럭션들의 영향들
- ISA는 인스트럭션들이 순차적인 실행을 하는 것처럼 프로그램의 동작을 설명한다.
- 실제로 하드웨어는 여러 인스트럭션을 동시에 실행한다.
- 기계 수준 프로그램이 사용하는 주소는 가상주소이다(?).
- 메모리가 매우 큰 바이트 배열인 것처럼 보이게 하는 메모리 모델을 제공한다.
- 실제 메모리 시스템은 여러 개의 메모리 하드웨어와 운영체제 소프트웨어로 구현되어 있다.
- 9장에서 더 자세히 다루는 듯
컴파일러의 역할
- 전체 컴파일 순서에서 C에서 제공하는 추상화 된 실행 모델로 표현된 프로그램을, (?)
- 프로세서가 실행하는 매우 기초적인 인스트럭션들로 변환하는 대부분의 일을 수행한다.
프로세서의 상태
- 프로그램 카운터
- 실행할 다음 인스트럭션의 메모리 주소를 가리킨다.
- 정수 레지스터 파일
- 64비트 값을 저장하기 위한 16개의 이름을 붙인 위치를 갖는다.
- 레지스터는 주소(포인터)나 정수 데이터를 저장 가능하다.
- 일부 레지스터는 프로그램의 중요한 상태를 추적하는데 사용한다.
- 다른 레지스터들은 함수의 리턴값, 프로시저의 지역변수와 인자 같은 임시 값을 저장하는데 사용한다.
- 조건코드 레지스터
- 가장 최근에 실행한 산술 또는 논리 인스트럭션에 관한 상태 정보를 저장한다.
- 벡터 레지스터
- 하나 이상의 정수나 부동소수점 값들을 각각 저장 가능하다.
프로그램 메모리
- 다음의 것들을 포함한다
- 프로그램의 실행 기계어 코드
- 운영체제를 위한 일부 정보
- 프로시저 호출과 리턴을 관리하는 런타임 스택
- 사용자에 의해 할당된 메모리 블록
- 가상주소의 일부 제한된 영역만이 유효하다.
- 운영체제는 가상 주소공간을 관리해서 가상 주소를 실제 프로세서 메모리 상 물리적 주소 값으로 번역해준다.
- 여러 가상 주소공간엔 실제로 사용하는 공간이 약간만 존재하고, 이게 모이면 실제 물리적 메모리가 된단 얘기인것 같다.