본문 바로가기
System Programming

[시스템 프로그래밍] 개요 / 언어의 계층구조와 컴파일 과정

by spareone 2025. 10. 20.

컴퓨터 시스템


컴퓨터 시스템은 하드웨어Hardware와 소프트웨어Software로 분류

  1. 하드웨어

    • 중앙 처리 장치
    • 기억 장치
    • 입출력 장치
  2. 소프트웨어

    • 시스템 소프트웨어
    • 응용 소프트웨어

시스템 소프트웨어


  1. 시스템 소프트웨어의 정의
    • 컴퓨터 시스템의 하드웨어 요소를 제어하고 관리하는 소프트웨어
  2. 시스템 소프트웨어 종류
    • 언어 처리: 컴파일러, 어셈블러, 인터프리터 등
    • 운영체제: 프로세스 관리 등
    • 유틸리티: 로더, 드라이버, 백신, DBMS 등

프로그래밍 언어의 계층구조


기본적으로 컴퓨터는 기계어만을 이해하며,
사람의 입장에서 알아볼 수 있는 언어를 컴퓨터 언어로 변환하는 과정이 필요

(사람)
자연어
고급 언어
기호 언어 (어셈블리어 등)
기계어
(기계)

Translator


특정 언어를 다른 언어로 바꾸는 과정

  1. 컴파일러compiler
    • 소스코드를 어셈블리어로 통째로 번역
  2. 어셈블러assembler
    • 어셈블리어를 기계어로 번역
  3. 인터프리터interpreter
    • 소스코드를 한 줄씩 읽고 바로 실행

변환의 효율을 위해 소스 코드는 BNFBackups Normal Form 규칙의 형식 시스템으로 작성 (규칙에 어긋나면 syntax error 출력)

컴파일 과정


대략적인 컴파일 과정은 아래와 같다.

  1. 소스코드의 어휘 분석
  2. 구문 분석
  3. 의미 분석
  4. 중간언어 변환
  5. 코드 생성
  6. 생성된 코드 최적화 (어셈블리어 완성)
  7. 어셈블러를 통해 기계어 변환

위는 기본적인 컴파일 과정이며, 어셈블리어 변환 과정도 포함하여 최종적으로 기계어로 변환한다.
소스코드의 크기가 커지게 되면 한 번에 처리하지 않고 여러 개의 원시 모듈source module로 분할하여 처리한다.
각각의 원시 모듈 모두 위와 같은 과정을 통해 목적 모듈로 변환되며, 아래 7번 과정을 통해 모듈을 결합한다.

  1. 링커linker를 통해 목적 모듈 결합
  2. 결합된 모듈을 기억장치에 적재 (적재 모듈)

8번 과정까지 하면 최종적으로 실행파일이 만들어진다.

  1. 로더loader를 통해 적재 모듈을 주기억장치에 적재

실행 파일은 9번 과정을 통해 이루어진다.

프로그램 언어별 처리 과정


프로그램 별로 처리하는 방식이 조금씩 상이

  1. C Language
    • .c를 컴파일하면 .obj파일이 생성됨
    • 생성된 .obj와 필요한 라이브러리(.lib)를 불러와 linker로 결합하여 실행파일 생성
    • 실행파일을 loader가 주기억장치에 적재
  2. Java
    • .java를 컴파일하면 .class(바이트코드) 파일이 생성됨
    • 생성된 .class와 필요한 라이브러리(.jar)를 불러와 linker로 결합
    • 결합된 코드를 JVMJava Virtual Machine에 적재하여 한 줄씩 코드 해석 후 실행
  3. 여러 인터프리터 언어들은 한 줄씩 코드 해석 후 실행 (python, js 등)

명령 해석 방법


기계어를 읽은 후 CPU에 설계된 회로를 바탕으로 명령 수행
이 때 명령어가 수행할 연산의 코드를 opcode라고 명명

댓글