운영 체제는 실행 중인 하드웨어 아키텍처가 무엇인지 알아야 합니까?

운영 체제는 실행 중인 하드웨어 아키텍처가 무엇인지 알아야 합니까?

어쩌면 이것은 기본적인 이론적인 질문일지도 모르지만 나는 대답을 모르고 이에 대한 정보를 찾지 못했습니다.

운영 체제(Windows 또는 Linux 배포판을 상상해 보십시오)가 하나의 마이크로 아키텍처에서 실행되는지 아니면 다른 마이크로 아키텍처(예: Intel Sandy Bridge 아키텍처 또는 Intel Haswell 아키텍처)에서 실행되는지 알아야 합니까? 아니면 OS가 이러한 세부 사항을 전혀 모르나요?

운영 체제가 사용자와 마이크로프로세서 아키텍처 사이의 "브리지"라는 사실은 OS가 Intel Sandy Bridge에서 동일하게 실행되지 않는 특정 사항이 있기 때문에 OS가 이러한 세부 사항을 알아야 한다고 생각하게 만들었습니다. AMD 불도저보다요.

대답이 '예'인 경우 하드웨어는 해당 아키텍처인 OS와 어떻게 통신합니까?

답변1

Intel과 AMD x86(및 x86_64)은 운영 체제에 관한 한 동일한 프로세서 "아키텍처"입니다. "핵심" 명령어 세트는 동일하며 최소 수준의 프로세서 기능을 정의합니다.

프로세서는 완전히 다르게 작동할 수 있습니다.내부적으로또는육체적으로, 그러나 명령어에 대한 기계어 코드(16진수 바이트)는 동일합니다. 외부 아키텍처(x86)는 동일하지만 다릅니다.내부아키텍처(종종 uArch 또는 마이크로 아키텍처라고도 함)

결과적으로 기본 마더보드 가져오기 및 프로세서 초기화를 수행하는 시스템 펌웨어(UEFI)에서 운영 체제로의 초기 핸드오버는 AMD와 Intel에서 동일하며 바이트를 로드하고 코드 경로를 선택하는 지침도 동일합니다. 부팅 코드가 실행되면 CPU 확장을 감지하고 찾은 내용에 따라 최적화된 코드를 실행할 수 있는 라이브러리 로드를 시작할 수 있습니다.

ARM과 x86은 내부적으로나 외부적으로 완전히 다른 아키텍처이며 동일한 기계 코드 바이트는 완전히 다르거나 기능하지 않는 코드를 생성합니다. 따라서 부팅 실행 파일은 생성하기 위해 실행되는 특정 아키텍처를 대상으로 컴파일해야 합니다. 올바른 기계 코드.

관련 정보