본문 바로가기
공부/시스템프로그래밍

프로그램 실행과정

by 맑은청이 2020. 9. 24.
728x90
반응형

프로그램은 어떤 과정을 걸쳐서 실행이 될까요?

여러분이 작성한 코드는 컴퓨터에서 어떻게 실행이 되는지 궁금하지 않나요?(안 궁금하셔도 아셔야합니다. 큼)

 

 

프로그램은 다음과 같은 순서로 실행됩니다. 

프로그램 실행과정

 

1. 전처리기

#include, #define 같은 걸 처리하는 겁니다. 먼저 처리하니깐 '전' 처리기라고 하는 거죠

 

2. 컴파일러

이제 우리가 짠, 우리가 이해하기 쉬운 코드를 프로그램에게 조금 맞추어주어야합니다. 

여러분도 아시다시피 컴퓨터는 0,1만 인식할 수 있습니다. 하지만 누가 010101101111010110 이런식으로 코딩을 할 수 있을까요. 그래서 만들어진 게 어셈블리어입니다. 저희가 좀 더 직관적으로 코딩을 하기 위함이었죠. 

하지만 이도 어렵다 해서 더 직관적으로 만든 것이 현재 저희가 하는 printf("Hello, world!"); 와 같은 코딩인 겁니다. 

컴퓨터가 해석할려면 역으로 돌아가는거죠. 

 

컴파일러는 이 코드들을 어셈블리어로 바꾸어주죠. 

 

 

칼리리눅스에서 gcc -S Hello.c 로 어셈블리어를 확인해보겠습니다.

 

3. 어셈블러

이제 위와 같은 어셈블리어를 01101110 10101 이런식으로 바꾸어줘야합니다.

이 역할은 어셈블러가 해줍니다. 

 

4. 링커

링커는 참조해야 할 함수와 라이브러리를 모아서 하나의 실행파일로 만들어줍니다. 

 

정리를 해보자면 프로그램이 실행 파일을 만드는 과정은 다음과 같습니다. 

 

 

참고로 리눅스에서 

 

gcc -v --save-temps -o 실행파일 소스코드.c 

 

명령어를 치면 모든 과정의 파일을 볼 수 있습니다. 

 

.c 는 소스코드 파일 

.i 는 전처리기 이후 파일

.s 는 컴파일러 이후 파일

.o 는 어셈블러 이후 파일 

 

 

차례로 보면 다음과 같습니다. 

 

Hello.c
Hello.i
Hello.s
Hello.o

 

 

 

그럼 이렇게 컴퓨터가 읽기 쉽게 된 파일이 CPU 에 실행되는 과정은 어떨까요? 

아래와 같습니다.

 

CPU 에서 실행되는 과정

링커가 만든 실행 파일이 메모리로 로드(Load) 됩니다. 그리고 메모리에서 실행되는 것이 아니라 CPU 에서 순차적으로 실행되기 때문에 명령어들이 CPU로 페치(Fetch) 됩니다. 이 명령어는 복호화(Decode) 과정을 걸쳐서 실행(Execution) 됩니다.

 

1. Load

2. Fetch

3. Decode

4. Execution 

 

 

컴퓨터 하드웨어의 개괄적인 구조와 함께 봅시다. 

 

컴퓨터 하드웨어 구성

 

아직 감이 안 오죠? 이를 비교해보겠습니다.

다음 포스팅에서요~

728x90
반응형

'공부 > 시스템프로그래밍' 카테고리의 다른 글

Windows 자료형  (0) 2020.09.29