2009-08-20 3 views
0

모두 좋아, 모두 어셈블리와 자바만을 사용하는 시스템을 만들고 싶다고 가정 해 봅시다. jvm 폴더, 클래스, 항아리, 등등 .. 자바 여전히 효과적으로 작동해야합니까? 특별히 컴파일 된 플랫폼이 있다는 것을 이해합니다. 그러나 이것이 내가 묻는 이유입니다. 어셈블리를 사용하여 .exe 또는 java가 순수 어셈블리/java 시스템에 포함 된 다른 실행 파일을 모두 복제 할 수 있습니까?"베어 메탈"에서 실행되는 Java 및 어셈블리 언어로 시스템 구축

+0

무엇을하려고합니까? 당신의 최종 목표는 무엇입니까? 그게 당신이 원하는 답변을 개발하는 데 도움이 될 수도 있습니다 – basszero

답변

4

"베어 메탈"에서 실행되는 어셈블리 언어와 Java로 시스템을 빌드 할 수 있는지 묻는다면 대답은 '예'입니다. 현재 몇 가지 예가 있습니다 :

  • JavaOS은 주로 임베디드 시스템 도메인을 대상으로합니다. (썬은 요즘 SunOS가 "레거시"제품 라인이라고 생각합니다.)
  • JNode은 임베디드 시스템, 데스크탑 시스템, 서버 및 클라우드 컴퓨팅을 포괄합니다.

이러한 종류의 시스템을 구축하는 것은 가상 컴퓨터 내부, 컴파일러, 가비지 수집기, 하드웨어 아키텍처, 장치 드라이버 작성 등에 대한 깊은 이해가 필요한 다년간의 여러 사람 프로젝트입니다.

다른 것에 대해 묻는다면 더 명확히하십시오.

편집 : OP의 후속 질문에 응답 : 자바 및 기타 "EXE"파일 자체를 사용하는 것이 실용적이지

  1. . 그들은 그 밑에 완전한 운영 체제가 필요합니다. 예 : 윈도우, 리눅스, 뭐든간에. 소스 코드에 액세스 할 수 있다면 "베어 메탈 (bare metal)"에서 실행되도록하는 데 필요한대로 다시 작성할 수 있습니다. 그러나 이는 특히 Java에서 장치 드라이버 등을 작성하려는 경우 중요한 아키텍처 변경을 수반합니다. (게다가 Sun의 JRE의 핵심은 C++로 구현됩니다 ...).
  2. 기존 Java 클래스 라이브러리 JAR 파일에는 상당한 플랫폼 특정 코드가 포함되어 있기 때문에 직접 사용할 수 없습니다. 그러나 기존 오픈 소스 버전의 Java 클래스 라이브러리 (예 : OpenJDK 6.0 J2SE 라이브러리)에서 고유 한 Java 클래스 라이브러리 JAR을 빌드 할 수 있습니다. 고유 한 라이브러리를 Java 클래스로 제공하거나 (JNode처럼) Java 클래스로 제공하여 플랫폼 특정 코드를 처리합니다.
+0

이것은 내가 물어 보는 것입니다 그리고 나는 그것이 멀티 인 직업이 될 것이라고 이해하고, 그것은 단지 생각이었습니다. 내가 묻는 유일한 이유는 어셈블리를 사용하여 jvm의 실행 파일을 어떻게 작동 시킬지 확신 할 수 없기 때문입니다. 여기있는 대답이 원했을 때의 유일한 질문은 가능하면 감사하고 완벽하게 대답했습니다. 아마도 C와 같은 것을 사용하는 것이 더 좋다. –

+0

아마도 Java가 아닌 부분의 대부분은 이식성을 위해서 C에있다. – starblue

+0

@starblue : Sun의 JRE에 대한 이유 중 일부입니다. 또 다른 부분은 수만 줄의 어셈블러를 작성/유지하기를 원하지 않는다는 것입니다. JNode의 경우 실제로 C가 없습니다. 나노 커널은 x86/x86_64 어셈블러에 코딩되어 있습니다. (나는 개인적으로 그것이 최선의 아이디어라고 생각하지 않지만 그것은 또 다른 이야기이다. 최소한 JNode는 더 이상 어셈블러로 코딩 된 바이트 코드 인터프리터를 가지고 있지 않다!) –

1

질문을 올바르게 이해하면 JavaOS과 같은 의미입니다. 물론 하드웨어에서 JVM raw를 구현할 수는 있지만, 왜 그렇게 할 지 확신 할 수는 없습니다. 그리고 만약 그렇게했다면 왜 어셈블리를 사용하지 않고 C를 사용하지 않을까요?

1

이론적으로 jvm을 다른 언어로 구현할 수 있습니다. 내가 생각할 수있는 가장 좋은 예는 Python/Jpython이다. 원래의 C 구현과 순수 Java 구현 언어가있다.

이것에 대한 주된 논쟁 점은 많은 이익을위한 일이 아닙니다.

Sun의 jvm 및 지원 jni 라이브러리는 대부분 C로 작성되었으므로 대부분의 C POSIX API에 대해 네이티브 어셈블러 구현을 제공해야합니다.

또한 C의 원래 설계 목표는 '휴대용 어셈블리 언어'였으며 대부분이 목표를 충족합니다. C는 효율적인 기계 코드를 생성하며 대부분의 C 컴파일러는 C 코드와 함께 인라인 명령을 코드 머신에 사용하게합니다.

C의 또 다른 이점은 크로스 컴파일러의 수를 사용할 수 있다는 것입니다. 타겟 아키텍처에서 개발 환경을 실행해야 할 필요가없는 경우 좋아하는 paltform/IDE에서 deveop 및 유닛 테스트를 수행 할 수 있습니다. 대상 플랫폼에 대한 실행 파일.

1

Jikes RVM과 Sun 's Maxine은 거의 (1kloc 단위의) 원시 코드로 JVM 구현을 제공합니다. 그러나 두 VM은 모두 OS가 필요하며 연구 구현에만 사용됩니다. 기계 코드를 구성하는 옥텟 스트림을 만드는 과정은 분명 자바에서 가능합니다.

1

JNode를 살펴보십시오. 그들은 수년 동안이 작업을 해왔습니다.

http://www.jnode.org/

관련 문제