우리는 통역가가 필요하다.
새로운 컴퓨터언어를 배워서 소스코드를 작성한다 한들 우리는 통역가가 필요하다.
왜냐하면 컴퓨터는 0과 1로 이루어진 기계어를 사용하기 때문이다.
고급 언어
우리가 소스코드에 흔히 사용하는 언어들 C#, C++, C등은 고급언어이다.
개발자가 읽고쓰기 편하게 만들어졌기 때문이다.
저급 언어
내부에서 실행될 때는 컴퓨터가 읽고 쓰기 편한 언어들로 변환이 필요하다.
1) 기계어 - 0과 1로 이루어진 명령어로 구성된 언어
2) 어셈블리어 - 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급언어
(어셈블리어는 기계어와는 다르게 소스코드에 직접적으로 명시하는 경우도 있다고 한다.)
고급언어가 저급언어로 변환되는 과정
** 먼저 변환과정에는 인터프리트와 컴파일 방식이 있는데 정확히 양분되는 개념은 아님을 알고있자.
고급언어가 저급언어로 변환되는 대표적인 방식중의 하나라고 이해하자.
1) 인터프리트
- 인터프리터에 의해 한줄씩 실행된다.
- 소스 코드 전체가 저급언어로 변환되기까지 기다릴 필요가 없는 방식이다.
- 소스 코드 인터프리트 중 오류가 발생하면 오류 발생 전까지의 코드는 실행된다.
- 즉, 위에서부터 한줄한줄 실행을하며 진행된다고 이해하면 될것같다.
2) 컴파일
- 소스코드를 전부 해석후에 실행된다. 따라서 인터프리터와 다르게 오류가 발생하면 소스코드 전체가 실행되지 않는다.
- 아래 C언어의 컴파일 순서를 통해 좀 더 자세히 알아보자
C언어의 컴파일 과정은
1. 전처리 과정
2. 컴파일 과정
3. 어셈블 과정
4. 링킹
이렇게 4단계로 이루어진다.
1) 전처리 과정
- 컴파일 전 처리해야할 작업들을 하는 단계이다.
- 우리가 #include<stdio.h> 와 같이 외부에 선언된 다양한 소스코드, 라이브러리를 명시한다.
- 프로그래밍 편의를 위해 작성된 매크로(#define) 및 컴파일할 영역(#if, #ifdef)를 명시한다.
-> 이과정이 끝나면 test.i라는 파일을 생성한다.
2) 컴파일 과정
- test.i라는 파일은 전처리가 완료되었으나 여전히 고급언어로 되어있다.
- 컴파일 과정을 통해 고급언어를 저급언어(어셈블리어)로 변경을 한다.
-> 이과정이 끝나면 test.s라는 파일을 생성한다.
3) 어셈블 과정
- 어셈블리어를 기계어로 변환하는 과정이다.
- 목적코드를 포함하는 목적파일(object file)을 생성한다.
-> test.o
4) 링킹
- 각기 다른 목적코드들을 하나의 실행파일로써 묶어주는 과정이다.
-> 실행파일이 만들어진다.(exe파일)
* 목적파일과 실행파일은 차이점이 있다.
둘다 기계어로 이루어져있지만 단순 목적파일은 다른 목적파일의 내용을 참조해 올 수 없다.
링킹 과정을 거치게 되면 참조된 각기 다른 목적코드들을 하나의 실행파일로써 묶어 실행파일이 된다.
'프로그래밍 > 컴퓨터구조 및 운영체제' 카테고리의 다른 글
CPU의 내부 구성 - 레지스터 (0) | 2023.10.14 |
---|---|
ALU와 제어장치 (1) | 2023.10.13 |
Window/Mac 한글 깨지는 오류 원인 - 컴퓨터가 숫자와 문자를 표현하는 방법 (1) | 2023.10.09 |
CPU / 주기억장치(RAM) / 보조기억장치 / 입출력장치 / 메인보드 / 시스템버스 (0) | 2023.10.08 |
컴퓨터 구조의 큰 그림 (0) | 2023.10.08 |