땃쥐네

[CS] 혼공컴운 - 3.1 소스 코드와 명령어 본문

CS/Computer Structure

[CS] 혼공컴운 - 3.1 소스 코드와 명령어

ttasjwi 2023. 1. 13. 17:16

이 글은

- '강민철'님의 책 '혼자 공부하는 컴퓨터구조 + 운영체제' 책을 읽으며 학습한 내용을 정리합니다.


1. 고급 언어, 저급 언어

1.1 고급 언어(high-level programming language)

  • 사람을 위한 언어
  • 사람이 이해하고 작성하기 쉽게 만들어진 언어
  • 예) C, C++, Java, Python, ...

1.2 저급 언어(low-level programming language)

  • 컴퓨터가 직접 이해하고 실행할 수 있는 언어
  • '명령어'로 이루어져 있다.
  • 고급 언어로 작성된 코드가 실행되려면 반드시 저급 언어로 변환되어야 한다.

2. 저급 언어의 종류 : 기계어와 어셈블리어

2.1 기계어

  • 0과 1의 명령어 비트로 이루어진 언어
  • 다만, 이진수로 나열하면 너무 길어지기 때문에 가독성을 위해 십육진수로 변환하기도 한다.

2.2 어셈블리어

  • 명령어(기계어)를 읽기 편한 형태로 번역한 저급 언어
    • 예) push rdp, ret, pop rdp, ...
  • 기계어를 읽기 쉬운 수준으로 변환한 언어일 뿐 실제로 어셈블리어를 이용해 복잡한 프로그램을 만드는 것은 쉽지 않다. 따라서 가독성도 더 좋고 편리한 문법이 제공되는 고급 언어를 사용하여 개발하는 것이 실무적 관점에서 유용하다.

2.3 어셈블리어가 중요한 분야

  • 하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발하는 임베디드 개발자, 게임 개발자, 정보 보안 분야 등의 개발자는
    어셈블리어를 많이 사용함
  • 어셈블리어를 읽으면 컴퓨터가 프로그램을 어떤 과정으로 실행하는지, 프로그램이 어떤 절차로 작동되는지를 가장 근본적인 단계에서부터 하나하나 추적하고 관찰할 수 있기 때문
  • 개발을 입문하는 단계에서는 고급언어-저급언어의 차이를 이해하는 것은 매우 좋은 교양이기 때문에 입문자라면 반드시 알아두는 것이 좋다.

3) 컴파일 언어와 인터프리터 언어

고급언어를 컴퓨터에서 실행하려면 결국 이를 저급 언어로 변환하는 과정을 거쳐야 한다.

3.1 컴파일 언어

  • 컴파일 언어 : 컴파일러에 의해 코드 전체가 저급 언어로 변환되어 실행되는 언어
  • 컴파일 : 코드 전체가 저급 언어로 변환되는 과정
  • 컴파일러 : 컴파일을 수행해주는 도구
    • 문법오류, 실행 가능성, 불필요한 코드 체크 후 모든 코드를 처음부터 끝까지 저급 언어로 컴파일
    • 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패한다.
  • 목적코드 : 컴파일러를 통해 저급 언어로 변환된 코드
  • 대표적인 언어 : C

3.2 인터프리터 언어

  • 인터프리터 언어 : 인터프리터에 의해 소스 코드가 한 줄씩 차례로 저급언어로 변환하여 실행되는 언어
  • 인터프리터 : 소스 코드를 한 줄 씩 변환하여 실행해주는 도구
  • 컴퓨터와 대화하듯 소스 코드를 한 줄씩 실행하기 때문에 소스 코드 전체를 변환하는 시간을 기다릴 필요가 없다.
    • 대신 런타임에 소스 코드 마지막에 이를 때까지 한 줄 한 줄씩 저급 언어로 해석하며 실행해야 하기 때문에 컴파일 언어보다 느리다.
  • 소스 코드를 한 줄씩 실행하기 때문에, 소스 코드 N번째 줄에 문법 오류가 있더라도 N-1번줄까지는 올바르게 수행된다.
  • 대표적인 언어 : Python

3.3 컴파일 언어, 인터프리터 언어의 경계가 모호한 경우가 있음

  • C, C++과 같이 명확하게 특정 방식의 언어라고 단언할 수 있는 언어도 있으나, 현대의 많은 프로그래밍 언어 중에는
    컴파일 언어 - 인터프리터의 경계가 모호한 경우가 더 많다.
    • Python도 컴파일을 하지 않는 것은 아님.
    • Java는 저급 언어로 번역하는 과정에서 컴파일과 인터프리트를 동시에 수행함
  • 고급언어가 저급 언어로 변환되는 대표적인 방법에는 컴파일 방식과 인터프리트 방식이 있다 정도로만 이해하면 됨.

4. 목적 파일 vs 실행 파일

4.1 목적 파일

  • 목적 코드(컴퓨터가 이해하는 저급 언어)로 이루어진 파일을 목적파일이라고 한다.

4.2 실행 파일

  • 실행 코드로 이루어진 파일
  • 윈도우의 .exe와 같은 파일

4.3 링킹

  • 목적 코드가 실행 파일이 되기 윙해서는 '링킹' 작업을 거쳐야 한다.
  • 목적 코드는 저급 언어이므로 바로 실행할 수 없는데, 다른 목적에 분리된 외부 기능들을 연결 짓는
    작업이 필요하기 때문이다. 링킹 작업까지 모두 거쳐야 실행 파일이 만들어진다.

Comments