2009-10-25 3 views
10

x86의 리얼 모드에서 멀티 프로세서 시스템의 다른 프로세서에서 코드를 실행하려면 어떤 지침을 사용해야합니까?다른 프로세서 (x86 어셈블리)에서 코드 실행

(I 실제 운영 시스템이 부팅되기 전에, 특정 CPU 레지스터를 설정하고 시스템의 모든 CPU에서이 작업을 수행 할 필요가 어셈블러에서 일부 사전 부팅 코드를 쓰고 있어요.)

+1

리얼 모드로 MP를 할 수 있습니까? – Draemon

+0

하지 않을 이유가 없습니다. MP와 관련된 모드는 없습니다. –

+1

http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like의 속눈썹처럼 보입니다. –

답변

9

그래서 당신이 가지고 독립 실행 형 ("pre-boot"라고 말한) 프로그램은 부트 로더와 마찬가지로 실제 모드로 실행됩니까? 그리고 이것은 일반적인 BIOS로 PeeCee에 있습니까?

그런 경우 하나의 CPU 만 실행 중입니다.

BSP sends AP an INIT IPI 
BSP DELAYs (10mSec) 
If (APIC_VERSION is not an 82489DX) { 
    BSP sends AP a STARTUP IPI 
    BSP DELAYs (200μSEC) 
    BSP sends AP a STARTUP IPI 
    BSP DELAYs (200μSEC) 
} 
BSP verifies synchronization with executing AP 

BSP는 부트 프로세서입니다 : 스핀 업하는 운영 체제는 일반적으로 소위 실행됩니다 다른 CPU 단위 이렇게되면 보편적 시작 알고리즘을 위해. AP는 응용 프로그램 프로세서입니다. IPI는 프로세서 간 인터럽트입니다. IPI를 수행하려면 부팅시 활성화되지 않은 PC 아키텍처에 대한 인터럽트 컨트롤러 확장 인 APIC를 활성화해야합니다. 이것이 코드가 실행중인 ICU 버전의 종류에 대해 걱정할 이유입니다. 이 모든 것은 상당히 깊은 커널 마법입니다. 예를 들어 Linux, NetBSD 또는 다른 * BSD 소스 코드를 살펴볼 수도 있지만 읽기가 쉽지는 않습니다. 당신이 정말로 이기면, 어딘가에 작은 커널이나 독립형 SMP 테스트 프로그램이있을 것입니다.

자세한 내용은 Intel Multiprocessor Specification을 참조하십시오.

+0

감사합니다. , 그게 내가 필요한 정보 일 뿐이야! 이것은 도전이되어야합니다 ... –