sparc64 아키텍처의 Linux가 사용자 공간에서는 32비트 포인터를 사용하고 커널 공간에서는 64비트 포인터를 사용하는 이유는 무엇입니까?

sparc64 아키텍처의 Linux가 사용자 공간에서는 32비트 포인터를 사용하고 커널 공간에서는 64비트 포인터를 사용하는 이유는 무엇입니까?

표준에서 벗어나면 어떤 이점이 있나요? 64비트 아키텍처의 경우 사용자 공간과 커널 공간의 64비트 포인터가 모두 64비트 포인터입니까?

인용하다:http://lwn.net/images/pdf/LDD3/ch11.pdf(2 쪽)

답변1

호환성.

먼저, Sun의 64비트 지원은 AMD64나 심지어 Itanium이 운영 체제 지원을 받기 훨씬 전인 1998년 Solaris 7까지 거슬러 올라갑니다. 사용자 공간에서 32비트와 64비트를 모두 지원함으로써 대부분의 소프트웨어를 완전히 변경 없이 실행할 수 있습니다.

확인하다Solaris 64비트 개발자 안내서(2005). 첫째, 실제로는 두 가지 별도의 시스템이 있다고 명시되어 있습니다.

Solaris 운영 환경은 두 개의 일류 ABI를 동시에 지원합니다. 즉, 두 개의 독립적이고 완벽하게 작동하는 시스템 호출 경로가 64비트 커널에 연결됩니다. 두 세트의 라이브러리가 애플리케이션을 지원합니다.

그런 다음 계속해서 좋은 오래된 C 코드(32비트라고 가정)가 있으면 제대로 작동할 것입니다.계속하다아무 것도 변경되지 않은 것처럼 잘 빌드됩니다.

4GB 장벽 넘기에서 설명한 대로 대부분의 32비트 응용 프로그램은 Solaris 64비트 운영 환경에서 변경 없이 실행됩니다.

...

32비트 애플리케이션은 소스 코드 수준 호환성을 유지합니다. 64비트 애플리케이션의 경우 주요 변경 사항은 애플리케이션 프로그래밍 인터페이스에 사용되는 파생 유형입니다.

성공적인 기술 변화에는 종종 이상한 잡종과 키메라가 수반되며 때로는 그 목적이 쓸모없게 됩니다.

답변2

수정된 질문에 답하세요: 왜요?리눅스sparc64 아키텍처에서 사용자 공간에서는 32비트 포인터를 사용하고 커널 공간에서는 64비트 포인터를 사용합니까?

이는 64비트 모드의 다른 장점을 유지하면서 포인터가 메모리 크기의 절반을 사용하므로 이진 코드 크기와 런타임을 줄이기 위해 수행된 것 같습니다. 물론 단점은 가상 메모리 크기가 4GB로 제한된다는 점이지만 7년 전에는 지금보다 문제가 덜했습니다.

AMD64(일명 x86_64) 아키텍처에서 64비트 모드의 32비트 포인터는 진행 중인 프로젝트입니다.X32 System V 애플리케이션 바이너리 인터페이스. 64비트 모드에서는 더 많은 레지스터를 사용할 수 있고 메모리 대신 이를 사용하여 애플리케이션을 가속화하기 때문에 이 프로세서 제품군에 대한 관심이 더 높습니다.

답변3

링크를 게시한 문서에 따르면 Solaris x86_64 아키텍처는아니요사용자 공간에서는 32비트 포인터를 사용하고 커널 공간에서는 64비트 포인터를 사용합니다.

어쨌든, 문서가 부정확하거나 불완전하거나 사용할 Solaris 버전과 사용할 컴파일러 버전 및 옵션을 설명하지 않거나 Solaris에는 적용되지 않고 Linux에는 적용됩니다(다음과 같이 명시되어 있음).다른 Linux 시스템에서 프로그램을 실행하여 이를 증명하세요.).

이 두32비트(ILP32) 및 64비트(LP64) 모델Solaris 10 이상에서는 64비트 CPU 아키텍처(x86_64 또는 UltraSPARC/SPARC64)에 관계없이 이러한 포인터를 지원하며 64비트 모델에는 32비트 포인터가 없습니다. 자세한 내용은 다음을 참조하세요.Solaris 64비트 개발자 안내서.

SPARC에서 Solaris는 2.7(1998)부터 64비트 바이너리/포인터를 지원합니다.

관련 정보