본문 바로가기

컴퓨터공학

어셈블러(assembler)/ 컴파일러(compiler)/ 인터프리터(interpreter)/ JIT

용어

- 소스(원시) 코드/프로그램 : 처음 작성된 코드/프로그램

- 목적 코드/프로그램 : 변환된 코드/프로그램

- 고급 언어 : 사람이 알아보기 쉬운 문법을 가진 언어

- 기계어 : 0,1로 이루어진 컴퓨터가 알아 볼 수 있는 언어

- 컴파일 : 원시코드에서 목적 코드로 옮기는 과정






컴파일러(compiler)

- 빌드타임에 프로그래머가 작성한 모든 소스코드에 대한 기계어를 생성(번역)

- 런타임에 빌드타임에서 생성한 모든 기계어를 기계로 보냄

- 번역과 실행이 따로 이루어짐

- 빌드 타임에 모든 구문 분석과 기계어 변환이 이루어지기 때문에 빌드가 느림

- 런타임의 경우 특별한 과정이 없어 속도가 빠름

- 운영체제에 종속적이므로 운영체제에 맞는 컴파일러가 필요

- 대표적인 언어: C, C++

 목적프로그램을 만들고 이 목적 프로그램을 실행하는 명령을 지시함으로써 실제 프로그램을 시행





인터프리터(interpreter)

- 런타임에 한 행씩 분석하여 알맞은 기계어를 생성한 뒤 기계로 보냄 (소스코드를 한줄씩 읽어들이면서 실행)

- 실행속도가 느리지만 코드 변경시 즉시 실행이 가능하여 테스트에 용이

- 번역과 실행이 동시에 이루어짐

- 별도의 실행파일이 존재하지 않음

- 대표적인 언어: 스크립트 언어

 소스 프로그램을 컴파일 하여 목적 프로그램을 생성하지 않고 라인 단위로 해석하면서 바로 실행






- ex: JAVA


JIT(Just-In-Time)

- 빌드타임에 런타임에서 실행할 수 있는 중간언어로 변환

- 런타임에 중간언어를 기계어로 변환하여 기계로 보냄

- 기계어를 생설 할때 캐싱을 통해 같은 함수가 여러번 불려도 기계어를 계속 생성하지 않고 기존에 만들어 놓은 기계어를 불러옴

- 어떤 운영체제에서도 같은 컴파일러로 중간언어를 만들기 때문에 운영체제에 독립적

- 운영체제에 맞는 중간언어를 기계언어로 변경하는 프로그램 (JVM, .NET Framework 등)이 필요

- 대표적인 언어: JAVA, C#

- 모던 브라우저의 자바스크립트 엔진은 모두 JIT컴파일 방식으로 Javascript 코드를 해석

( 구글에서 개발한 V8 - 크롬, 오페라, Node.js

  모질라에서 개발한 TraceMonkey - 파이어폭스 3.5+부터 탑재

  MS에서 개발한 Chakra - IE 9+부터 탑재

  webkit 엔진에 탑재된 JavascriptCore - Safari에 탑재 )

 프로그램을 실제 실행하는 시점에서 기계어로 번역하는 컴파일 방법



어셈블리 언어(assembly language)

- 기계 명령어를 좀 더 이해하기 쉬운 기호 코드로 나타낸 것

- 기계어와 1:1로 대응된 명령을 기술하는 언어

- 하드웨어를 사실상 직접 제어하는 형태이기 때문에 하드웨어의 구조에 따라 프로그램을 달리 해야함(CPU마다 번지의 수와 위치가 달라지기 때문)

- 최소한의 명령으로 프로그래밍을 하기 때문에 크기가 매우 작고 효율적

- 프로그래밍 시간이 오래 걸리고 디버깅이 어려움, 유지보수가 힘듦

- 어셈블러를 이용해 실행 가능한 기계어로 변환

- 프로세서에 있는 모든 자원(register, i/o)을 직접 접근 할 수 있음



'컴퓨터공학' 카테고리의 다른 글

해싱 과 암호화  (0) 2019.04.30
HTTP  (0) 2019.04.30
TCP / UDP  (0) 2019.04.29
OSI 7 Layer  (0) 2019.04.29
컴퓨터공학 1주차  (0) 2019.03.28