본문 바로가기
IT 공부/운영체제

[리눅스] - 인터프리터, 가상머신, 그리고 실행 파일의 명령어 구조 차이

by exdus3156 2023. 12. 18.

1. 실행 파일의 경우 (feat. C언어)

C언어로 작성한 소스코드는 리눅스에 내장된 gcc 컴파일러를 통해 바로 시스템에서 실행 가능한 프로그램이 된다. gcc로 컴파일을 완료하면 위와 같이 ./hello 를 통해 즉시 실행할 수 있다.

이때, 어떤 프로그램을 매개하지 않는 모습을 확인할 수 있다. 컴파일된 파일은 시스템에서 바로 실행할 수 있는 것이다. 다만 이러한 이유로 C언어 개발자는 플랫폼의 기능을 사용하기 위해 운영체제 시스템과 API에 대한 정보를 배워야 하는 단점이 있다.

 

2. 가상 머신의 경우 (feat. 자바)

자바의 강점은 자바 가상 머신을 통해 컴퓨터와 OS 장치를 통째로 추상화하여 통일된 규격의 인터페이스를 사용한다는 점이다. 이 지점에서 C언어 개발자와는 달리 자바 개발자는 운영체제에 대해 아주 깊게 알아야 하는 수고에서 벗어날 수 있다.

하지만 자바 소스 코드는 컴파일을 해야 하지만, 컴파일을 하더라도 운영체제에서 직접 실행 가능한 파일이 생성되진 못한다. 위 예제에서 컴파일된 Hello.class는 시스템에서 바로 실행할 수 없다.

대신 어떤 실행 파일(Hello.class)을 실행해야 할지 직접 명시하여 JVM을 통해 구동시켜야 한다. java 명령어가 자바 가상 머신을 뜻하고, 인자로 컴파일된 소스코드(Hello.class)를 전달하고 있다.

자바의 가상 머신이란 컴파일된 자바 코드(바이트코드)를 실행시키는 가상의 컴퓨터다. 실행 환경 프로그램이기 때문에 자바 가상 머신 안으로 들어가는 개념이 아니다.

 

3. 인터프리터 언어의 경우 (feat. 파이썬)

인터프리터, 스크립트 언어의 경우 컴파일이 필요하지 않다는 점이 흥미롭다. C언어나 자바와는 달리 컴파일 과정이 생략된 모습을 확인할 수 있다.

이외에는 사용 환경 자체는 자바의 가상 머신과 거의 비슷해 보인다. 자바와 마찬가지로 인터프리터 언어는 실행하기 위해서 인터프리터가 있어야 한다.

하지만 인터프리터는 말 그대로 interpret, 실시간으로 해석하고 대화하는 장치다. 자바 가상 머신이 그저 컴파일된 코드를 작동시키는 머신에 불과하다는 점과 차이가 있다. 자바나 C언어는 이런 대화형 환경이 제공되지 않는다.