Windows에서 Linux 에뮬레이터는 어떻게 작동합니까?


0

분명히 그들은 Linux 응용 프로그램이 Windows에서 실행되도록 Linux 환경을 만들었습니다. 그러나,

  • 어떤 기술이 사용됩니까?
  • 특별한 메커니즘이 있습니까?

MSYS / MinGW / Cygwin과 같은 응용 프로그램을 언급한다고 가정합니다.
Casey Kuball

슈퍼 유저에 오신 것을 환영합니다. FAQ 를 읽으십시오 . 특히 세부 사항과 세부 사항을 제공하는 질문에 대한 답변이 더 많을 수 있습니다. 질문을 편집하여 알고 싶은 내용에 대한 추가 정보를 제공 할 수 있습니다.
Michael Hampton

구체적으로 어떤 Linux 에뮬레이터에 대해 이야기하고 있습니까? 실제 문제는 무엇입니까?
slhck

나는 리눅스 에뮬레이터를 사용하고 있지 않습니다. 그들이 어떻게 이것을 달성하는지 궁금합니다. 리눅스와 윈도우에서 다른 실행 파일 형식이 사용되기 때문입니다. 모든 에뮬레이터에서 사용하는 기본 또는 공통 기술이 있어야합니다. 그렇지 않다면 어떻게 다른가?
arulappan

특정 문제에 직면하고 있습니까? 이 사이트는 사용자가 실제로 겪고있는 문제에 대한 Q & A를위한 것입니다. 토론이나 사물 작동 방식에 대한 이론은 아닙니다.
MaQleod

답변:


2

리눅스 에뮬레이터 와 같은 것은 없습니다

  • Cygwin에 대해 이야기하는 경우 특수한 사용자 공간 DLL 파일의 Windows API 호출 측면에서 모든 Unix 시스템 호출을 문자 그대로 다시 구현합니다. Cygwin 환경 용으로 컴파일 된 프로그램은 Windows에서 독립적으로 실행할 수 없습니다.

    Cygwin은 POSIX API 기능의 상당 부분을 제공하는 C 표준 라이브러리 형태의 API 호환성 계층 인 DLL (Dynamic-Link Library)과 Unix를 제공하는 광범위한 소프트웨어 도구 및 응용 프로그램으로 구성됩니다. 같은 모양과 느낌.

    ...

    Cygwin은 Win32 시스템 호출 측면에서 POSIX 시스템 호출 API를 구현하는 라이브러리, 소프트웨어 개발을 허용하는 GNU 개발 툴체인 (GCC 및 GDB 포함) 및 Unix 시스템과 동등한 수의 응용 프로그램 실행

    https://ko.wikipedia.org/wiki/Cygwin

  • MSYS / MSYS2 또는 MinGW에 대해 이야기하고 있다면 시뮬레이터가 아닙니다. 프로그램은 Microsoft C 라이브러리를 사용하여 기본 Windows 바이너리로 컴파일되며 특별한 환경없이 실행할 수 있습니다.

    Cygwin과 MinGW를 모두 Unix 소프트웨어를 Windows로 이식하는 데 사용할 수 있지만 서로 다른 접근 방식이 있습니다. Cygwin은 모든 주요 Unix 시스템 호출 및 라이브러리의 전체 구현을 포함하는 완전한 POSIX 계층을 제공하는 것을 목표로합니다. 호환성은 성능보다 우선 순위가 높습니다. 반면 MinGW의 우선 순위는 단순성과 성능입니다. 따라서, 그러한 쉽게 윈도우 API를 사용하여 구현 될 수있는 특정 POSIX API를 제공하지 않습니다 fork(), mmap()그리고 ioctl(). SDL, wxWidgets, Qt 또는 GTK +와 같이 MinGW로 포팅 된 크로스 플랫폼 라이브러리를 사용하여 작성된 응용 프로그램은 일반적으로 Cygwin 에서처럼 MinGW에서 쉽게 컴파일됩니다.

    https://ko.wikipedia.org/wiki/MinGW#Comparison_with_Cygwin

  • Windows 10 MS에서는 Wine이 에뮬레이터가 아닌 것처럼 실제로 Linux 시뮬레이터 이며 에뮬레이터가 아닌 를 도입했습니다 . 재 컴파일하지 않고 기본 Linux ELF 바이너리를 실행하기 위해 Linux 시스템 호출을 처리하고 Windows 버전으로 변환하는 특수 커널 구성 요소가 있습니다.

    WSL은 기본 Linux ELF64 바이너리를 Windows에서 실행할 수 있도록하는 구성 요소 모음입니다. 사용자 모드와 커널 모드 구성 요소가 모두 포함되어 있습니다. 주로 다음으로 구성됩니다.

    • Linux 인스턴스 수명주기를 처리하는 사용자 모드 세션 관리자 서비스
    • Linux syscalls를 번역하여 Linux 커널을 에뮬레이트하는 Pico 공급자 드라이버 (lxss.sys, lxcore.sys)
    • 수정되지 않은 사용자 모드 Linux를 호스팅하는 Pico 프로세스 (예 : / bin / bash)

    블록 차트

    WSL은 Windows NT 커널 위에 Linux 커널 인터페이스를 가상화하여 수정되지 않은 Linux ELF64 바이너리를 실행합니다. 노출되는 커널 인터페이스 중 하나는 시스템 호출 (syscall)입니다. syscall은 사용자 모드에서 호출 할 수있는 커널에서 제공하는 서비스입니다. Linux 커널과 Windows NT 커널은 모두 수백 개의 시스템 콜을 사용자 모드에 노출하지만 의미가 다르며 일반적으로 직접 호환되지 않습니다. 예를 들어, 리눅스 커널은 같은 것들을 포함 fork, openkill윈도우 NT 커널이 가지고있는 동안 비교 NtCreateProcess, NtOpenFileNtTerminateProcess.

    https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/

과거에는 Microsoft POSIX 하위 시스템UNIX 용 Windows 서비스도 있었지만 Linux를 실행하기위한 것이 아닙니다. 자세한 정보 는 Windows에서 POSIX 및 UNIX 지원을 읽으십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.