32비트 커널에서 64비트 사용자 영역 소프트웨어를 실행하려면 무엇이 필요합니까?

32비트 커널에서 64비트 사용자 영역 소프트웨어를 실행하려면 무엇이 필요합니까?

Linux와 Windows에서는 32비트와 64비트 소프트웨어를 나란히 실행할 수 있는 multiarch/WoW가 포함된 시스템을 갖기 위해 64비트 커널이 필요했습니다.

그러다가 몇 년 전 누군가 MacOS 10.6 Snow Leopard가 32비트 모드의 커널에서 64비트 응용 프로그램을 실행할 수 있다는 사실을 보여줬을 때 저는 깜짝 놀랐습니다. 이는 일회성 기술 전환이었기 때문에 지금은 대부분 잊혀졌을 것입니다. 하드웨어가 모바일 분야를 주도하고 있기 때문에 제가 아는 한 iOS와 Android에서 64비트로 전환할 필요가 전혀 없었습니다.

내 질문: 32비트 Linux 커널(i386 또는 armhf)에서 동일한 기능을 어떻게 얻을 수 있습니까?

나는 이것이 작은 일이 아닐 수도 있다는 것을 안다. 그렇다면 Microsoft는 이 기능을 Windows XP 32비트에 넣을 수 있습니다. 그러나 일반적인 요구 사항은 무엇입니까? 패치나 개념 증명을 제안한 적이 있나요?

임베디드 세계에서는 장치 드라이버의 64비트 지원이 훨씬 뒤처져 있을 수 있기 때문에 이것이 특히 유용하다고 생각합니다.

답변1

64비트 애플리케이션을 실행하려면 커널의 일부 지원이 필요합니다. 프로그램이 커널로 갔다가 돌아올 때 커널은 최소한 페이지 테이블, 인터럽트 테이블 등의 컨텍스트를 설정해야 합니다. 따라서 순수 32비트 커널은 64비트 사용자 공간을 지원할 수 없습니다.

그러나 커널은 사용자 공간에서 64비트 코드를 지원하면서 커널 공간에서 32비트 코드를 실행할 수 있습니다. 여기에는 64비트 커널을 사용하여 32비트 애플리케이션을 실행하는 데 필요한 지원과 유사한 처리가 포함됩니다. 기본적으로 커널은 애플리케이션이 기대하는 64비트 인터페이스를 지원해야 합니다. 예를 들어, 64비트 코드가 커널을 호출하고 매개변수의 의미를 보존하기 위한 일부 메커니즘을 제공해야 합니다(양방향에서).

그렇다면 문제는 그것이 그만한 가치가 있는지 여부입니다. Mac 및 일부 다른 시스템에서는 32비트 커널 코드를 지원한다는 것은 드라이버가 모두 동시에 전환될 필요가 없다는 것을 의미하기 때문에 가능합니다. Linux에서는 개발 모델이 다릅니다. 큰 변경이 이루어지면 커널의 모든 항목이 필요에 따라 마이그레이션되며 커널 개발자는 실제로 커널 외부의 항목을 지원하지 않습니다. 32비트 사용자 영역을 지원하기 위해 64비트 커널을 사용하는 것은 확실히 유용하고 노력할 가치가 있습니다(적어도 x86-64 지원이 추가되면). 32비트 대신 64비트를 사용해야 하는지 잘 모르겠습니다...

답변2

Snow Leopard는 Intel 64비트 CPU에서 64비트 바이너리를 실행할 수 있습니다.

efi가 이미 64비트인 경우 64비트 커널로 부팅할 수도 있습니다(내 Macbook "전환 모델" Pro의 생산 배치는 이미 그러한 시스템이었습니다).

에뮬레이션이 필요하지 않으며 32비트 모드에서 시작할 때 약간의 성능 비용을 지불합니다.

순수 32비트 CPU에서는 64비트 코드를 해석하는 방법을 모르기 때문에 이를 수행할 수 없습니다. 시뮬레이션을 위해 소프트웨어를 사용하지 않는 한 전통적으로 저전력 임베디드 시스템의 경우 속도가 느려집니다.

관련 정보