본문 바로가기

프로그램의 이식

1. 에뮬레이터


에뮬레이터를 이용하면 이식(porting) 없이 다른 OS용 프로그램을 사용할 수 있다. 대표적인 예로 ⒝MacVirtual PC for Mac이 있다. 이는 Mac OS에서 윈도우용 애플리케이션을 작동시키는 에뮬레이터다.


Virtual PC for Mac은 Mac PC를 IBM 호환 기종인 것처럼 작동시켜 윈도우 설치가 가능하게 한다. 다시 말해 Mac에서 윈도우가 작동시켜, 윈도우용 프로그램이 Mac에서 작동할 수 있게 한다. 


윈도우용 애플리케이션은 윈도우의 API를 이용한다. 윈도우는 하드웨어가 IBM PC 호환 기종이라고 가정하고 조작하지만 실제로는 Virtual PC for Mac에 의해 Mac이라는 하드웨어가 작동하는 것이다.





2. Java의 이식성


에뮬레이터는 특정 환경(OS와 HW)에서 그 환경과 다른 환경을 구현하는 것이다. Java의 경우 

에뮬레이터와 다른 방식으로 OS나 HW와 별로 관련이 없는 프로그램의 실행 환경을 제공한다.


Java는 프로그래밍 언어로서 Java와 실행 환경으로서 Java의 두 가지 의미를 갖는다. Java 역시 C처럼 Java 문법에 따라 작성된 소스 코드를 컴파일해 실행하는 방식이다. 단, C언어와 달리 특정 CPU에서만 사용될 수 있는 네이티브 코드가 아니라 이식성이 높은 바이트 코드(byte code)를 생성한다.  이 때 바이트 코드의 실행 환경을 ⒞JVM이라 한다.


Java 소스 코드(.java)를 컴파일러(javac.exe)가 바이트 코드(.class)로 변환한 다음, JVM이 이 바이트 코드를 다시 네이티브 코드로 변환한다. 그리고 CPU에서 그 네이티브 코드를 실행한다.


컴파일한 바이트 코드를 네이티브로 변환하는 방식은 같은 바이트 코드를 서로 다른 여러 환경에서 실행하기 위한 수단이다. 각각의 OS 또는 하드웨어에 맞게 JVM을 만들면 같은 바이트 코드를 갖는 애플리케이션이 여러 환경에서 작동할 수 있게 된다. 


윈도우에는 윈도우용 JVM이 있고 Mac에는 Mac용 JVM이 있다. 다시 말해 OS 관점에서 JVM은 일종의 애플리케이션이지만 Java 애플리케이션의 관점에서는 JVM 자체가 실행 환경이 되는 것이다. 그러나 JVM에도 한계는 있다.


① 다른 종류의 JVM들이 서로 완벽하게 호환되지는 않는다.


아무리 성능이 좋은 JVM이라도 모든 바이트 코드를 현재 환경에 맞는 네이티브 코드로 변환하는 것은 거의 불가능하다. 예를 들어 특정 하드웨어에서만 지원되는 기능을 사용하는 경우 다른 JVM에서는 작동되지 않거나 그 기능이 제한되어 있다.



② 실행 속도가 느리다.


프로그램이 실행될 때마다 바이트 코드를 네이티브 코드로 변환해야 하므로 실행 속도가 상대적으로 느릴 수밖에 없다.  따라서 최근에는 변환된 네이티브 코드를 저장해둔 후, 두 번째 실행부터는 네이티브 코드만 이용하거나 바이트 코드에서 처리 시간이 많이 걸리는 부분을 최적화하는 방식을 취하고 있다. 여기서 최적화란 생성되는 네이티브 코드의 질을 향상시키는 것을 말한다.

때문에 Java에서 실행 속도가 느려지는 문제는 점차 개선되고 있다.








⒜에뮬레이터(Emulator):  다른 프로그램이나 장치를 모방하는 컴퓨터 프로그램.

                                한 시스템에서 다른 시스템을 복제해 

    두 번째 시스템이 첫 번째 시스템을 따라 행동하도록 한다.


⒝Mac(Mac OS, Macintosh): 애플(Apple) 사가 디자인, 개발, 판매하는 PC의 제품 이름.


⒞JVM(Java Virtual Machine): Java 바이트 코드를 네이티브 코드로 변환하며 실행한다. 












'Programming > Basis' 카테고리의 다른 글

EXE 파일의 생성  (0) 2019.04.15
부트 스트랩  (0) 2019.04.08
Ports  (0) 2019.04.04
프로그램의 작동 환경  (0) 2019.03.21
파일 압축  (0) 2019.03.18