
컴퓨터에서 커널은 애플리케이션과 하드웨어(CPU) 사이에 위치하며 이를 통해 소프트웨어가 하드웨어와 상호 작용할 수 있습니다.
그렇다면 Microsoft Surface X(SQ1 및 SQ2 프로세서)에서 개발자는 왜 x86 Windows에서 응용 프로그램을 가져올 수 없습니까? 예를 들어 Chrome, Firefox, 일부 벤치마크 도구 및 게임... 저는 Microsoft가 x86-64 커널만 ARM 버전으로 교체하면 대부분의 애플리케이션이 제대로 작동할 것이라고 생각했습니다.
리눅스도 마찬가지다.
답변1
이 경우 커널은 예상보다 적은 작업을 수행합니다. 특히, 커널은 컴파일된 바이너리를 구성하는 기계어 코드를 번역/파싱/해석/조작하지 않습니다.
누군가가 언제컴파일소스 코드를 바이너리로 변환하는 것, 그들이 하는 일은 실제로 해당 소스 코드를 바이너리로 변환하는 것입니다.기계어 명령어CPU가 이해하는 것입니다.
만드는 것 중 하나는x86플랫폼은 공유입니다명령어 세트호환되는 모든 하드웨어에서. 이렇게 하면 컴파일러는 모든 x86 CPU가 명령을 이해 PUSH
하고 스레드를 통해 실행할 때 예상한 작업을 수행할 것이라고 기대할 수 있습니다.
팔다른 명령어 세트를 사용합니다. 이 경우 소스 코드는 ARM CPU가 이해할 수 있는 명령어(해당 명령어 세트에 정의된 명령어)로 컴파일(번역)되어야 합니다.
모든 프로그램이 "네이티브" 바이너리(CPU 명령어 세트에 의해 구현되는 올바른 형식의 명령어로만 구성된 바이너리)를 사용하는 것은 아닙니다. Java 및 C#과 같은 언어는 가상 어셈블리 언어로 컴파일되며 런타임 시 기본 명령으로 JIT 컴파일됩니다. 다른 사람들은 특정 플랫폼에 맞게 맞춤화된 통역사를 사용합니다.
즉, ARM CPU는 x86 컴파일 프로그램이 사용하는 언어를 인식하지 못하며 그 반대의 경우도 마찬가지입니다. 커널은 하드웨어 액세스 및 CPU 스케줄링과 같은 사항을 제어하지만 시스템에서 실행되는 프로그램의 명령을 변경하지는 않습니다. 단지 프로세스를 생성하고, 실행을 시작하고, CPU에 실행 시간을 부여하므로 많은 프로세스가 이를 반동시에 공유할 수 있습니다.