2012-07-03 3 views
1

x86 CPU에서 인터럽트, 특히 페이지 폴트의 제어 흐름을 처리하려고합니다. 지금까지 알아낼 수있는 것은 다음과 같습니다.x86에서 장치 메모리 복사본을 서비스하기 위해 페이지 폴트에 대한 인터럽트 처리

  1. IDT는 서비스 루틴 주소로 채워집니다.
  2. 인터럽트가 발생합니다.
  3. CPU는 EFLAGS, CS 및 EIP를 스택에 저장합니다.
  4. EIP가 IDT에서 가져온 ISR 주소로 설정됩니다. 즉, mov eip, [idtr+interruptNum*4]
  5. 인터럽트 루틴이 실행됩니다.
  6. 인터럽트 루틴은 iret 명령으로 완료됩니다.

이제 인터럽트가 실제로 NIC 버퍼와 관련된 페이지 폴트라고 가정 해 봅시다. ISR이 out을 사용하여 DMA 컨트롤러에 시스템 메모리에서 장치로 복사본을 보내도록 (또는 그 반대로) 말합니까? 아니면 그 반대입니까?

+0

아니요, 페이지 오류 처리기는 처리하는 장치 드라이버와 매우 다릅니다 NIC. DMA는 페이지 폴트를 일으키지 않으며 페이징되지 않은 풀의 실제 메모리를 사용합니다. –

+0

DMA가 페이지 폴트를 일으킨 것은 아닙니다. ISR이 DMA 컨트롤러가 메모리 블록을 시스템 메모리 (RAM)에서 장치로 복사하도록 지시했음을 의미합니다. 아마도 제 질문이 충분히 설명이되지 않았을 것입니다. – Polynomial

+0

오, 잠깐, 이제 알 겠어. 따라서 인터럽트 처리기는 장치 드라이버에 신호를 보내는 데 사용되며 장치 드라이버는 장치와 통신하기 위해 필요한 모든 작업을 수행합니다. 이 경우 시그널링은 보통 어떻게 이루어 집니까? 나는 ISR이 매우 빠르게 실행될 것이라는 인상을 받고 있지만 장치 드라이버는 장치와 통신하기 위해 많은 작업을해야 할 수도 있습니다. 아니면 인터럽트 라인을 즉시 지워서 새로운 인터럽트를 처리 할 수 ​​있습니까? – Polynomial

답변

1

저는 메모리 매핑 I/O가 오해하고 있다고 생각합니다.

장치가 메모리 매핑 I/O를 사용하는 경우 물리적 주소 범위가 할당됩니다. northbridge 및/또는 southbridge은 CPU가 해당 주소 범위 내에서 메모리 작업을 수행 할 때 작업이 RAM이 아닌 장치로 보내 지도록 구성됩니다. RAM에는 동일한 주소 공간의 사본이 없으며 DMA는 관련되지 않습니다.

장치 드라이버가 메모리 매핑 I/O에 액세스 할 수 있도록 운영 체제는 가상 주소 범위를 관련 실제 주소 범위에 매핑합니다. 일반적으로 성능상의 이유로 커널 모드로 제한된 액세스 권한을 갖는 전역 매핑 (즉, 모든 프로세스에서 동일한 매핑)이됩니다. 이 가상 주소 공간은 항상 매핑되므로 페이지 폴트가 발생하지 않습니다.

장치가 메모리 매핑 I/O 대신 DMA를 사용하는 경우에는 약간 다릅니다. 장치 드라이버는 일반적으로 작업을 위해 페이징 할 수없는 메모리 블록을 예약하므로 다시 페이지 폴트가 발생하지 않습니다. DMA 컨트롤러는 가상 주소보다는 물리적 주소로 작동하기 때문에이 메모리는 DMA 작업을 수행하기 위해 가상 주소 공간에 매핑 될 필요가 없습니다. (물론 메모리 블록을 장치 드라이버가 읽고 쓸 수 있도록 가상 주소 공간 매핑이 있어야합니다.)

+0

우수 답변. 이 주제에 대한 더 자세한 정보는 어떤 문서를 알고 있습니까? – Polynomial

+1

MSDN 라이브러리에는 Wikipedia와 Windows 장치 드라이버 설명서 만 있습니다. 인텔은 아마도 자신의 웹 사이트 탐색이 어려웠음에도 불구하고 칩셋에 대한 자세한 사양을 가지고있을 것입니다. –

+0

도움을 주셔서 감사합니다. 나는 주위를 파헤쳐. – Polynomial