uexadd 커널 서비스의 사용자 모드 예외 처리기
용도
커널 스레드가 사용자 모드에서 실행되는 동안 발생하는 예외를 처리합니다.
구문
매개변수
| 항목 | 설명 |
|---|---|
| 지수 | 이 예외 처리기를 등록하는 데 사용된 예외 구조를 가리킵니다. |
| mst | 프로세스의 현재 kmstsave 영역을 가리킵니다. 이 포인터를 사용하여 kmstsave 영역에 액세스하여 예외에 대한 추가 정보를 얻을 수 있습니다. |
| 항목 | 설명 |
|---|---|
| tid | 예외 발생 시 실행 중이던 커널 스레드의 스레드 ID를 지정합니다. |
| type | 발생한 예외 유형을 표시합니다. 이 유형 값은 플랫폼에 따라 다릅니다. 구체적인 값은 /usr/include/sys/except.h 파일에 정의되어 있습니다. |
설명
커널 스레드가 사용자 모드에서 실행되는 동안 감지되는 동기 예외에 대해 사용자 모드 예외 처리기(exp->func)가 호출됩니다. 커널 예외 처리기는 구조의 kmstsave 영역에 예외 정보를 저장합니다. 사용자 모드 예외의 경우 사용자 예외 처리기 목록에 있는 첫 번째 예외 처리기를 호출합니다. 예외 처리기는 인터럽트 환경에서 INTPAGER 또는 INTIODONE의 우선순위 수준에서 실행됩니다.
등록된 예외 핸들러가 예외가 처리되었음을 표시하는 리턴 코드를 리턴하는 경우, 커널은 목록에서 추가 예외 핸들러를 호출하지 않고 예외 핸들러를 종료합니다. 예외 핸들러가 예외가 처리되지 않았음을 표시하는 리턴 코드를 리턴하는 경우, 커널은 목록에서 다음 예외 핸들러를 호출합니다. 목록의 마지막 예외 핸들러가 기본 핸들러입니다. 이는 일반적으로 스레드를 신호하는 것입니다.
커널 예외 핸들러는 페이지 결함이 없어야 합니다. 또한 예외 처리 활동으로 인해 예외가 발생할 수 있는 경우 setjmpx 커널 서비스를 사용하여 예외 처리기를 등록해야 합니다. 이는 특히 예외 핸들러가 I/O를 처리하는 경우에 중요합니다. 예외 처리기가 예외를 처리하지 않은 경우 사용자 모드 예외 처리를 위해 반환 코드를 EXCEPT_NOT_HANDLED 값으로 설정해야 합니다.
실행 환경
Uexadd 커널 서비스에 대한 사용자 모드 예외 처리기는 인터럽트 환경에서 INTPAGER 또는 INTIODONE 우선순위 수준에서 호출됩니다.
리턴 값
| 항목 | 설명 |
|---|---|
| 예외 처리 | 예외가 성공적으로 처리되었음을 표시합니다. |
| 예외 처리되지 않음 | 예외가 처리되지 않았음을 표시합니다. |