Programming/Windows System Programming

프로그램의 실행과정 및 하드웨어 구성의 재접근

Pw4ngC0 2019. 8. 7. 14:38
728x90

프로그램의 실행과정

 

실행파일의 생성과정

전처리기 -> 컴파일러 -> 어셈블러 -> 링커

 

1.전처리기의 치환 작업

전처리기는 '#include', '#define'과 같이 '#'으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업을 한다.

 

2.컴파일러에 의한 번역

전처리기에 의해 변경된 소스코드는 여전히 C언어로 구성되어 있다. 이 소스코드는 컴파일러에 의해서 어셈블리 코드로 번역된다.

 

3.어셈블러에 의한 바이너리 코드생성

바이너리코드는 1과 0으로만 구성되는 코드이다. 컴파일러에 의해 번역된 어셈블리 코드는 컴퓨터에 의해 실행되기 앞서서 바이너리 코드로 번역 되어야 한다. 컴퓨터는 1과 0만 이해하기 때문이다. 이처럼 CPU가 이해할 수 있는 바이너리 코드로 바꾸어 주는 프로그램이 어셈블러이다.

 

4.링커에 의한 연결과 결합

링커는 프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는(혹은 연결시켜 주는)작업을 한다고 설명할 수 있다. 이 과정이 끝나면 실행파일이 생성된다. 실행파일은 바이너리 코드로 구성된다.

 

 

위 과정을 통한 프로그램 실행 과정

위 실행파일은 링커에 의해서 최종적으로 만들어진 파일이다. 실행 파일 안에는 컴퓨터에게 일을 시키기위한 명령어(바이너리 코드)가 들어있다. 실행파일이 메모리에 올라가고 난 다음 CPU에 의해 실행되기 시작한다.

 

메모리에 올라간 명령어들은 CPU에 의해서 순차적으로 실행된다. 명령어 A, 명령어 B, 명령어 C 순서대로 이다. 이명령어 들은 메모리에서 실행되는 것이 아니라 CPU내부로 하나씩 이동한 다음 실행시킨다.

 

명령어 실행 과정

1.Fetch : 메모리상에 존재하는 명령어를 CPU로 가져오는 작업이다.

2.Decode : 가져온 명령어를 CPU가 해석하는 단계이다. 즉, 무슨일을 하라는 명령어인지 분석하는 단계이다.

3.Execution : 해석된 명령어의 명령대로 CPU가 실행하는 단계이다.

 

하드웨어 구성의 재접근

명령어의 내용이 산술 및 논리연산이라면 산술 및 논리 연산을 하는 Execution의 주체는 ALU(Arithmetic Logic Unit)이다.

 

Decode단계는 CPU안에 있는 컨트롤 유닛이 Decode 즉 명령어 해석을 진행한다.

 

메인메모리에서 CPU로 가져온 명령어는 레지스터에 저장된다. 레지스터 중에서도 IR(Instruction Register)이라 불리는 레지스터에 저장된다.

 

 

 

728x90