*혼자공부하는컴퓨터구조+운영체제(강민철 / 한빛미디어) 책과 강의를 듣고 작성한 내용입니다 :)
컴퓨터를 한 마디로 정의하면 명령어를 처리하는 기계 라고 할 수 있습니다.
컴퓨터는 우리가 사용하는 프로그래밍 언어로 작성된 프로그램을 바로 이해하고 실행할 수 있을까요?
정답은 그렇지 않다 입니다!
컴퓨터가 어떻게 프로그래밍 언어(C, C++, Java, Python...)로 작성된 소스코드를 이해하고,
실행시키는지 알아봅시다 😋
📗 고급 언어
- 사람이 이해하고 작성하기 쉽게 만들어진 언어
- 가독성이 좋고, 변수나 함수같은 편리한 문법 제공
- 우리가 사용하는 프로그래밍 언어 ex) C, C++, Java, Python...
📗 저급 언어
- 컴퓨터가 직접 이해하고 실행할 수 있는 언어
- 기계어, 어셈블리어 2가지 종류가 있음
컴퓨터는 고급 언어를 이해하고, 실행할 수 없습니다.
따라서 고급 언어로 작성된 소스코드가 저급 언어로 변환되어야지만 컴퓨터가 이해하고 실행할 수 있습니다.
저급 언어의 2가지 종류를 조금 더 자세히 알아봅시다.
- 기계어 : 0과1의 명령어 비트로 이루어진 언어. 즉, 0과1로 이루어진 명령어 모음입니다.
기계어를 이진수로 나열하면 너무 길어지기 때문에 가독성을 위해 십육진수로 표현하기도 합니다.
십육진수로 표현했다고 해서 사람이 이해 할 수 있을 만큼 가독성이 올라가지 않습니다.
이러한 단점을 보완하기 위해 어셈블리어가 등장했습니다.
- 어셈블리어 : 기계어를 사람들이 읽고 쓰기 편하도록 번역한 저급 언어
🌟 어셈블리어를 알아두면 좋은 이유 !
프로그램이 어떤 절차로 작동하는지를 가장 근본적인 단계에서부터 하나하나 추적하고 관찰할 수 있기 때문에 어셈블리어를 알아두어야 합니다 (그렇기 때문에 시간이 된다면 어셈블리어에 대해서 따로 포스팅을 해보겠습니다ㅎㅎ)
그래서! 고급언어는 저급언어로 어떻게 변환되는 것 일까요?
크게 두 가지 방식이 있습니다.
📗 컴파일 방식
- 컴파일 방식으로 작동하는 언어를 컴파일 언어
- 컴파일이란 컴파일 언어로 작성된 소스코드 전체를 저급언어로 변환하는 과정
- 컴파일러란 컴파일을 수행해주는 도구, 특정한 프로그램
- 오류를 하나라도 발견하면 컴파일에 실패
- 컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드 라고 함
- 즉, 컴파일 언어로 작성된 소스코드 전체를 컴파일러를 통해 컴파일 하면 목적코드로 변환됨
- 대표적인 컴파일 언어: C
📗 인터프리트 방식
- 인터프리트 방식으로 저급언어로 변환되는 언어를 인터프리터 언어
- 인터프리터란 소스 코드를 한 줄씩 저급언어로 변환하여 실행해주는 도구
- 소스 코드를 한 줄씩 실행하기 때문에 소스 코드 전체를 저급언어로 변환할 때까지 기다릴 필요 없음
- 소스 코드 내에 오류가 있어도 오류를 만나기 전까지 올바르게 수행됨
- 대표적인 인터프리터 언어: Python
컴파일 방식은 소스 코드 전체를 목적코드로 변환하여 실행하고,
인터프리트 방식은 소스 코드 한 줄 씩 저급언어로 변환하고 해석하며 실행하기 때문에
컴파일 방식이 인터프리트 방식보다 빠릅니다!
컴파일 언어와 인터프리터 언어는 명확하게 구분되지 않습니다.
Python도 컴파일을 하지 않는 것은 아니며,
Java의 경우 컴파일과 인터프리트를 동시에 수행합니다.
📗 목적 파일
- 목적 코드로 이루어진 파일
📗 실행 파일
- 실행 코드로 이루어진 파일
- 대표적인 실행 파일: 윈도우의 .exe 확장자를 가진 파일
목적 코드는 컴퓨터가 이해할 수 있는 저급언어로 변환된 코드라고 했는데
그럼 목적 파일과 실행 파일은 같은 것일까요? X
목적 파일이 실행 파일이 되기 위해서는 링킹이라는 작업을 거쳐야 합니다.
📗 링킹
- 외부 기능들을 연결 짓는 작업
ex) 링킹 작업 예시
cal.c -> 더하기 라는 기능이 구현되어 있음
main.c -> cal.c에 구현된 더하기 기능과 기본으로 제공되는 화면에 출력 기능이 있음
두 개의 소스코드 cal.c, main.c를 컴파일 하여 각각 cal.o, main.o의 목적 코드가 생성됨
main.o는 main.c에 없는 더하기와 화면에 출력 기능을 어떻게 실행하는지 알 지 못하기 때문에 바로 실행할 수 없음
더하기와 화면에 출력 기능을 main.o와 연결 짓는 작업을 해야함
이렇게 기능을 연결 짓는 작업을 링킹 이라 하고,
목적 파일에 링킹작업을 해야 실행할 수 있는 실행 파일이 됨.
'컴퓨터구조' 카테고리의 다른 글
[컴퓨터 구조] 명령어의 구조 (0) | 2023.06.06 |
---|---|
[컴퓨터 구조] 어셈블리어 2. 예제 (0) | 2023.05.01 |
[컴퓨터 구조] 어셈블리어 1. 기본 문법과 명령어 (0) | 2023.05.01 |
[컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 2. 문자 (0) | 2023.04.05 |
[컴퓨터 구조] 컴퓨터가 데이터를 이해하는 방법 1. 숫자 (0) | 2023.04.05 |