그만큼 Windows의 Ubuntu에서 Bash Linux 용 Windows 하위 시스템 (WSL)을 통해 Windows에서 기본 Linux ELF64 바이너리를 실행할 수 있습니다. 많은 사람들이 Bash on Ubuntu 발표에 충격을 받았지만 다른 운영 체제 간의 호환성에 대한 새로운 문을 열었다는 점을 언급 할 가치가 있습니다. Microsoft는 한 단계 더 나아가 WSL의 작동 방식을 공개하여 두 시스템이 서로 통신하는 방식을 더 잘 이해할 수 있도록합니다.
WSL은 Microsoft Windows 커널 팀에서 만들었으며 사용자 모드 및 커널 모드 구성 요소를 모두 포함합니다. 보다 구체적으로 시스템은 다음으로 구성됩니다.
- Linux 인스턴스 수명주기를 처리하는 사용자 모드 세션 관리자 서비스
- Linux 시스템 호출을 번역하여 Linux 커널을 에뮬레이트하는 역할을하는 Pico 공급자 드라이버 (lxss.sys, lxcore.sys)
- 수정되지 않은 사용자 모드 Linux (예: / bin / bash)를 호스팅하는 Pico 프로세스.
세 구성 요소 간의 연결은 다음과 같이 설명됩니다.
사용자 모드 Linux 바이너리와 마법이 발생하는 Windows 커널 구성 요소 사이의 공간입니다. Pico 프로세스에 수정되지 않은 Linux 바이너리를 배치함으로써 Linux 시스템 호출을 Windows 커널로 보낼 수 있습니다. lxss.sys 및 lxcore.sys 드라이버는 Linux 시스템 호출을 NT API로 변환하고 Linux 커널을 에뮬레이트합니다.
프로세스의 주요 과제는 두 시스템이 함께 작동하도록 만드는 것입니다.
WSL은 Windows NT 커널 위에 Linux 커널 인터페이스를 가상화하여 수정되지 않은 Linux ELF64 바이너리를 실행합니다. 노출되는 커널 인터페이스 중 하나는 시스템 호출 (syscall)입니다. syscall은 사용자 모드에서 호출 할 수있는 커널에서 제공하는 서비스입니다. Linux 커널과 Windows NT 커널은 모두 수백 개의 syscall을 사용자 모드에 노출하지만 의미가 다르며 일반적으로 직접 호환되지 않습니다. 예를 들어, Linux 커널에는 fork, open 및 kill과 같은 항목이 포함되어 있지만 Windows NT 커널에는 유사한 NtCreateProcess, NtOpenFile 및 NtTerminateProcess가 있습니다.
Linux 용 Windows 하위 시스템에는 Windows NT 커널과 함께 Linux 시스템 호출 요청을 처리하는 커널 모드 드라이버 (lxss.sys 및 lxcore.sys)가 포함되어 있습니다. 드라이버는 Linux 커널의 코드를 포함하지 않고 대신 Linux 호환 커널 인터페이스의 클린 룸 구현입니다. 원시 Linux에서 syscall이 사용자 모드 실행 파일에서 만들어지면 Linux 커널에 의해 처리됩니다. WSL에서 동일한 실행 파일에서 syscall이 만들어지면 Windows NT 커널은 요청을 lxcore.sys로 전달합니다. 가능한 경우 lxcore.sys는 Linux syscall을 동등한 Windows NT 호출로 변환하여 무거운 작업을 수행합니다.
오픈 소스 플랫폼에 대한 Microsoft의 관심을 고려할 때 많은 사람들이 이 기술 대기업은 Canonical과 같은 주요 Linux 중심 기업을 인수해야합니다., 우분투 운영 체제 뒤에있는 회사. Microsoft와 Canonical은 오픈 소스 소프트웨어에 대해 협력했지만이 가능성에 대해서는 언급하지 않았습니다.
Linux – Windows 상호 작용이 어떻게 진화하는지에 관심이 있다면 Microsoft 블로그로 이동. 팀은이 주제에 대한 더 많은 블로그 게시물이 이어질 것이라고 약속했습니다.
확인해야 할 관련 이야기 :
- Linux 사용자가 "Windows 8.1에서 작동하지 않는 헤드폰"문제보고
- Microsoft와 Canonical, Build 2016에서 Bash를 Windows 10에 도입
- 뮌헨, Windows XP 사용자에게 무료 Ubuntu CD 배포 시작