인텔 마이크로 코드 란 무엇입니까?
내가 읽은 내용에서 BIOS를 수정하지 않고 CPU의 버그를 수정하는 데 사용됩니다. 어셈블리에 대한 기본 지식에서 어셈블리 명령이 CPU에 의해 내부적으로 마이크로 코드로 분할되고 그에 따라 실행된다는 것을 알고 있습니다. 그러나 인텔은 시스템이 실행되는 동안 일부 업데이트를 수행 할 수있는 액세스 권한을 제공합니다.
누구든지 그들에 대한 더 많은 정보를 가지고 있습니까? 마이크로 코드로 수행 할 수있는 작업과이를 사용하는 방법에 대한 문서가 있습니까?
편집 : 나는 위키피디아 기사를 읽었습니다. 내가 직접 작성할 수있는 방법과 그것을 사용하는 방법을 알지 못했습니다.
예전에는 마이크로 코드가 CPU에서 많이 사용되었습니다. 모든 명령이 마이크로 코드로 분할되었습니다. 이것은 겸손한 CPU에서 비교적 복잡한 명령어 세트를 가능하게 했습니다 (많은 피연산자 모드와 8 개의 32 비트 레지스터 가있는 Motorola 68000 은 40000 개의 트랜지스터에 맞는 반면 단일 코어 최신 x86은 1 억 개 이상을 가질 것입니다 ). 이것은 더 이상 사실이 아닙니다. 성능상의 이유로 대부분의 명령어는 이제 "하드 와이어"되어 있습니다. 해석은 마이크로 코드 외부의 유연성없는 회로에 의해 수행됩니다.
최근 x86에서는 fsin
(부동 소수점 값에 대한 사인 함수를 계산하는) 와 같은 일부 복잡한 명령어 가 마이크로 코드로 구현되었지만 간단한 명령어 (를 사용한 정수 곱하기 포함)는 구현 imul
되지 않았습니다. 이는 사용자 정의 마이크로 코드로 달성 할 수있는 것을 제한합니다.
즉, 마이크로 코드 형식은 특정 프로세서 모델에만 국한된 것이 아닙니다 (예 : Pentium III 및 Pentium IV 용 마이크로 코드는 서로 자유롭게 교환 할 수 없습니다. 물론 AMD 프로세서에 Intel 마이크로 코드를 사용하는 것은 질문), 그러나 그것은 또한 엄격하게 보호되는 비밀입니다. 인텔은 운영 체제 또는 마더 보드 BIOS가 마이크로 코드를 업데이트 할 수있는 방법을 발표했지만 (하드 리셋마다 수행해야하며 업데이트는 휘발성 RAM에 보관 됨) 마이크로 코드 내용 은 문서화되지 않았습니다 . 인텔 ® 64 및 IA-32 아키텍처 소프트웨어 개발자 설명서(volume 3a)는 업데이트 절차 (섹션 9.11 "마이크로 코드 업데이트 기능")를 설명하지만 실제 마이크로 코드는 "암호화"되어 있으며 체크섬으로 가득 차 있습니다. 문구는 모호하여 거의 모든 종류의 암호화 보호가 숨겨 질 수 있지만 결론은 현재 인텔 이외의 사람들이 사용자 지정 마이크로 코드를 작성하고 시도하는 것이 불가능하다는 것입니다.
"암호화"에 디지털 (비대칭) 서명이 포함되어 있지 않거나 인텔 직원이 어떻게 든 보호 시스템을 망가 뜨린 경우, 일부 놀라운 리버스 엔지니어링 노력 이 잠재적으로 이러한 마이크로 코드를 생성 할 수 있다고 생각할 수 있지만 , (대부분의 명령이 유선으로 연결되어 있기 때문에) 적용 가능성이 제한적일 수 있으므로 프로그래밍 능력에 관한 한 많이 구매하지 않을 가능성이 있습니다.
예를 들어 qemu-arm이 x86 호스트에서 arm 프로세서를 시뮬레이션 할 수있는 가상 머신 또는 시뮬레이터에 대해 느슨하게 생각해보십시오. 이상적으로 시뮬레이션 된 arm에서 실행되는 소프트웨어는 이것이 실제 팔이 아니라는 것을 알지 못합니다. 이 아이디어를 전체 칩이 항상 x86처럼 보이도록 설계된 수준으로 가져 가십시오. 소프트웨어는 칩 내부에 프로그래밍 가능한 항목이 있다는 것을 결코 알지 못합니다. 그리고 내부의 다른 프로세서는 x86을 구현 / 시뮬레이션하기 위해 다소 설계되었습니다. 하드웨어 팀과 아마도 프로세서 / 코어가 초기 x86 클론의 내장이 되었기 때문에 인기있는 AMD 29000 제품 라인이 사라졌습니다. Linus가 일했던 Transmeta에는 저전력 x86으로 만들어진 vliw 프로세서가있었습니다. 이 경우 번역 레이어는 비밀이 아니 었습니다. Vliw, 아주 긴 지시어,
아니요, 제가 암시하는 것만 큼 에뮬레이션 레이어가 아닙니다. 각 칩 내부에 qemu 프로그램이있는 일부 리눅스가 실행되지 않습니다. 중간에 소프트웨어 / 마이크로 코드가없는 하드 와이어와 풀 블로우 에뮬레이션 사이에 있습니다. 프로그래밍 가능 비트는 fpga, 프로그래밍 가능 게이트와 같거나 소프트웨어 또는 프로그래밍 가능 상태 기계 일 수 있습니다. 이는 프로그래밍 불가능 게이트를 의미하며 게이트에서 실행되는 것만 프로그래밍 가능합니다.
비 x86, 비 빅 아이언 유형 프로세서. 예를 들어 ARM을 예로 들면 마이크로 코드가없는 하드 와이어가 있습니다. 마이크로 컨트롤러, PIC, MSP430, AVR은 이들이 마이크로 코딩되지 않는다고 가정합니다. 기본적으로 모든 프로세서가 마이크로 코딩되었다고 가정하지 마십시오. 우리가 PC에서 다루는 것은 그랬고 여전히있을 수 있기 때문에 모두가 그렇다고 느낄 수 있습니다.
이 마이크로 코드로 플레이하는 것이 재미있게 들릴 수 있지만 프로세서 제품군에 따라 매우 구체적 일 가능성이 높으며 각각 고유 한 내부가있는 Intel 또는 AMD에서 작업하지 않는 한 작동 방식에 액세스 할 수 없을 것입니다. 따라서 두 곳 중 한 곳에서 일을 한 다음 참호를 통과하여이 작업을 수행하는 엘리트 팀 중 하나가 될 수 있습니다. 그리고 당신의 경력이 갇히게되면 당신의 기술은 한 회사에서 한 직업으로 제한 될 수 있습니다. 비디오 카드에 개별 GPU를 더 재미있게 프로그래밍 할 수 있습니다. 문서화되어 있거나 최소한 도구가있는 것, AMD 또는 Intel에서 10 년을 보내지 않고도 아무데도 가지지 않고 오늘 할 수있는 것입니다.
일반적으로 마이크로 코드를 작성하지 않습니다. 이를 위해서는 CPU 마이크로 아키텍처에 대한 자세한 지식이 필요합니다. 인텔은 마이크로 아키텍처 또는 마이크로 코드에 대한 정보를 일반적으로 공개하지 않습니다.
참고 URL : https://stackoverflow.com/questions/4366837/what-is-intel-microcode
'Development Tip' 카테고리의 다른 글
scanf가 C에서 버퍼 오버플로를 일으키는 것을 방지하는 방법은 무엇입니까? (0) | 2020.10.19 |
---|---|
IE 호환 모드를 프로그래밍 방식으로 비활성화하려면 어떻게합니까? (0) | 2020.10.19 |
다음 일치하는 형제를 찾는 효율적이고 간결한 방법? (0) | 2020.10.19 |
“git commit --amend”에서 커밋 메시지 단계를 건너 뛰는 방법은 무엇입니까? (0) | 2020.10.19 |
모듈 대 네임 스페이스-가져 오기 및 Typescript 필요 (0) | 2020.10.19 |