2013-02-19 2 views
2

Win32에서 프로세서 정의를 넘어서는 인터럽트는 어느 정도까지 지원됩니까? 예를 들어 x86 시스템은 중단 점 트랩 (INT 3)과 같은 트랩을 포함하여 최소 18 개의 인터럽트를 정의합니다. 다른 19-255 인터럽트는 인텔에서 소프트웨어 정의 인터럽트로 열어 둡니다. Windows/WinAPI에서 사용되는 응용 프로그램이 있습니까? 아니면 응용 프로그램을 자유롭게 사용할 수 있습니까? Windows에서 사용하는 경우 관련 문서는 어디에서 찾을 수 있습니까? MSDN에서 보았지만 아무 것도 찾을 수 없었습니다.Win32에서 지원되는 인터럽트는 어느 정도입니까?

(BTW 내가 그렇게 처음에 인터럽트를 사용의 타당성에 대한 당신의 의견에 저를 강의하지 마십시오, 컴파일러, 디버거 및 기타 시스템 수준의 프로그래밍을하고있는 중이 야.)의 Win32 응용 프로그램에서

+5

응용 프로그램 자체는 특히 인터럽트 처리기가 링 0에서 실행되는 경향이 있기 때문에 인터럽트 처리기를 등록 할 수 없습니다. 이는 드라이버가 수행해야합니다. WinDDK를 다운로드하여 주위를 둘러보고 엉망으로 만들었습니다. – slugonamission

답변

4

, 거기에 일반적으로 하나의 인터럽트가 보통 사용됩니다. int 2Eh. 그것은 시스템 호출 진입 점으로 사용됩니다. DOS에서는 int 21h과 유사합니다. 나머지 인터럽트는 앱에서 사용하지 않습니다.

그러나 응용 프로그램은 구조적 예외 처리 (SEH)/벡터화 된 예외 처리 (VEH)를 통해 일부 CPU 예외 (및 디버그 중단)를 처리 할 수 ​​있습니다. Windows는 앱에서 발생하는 CPU 예외를 포착하고 가능한 경우 (Windows가 CPU 예외 모델을 모방하는 데 완벽하지는 않음) 앱에 다시 반영합니다.

Windows는 장치 인터럽트를 내부적으로 사용하며 응용 프로그램이이를 방해하지 않도록합니다. x86 CPU는 커널이 실행되는 가장 특권 모드에서 인터럽트를 처리합니다.

요즘 많은 장치 인터럽트는 고정 인터럽트 벡터와 관련이 없으며 구성 가능하며 쿼리 또는 설정 변경을 위해 PCI와 같은 다양한 작업을해야합니다.

장치 및 인터럽트를 직접 사용하려면 Windows 용 커널 모드 드라이버를 작성해야합니다. Device Driver Kit (DDK)과 과 같은 서적을 통해 시작할 수 있습니다.

아직 장치 XYZ 및 인터럽트 프로그래밍의 세부 사항을 찾고 있다면 하드웨어 관련 정보가 필요하기 때문에 MSDN이나 DDK에서 모든 것을 찾을 필요가 없습니다. Microsoft의 통제. 커널은 I/O를 수행하고 인터럽트를 처리하는 데 필요한 기능을 제공하지만 궁극적으로는이를 사용하는 장치 드라이버에 달려 있습니다.

+0

이 문제를 해결하기 위해 Russinovich의 "Windows Internals 5"및 기타 소스를 확인하고이를 확인합니다. 소프트웨어 인터럽트는 OS에 의해 분명히 풀링되고 래퍼 (wrapper) 역할을하는 Windows의 APC 기능에 의해 사용됩니다. 이론적으로는 사용자 프로세스에 권한이있는 한 소프트웨어 인터럽트를 활성화 할 수 있지만 APC가 의존하는 다른 매개 변수가 올바르게 구성되지 않은 경우 프로세스가 중단되는 것 같습니다. 포스터에 나와 있듯이 Windows를 쿼리하여 활성화 된 APC를 확인해야합니다. –

+1

앱의 int 명령은 CPU를 커널 모드로 전환합니다. 이 예외에 의미를 부여하려면 커널 측에 몇 가지 코드가 필요합니다. 마찬가지로 하드웨어 인터럽트는 CPU를 커널 모드로 전환하므로 동일하게 필요합니다. –

+0

int 2E는 요즘 많이 사용되지 않습니다. 일반적으로 모든 syscall은 훨씬 더 빠른 syscall/sysenter 명령을 사용하여 수행됩니다. 그러나 int 2E는 기존의 이유로 커널이 처리합니다. –

관련 문제