이번에는 CPU 내에서 어떻게 프로그램 코드가 동작하는지 간단히 알아볼게요.
프로그램을 실행하면 운영체제(O/S)는 프로그램 이미지를 메모리에 로딩하여 프로세스를 만들죠.
프로세스는 생성하면서 초기 작업을 수행하고 난 후에 개발자가 작성한 진입점 코드를 수행한답니다.
컴퓨터 CPU에는 수행할 코드 주소를 기억하는 PC(프로그램 카운터) 레지스터(CPU 내부의 데이터 기억 장치)가 있어요.
CPU에서는 PC 레지스터에 있는 코드를 디코딩하여 수행할 명령어와 데이터를 분리하는 작업을 선행하죠.
그리고 ALU에서 실제 작업을 처리해요.
ALU(Arithmetic Logic Unit, 산술 논리 처리 장치)는 산술 논리를 처리하는 장치예요.
그리고 ALU에서 처리한 결과를 범용 레지스터(데이터나 메모리 주소 등을 기억할 수 있는 레지스터)에 출력해요.
이러한 작업이 끝나면 PC 레지스터의 코드 주소를 다음 주소로 증가시켜 같은 작업을 반복 수행한답니다.
따라서 프로그램에 작성한 코드는 대부분의 구문은 작성한 순서로 수행해요.
하지만 선택문이나 함수 호출문은 수행할 코드 주소를 기억하는 PC 레지스터의 값을 직접 변경하는 작업을 수행해요.
이렇게 PC 레지스터 값을 직접 변경하는 구문을 분기문이라 불러요.
특히 함수 이름은 함수 정의문에 작성한 코드의 시작 메모리 주소를 의미하여 배열 이름처럼 포인터 상수로 취급한답니다.