프로그램 실행 과정
프로그램 실행 과정
1. 전처리기 // preprocesser 먼저 처리하는 이
#inclue, #define 같은 것을 처리 하는 것이다. 먼저 처리하니까 '전'처리기라고 한다.
컴퓨터 과학에서 전처리기(前 앞 전 處 곳 처 理 다스릴 이 器 그릇 기 ) 또는 프리컴파일러영어: preprocessor)는 입력 데이터를 처리하여 다른 프로그램에 대한 입력으로서 사용되는 출력물을 만들어내는 프로그램이다. 여기서 출력물이란 전처리된 형태의 입력 데이터를 말하며 컴파일러와 같은 차후 프로그램들에 쓰인다.
// #으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업
2. 컴파일러에 의한 번역 // compiler // compile 엮다.
- 전처리기에 의해 변경된 소스코드는 C언어로 되어 있다. 이 소스코드는 컴파일러에 의해 어셈블리 코드로 번역된다.
- 우리가 짠 우리가 이해하기 쉬운 코드를 프로그램에게 조금 맞추어 주어야 한다.
- 모두가 다 알다시피 컴퓨터는 0과 1만 인식할 수 있다. 01010011101011 이런 식으로 코딩을 할 수 없으니 만들어 진
것이 어셈블리어 이다.
- 하지만 이마저도 어려워 더 직관적으로 만든 코드들이 print("Hello!") 같은 코딩인 것이다.
- 컴퓨터가 해석하기 위해서는 역으로 돌아가야 한다.
- 컴파일러는 이 코드들을 어셈블리어로 바꾸어 준다.
3. 어셈블러 // assembler // assembly : 부품을 다른 전문업자나 하청업자에게 맡겨 제조하거나 또는 시판 부품을 구입하여, 주로 상품의 최종적인 조립을 행하는 것 // 조립 // 집합 집회 무도회 입법
- 이제 위와 같은 어셈블리어를 0과 1로 바꿔야 한다.
- 이 역할은 어셈블러가 해준다.
4. 링커 // linker // link 연결하는 것 순화어는 연결
- 링커는 참조해야할 함수와 라이브러리를 모아서 하나의 실행 파일로 만들어 준다.
// 프로그램이 실행 파일을 만드는 과정
리눅스에서
gcc -v -save-temps -o 실행파일 소스코드.c
를 입력하면
.c 는 소스코드 파일
.i 는 전처리기 이후 파일
.s 는 컴파일러 이후 파일
.o 는 어셈블러 이후 파일
목록이 나타난다.
// Hello.c
// Hello.i
// Hello.s
// Hello.o
// 컴퓨터가 읽기 쉽게 실행된 파일이 CPU에 실행되는 과정
1. 링커가 만든 실행 파일이 메모리로 로드 (Load) 된다.
3. 이 것은 메모리에서 실행되는 것이 아니라 CPU에서 순차적으로 실행되기 때문에 명령어 들이 CPU로 페치(Fetch)된다.
4. 이 명령어는 복호화(Decode))과정을 걸쳐서 실행 (Executeion) 된다.
1. Load
2. Fetch : 가져옴 // 메모리상에 존재하는 명령어를 CPU로 가져오는 작업이다.
3. Decode // 가져온 명령어를 CPU가 해석하는 단계이다. 즉, 무슨일을 하라는 명령어인지 분석하는 단계이다.
4. Execution // 해석된 명령어의 명령대로 CPU가 실행하는 단계이다.
※ 컴파일과 어셈블이 필요한 이유
프로그래머가 고급 언어(C, JAVA 등)를 이용하여 작성한 코드는 CPU가 실행 할 수 없다.
CPU는 0,1과 같이 이진 코드로 작성된 파일만 실행 할 수 있기 때문이다.
하지만 프로그래머가 직접 이진 코드를 작성하는 것은 매우 까다로운 일이다.
여기서 어셈블리 코드를 사용하는 이유를 알 수 있다.
프로그래머는 이진 코드와 매핑된 명령어 이름(어셈블리)을 이용하여 로직을 작성 할 수 있다.
그러나 어셈블리 코드 작성 또한 까다롭다.
고급 언어로 코드를 작성한 후 컴파일(Compile), 어셈블(Assemble) 과정을 거친다면
좀 더 편하게 프로그램을 만들어 낼 수 있다.
※ 링킹이 필요한 이유
어셈블(Assemble) 과정을 마친 후 얻은 목적 파일은 직접 실행할 수 없는 파일이다.
표준 라이브러리 및 사용자 라이브러리를 포함하고 있지 않기 때문이다.
링킹을 통해 필요한 라이브러리를 목적 파일과 연결하는 과정이 끝나면 실행 가능한 exe파일이 생성된다.
( printf(), scanf()와 같은 표준 라이브러리는 별도로 링크하지 않아도 미리 컴파일 되어있기 때문에 자동으로 링크 )
※ Compile + Linking = Build
Visual Studio에서 디버깅 하지 않고 시작(Ctrl + F5)을 하게 되면
빌드 과정(F7)을 거쳐 실행 파일을 생성한 후 실행하게 된다.
여기서 빌드 과정이란 컴파일(Ctrl + F7)과 링킹 과정을 합한 것을 말한다.
프로그램 실행과정
프로그램은 어떤 과정을 걸쳐서 실행이 될까요? 여러분이 작성한 코드는 컴퓨터에서 어떻게 실행이 되는지 궁금하지 않나요?(안 궁금하셔도 아셔야합니다. 큼) 프로그램은 다음과 같은 순서로
com24everyday.tistory.com
프로그램 실행 과정 매우 쉽게!
더블클릭으로 실행하는 모습 뒤에 실제 복잡한 "프로그램 실행 과정"을 그림을 통해 매우 쉽게 설명 해주는 포스트 입니다
mamu2830.blogspot.com