WINE의 바이너리 동작구조에 대해 질문이 있습니다.

김성진의 이미지

안녕하세요?

WINE에서는 윈도우의 바이너리를 수정없이 그대로

리눅스 환경에서 수행할 수 있습니다.

다른 OS이기 때문에 emulation혹은 가상머신을 통해 인터프리팅을

하는 것이라고 상식적으로 생각할수 있겠지만,

실제로 WINE에서는 바이너리 상태로 native execution을 한다고 알고 있습니다.

그렇다면, 아래와 같이 동작하는 것인지 아시는 분의 고언을 부탁드립니다.

==============

WINE의 Loader가 구동시에 윈도우의 바이너리를 순차적으로 읽으면서,

해당 실행코드를 분석하고, 리눅스 바이너리 형태로 변형을 한 후에

메모리에 로딩해서 native execution을 하는 것인지요.

위의 과정에 따른다면, 로딩시에 바이너리 화일 전체를 순차적으로

분석하고, 재생성해야 하기 때문에 실행속도는 빠르더라도,

로딩속도가 대단히 느릴 것 같은데요.

위의 기법이 맞는지, 다른 형태로 동작을 하는지 궁금하군요.

vmware역시 그러한 형태인지...

답변에 미리 감사드립니다.

bochs와는 다르다고 알고 있습니다만.

fender의 이미지

제가 이해한 바로는 그렇지 않은 것으로 알고 있습니다. Win32 API란 Win32 프로그램과 윈도우즈 운영체제가 통신하는 약속이기 때문에 그 API의 모양과 리턴 값만 동일하다면 원칙적으로 응용프로그램은 그 API 뒤에 숨어 있는 것이 진짜 윈도우즈인지 WINE인지 몰라도 된다는 식입니다.

반면에 VMWARE는 그런 API 구현이 있는 것이 아니라 보다 저레벨의 CPU 에뮬레이션이라고 알고 있습니다. 즉, 아예 인텔 PC를 가상으로 에뮬레이트 하는 구조라 운영체제가 그게 진짜 PC인 줄알고 설치가 되는 것이지요 :)

그럼~

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

김성진의 이미지

글쎄요..

vmware의 경우는 직접적인 CPU에뮬레이션이 아니라고 들었는데요.

그건 bochs라고 하는 INTEL CPU 뿐만이 아니라, 다른 CPU도

모두 동작하게 하는 형태의 에물레이션에서 가능한거 아닌가요?

vmware의 경우 INTEL CPU 이외의 환경에서는 동작하지 않는다고

들었습니다.

여전히 궁금하네요..

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

pyrasis의 이미지

직접 CPU를 에뮬레이트 하는 프로그램은

일반적으로 Vmware, VirtualPC, bochs

가 있습니다..

물론 i386을 에뮬레이트합니다. 그러나 다른 CPU를 에뮬레이트 하는것은

없는걸로 압니다. 돌아가는 플랫폼이 i386말고도 있긴 합니다

VirtualPC의 경우 매킨토시(PowerPC)에서도 돌아갑니다.

bochs도 매킨토시용이 있습니다.

이 프로그램들의 특징은 CPU만 에뮬레이트 하는게 아니라

컴퓨터 전체를 에뮬레이트 합니다.

메인보드, 그래픽카드, 랜카드, 사운드카드 모두 에뮬레이트 합니다.

그러므로 그 에뮬레이트 프로그램 내부적으로는 모든 장치를 가지고 있는

하나의 IBM PC(i386)과 같습니다

아예 운영체제를 안에 깔아버리는게 가능하죠

리눅스든 윈도우든 IBM PC(i386)에서 돌아가는 모든 운영체제를

전부 설치해볼수 있습니다. (MSDOS, 윈도3.1, Free,Net,OpenBSD

노벨 넷웨어 등)

아래는 vmware의 개념도 입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.