문제

내 OS X 상자,커널은 32 비트 바이너리고 아직 그것을 실행할 수 있는 64 비트 바이너리입니다.이것은 어떻게 일하는가?

cristi:~ diciu$ file ./a.out
./a.out: Mach-O 64-bit executable x86_64
cristi:~ diciu$ file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386):   Mach-O executable i386
/mach_kernel (for architecture ppc):    Mach-O executable ppc
cristi:~ diciu$ ./a.out
cristi:~ diciu$ echo $?
1
도움이 되었습니까?

해결책

CPU 로 전환할 수 있습에서 64 비트 모드 실행 32 비트의 경우 트랩으로 커널 컨텍스트,32 비트 커널에서 여전히 건설을 이해하는 구조에서 통과에서 64 비트 사용자 공간다.

MacOS X 커널을 직접하지 않는 면에서 포인터를 사용자가 앱 어쨌든,그것이 거주하는 자신의 별도의 주소 공간이 있습니다.사용자 공간에서 포인터 ioctl 전화,예를 들면,먼저 해야 해결하는 물리적 주소를 새로운 가상 주소를 만들어 커널에서 주소 공간이 있습니다.그것은 정말 중요하지 않는지 여부를 포인터에서 이러한 64 비트 또는 32 비트,커널하지 않는 면에서 직접 어느 경우.

그래서 혼합 32 비트 커널과 64 비트 바이너리할 수 있는 작업,그 반대의 경우도 마찬가지입니다.당신은 할 수 없이 혼합 32 비트 라이브러리와 64 비트 응용 프로그램,포인터로 사이에 전달할 것이다 그들이 잘립니다.MacOS X 공급 이상의 프레임워크에서 32 비트와 64 비트 버전에 있습니다.

다른 팁

그것은 아닌 커널을 실행하는 바이너리입니다.그것은 프로세서입니다.

바이너리는 라이브러리 함수를 호출하고 그야 64bit.고 필요할 경우를 만드는 시스템 호출,그것은 그들의 책임에 대처하는 사실과 그들은 자신이 64 비트이지만,커널은 32.

하지만 그가 뭔가를 당신을 걱정 없습니다.

고 있는 것은 아닙 모든 32-비트 커널을 실행할 수 있는 64 비트 프로세스입니다.Windows 확실히지 않는 이 숙박 시설과 나는 본 적이에서 수행합니다.

32 비트 커널할 수 있는 적재 및 실행되는 64 비트 바이너리는 64 비트를 처리하는 코드 메모리 맵핑,프로그램 로딩하고 몇 가지 다른 64 비트 문제입니다.

그러나,스케줄러에 많은 다른 OS 작업이 필요하지 않습에서 작업하는 64 비트 모드에서 대처하기 위해 다른 문제점-전환 프로세서를 32 비트 모드로를 처리하기 위해 필요한 운전,작업,메모리 할당 및 매핑,인터럽트,등등.

사실,대부분의 것들 OS 지 않을 반드시 수행하는 더 빨리 실행에서 64 비트 OS 은 무거운 데이터를 프로세서 및 그 부분(스트림,디스크 I/O,등)가능성이 높은 변환하는 64 비트(플러그인을 OS 어쨌든).

그러나 맨손으로 커널은 자체 아마 하지 않습니다 작업 스위치를 더 빨리,etc.,경우에는 64 비트입니다.

이 경우 대부분의 사람들은 아직도 실행되는 32 비트 응용 프로그램,그래서 모드로 전환하고 항상 필요하지 않습도는 낮은 오버헤드 조작,그것은 약간의 시간이 소요됩니다.

-Adam

는 ELF32 파일이 포함될 수 있습 64bit 지침에서 실행되는 64 비트 모드.만한 것은 그것이 하는 조직의 헤더와 기호에서 32 비트 포맷입니다.기호 테이블의 오프셋은 32 비트입니다.기호 테이블 항목이 32 비트이 넓은 등입니다.는 파일을 모두 포함 64 비트 코드 비트 및 32 비트 코드를 노출할 수 있습 그 자체로는 32 비트 엘 파일이 그 위치에 그것을 사용하는 64 비트 registors 에 대한 내부을 계산합니다.mach_kernel 은 하나의 같은 실행 파일을 실행합니다.그것은 이점을 얻은 32 비트 드라이버 Elf 연결할 수 있습니다.면 그것을 돌보 전달의 포인터 위치하는 아래 4GBs 다른 연결된 ELF binaries 그것은 잘 작동합니다.

커널을 64-bit 만 가져 효과적인 활용하는 커널 확장을(즉,일반적으로 드라이버)가 될 수 있는 64 비트입니다.사실,당신이 있어야 하는 모든 64-bit kernel 확장,또는(의 경우와 같이 이제)모든 32-bit ones;그들이 필요로하는 네이티브 아키텍처의 실행하는 커널이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top