2013-04-29 3 views
0

추상 머신의 처리가 된 신호의 영수증 중단 §5.1.2.3.5컨텍스트에 대한 인터럽트가 얼마나 방해가됩니까? 어떻게 복원합니까?

5 같은 휘발성 sig_atomic_t 지정하지 형 중 어느 로크가없는 원자 객체 나 객체의 값임을 부동 소수점 환경의 상태입니다.개체가 아니고 volatile 형식 인 sig_atomic_t 도 아닌 핸들러로 수정 된 개체의 값은 이 처리기를 종료하면 부동 소수점 환경 이 상태를 변경하는 경우와 마찬가지로 불확정 해집니다. 핸들러는 원래 상태로 복원되지 않습니다.

(강조 광산) I 인터럽트 핸들러는 부동 소수점 계산을 수행하는 경우, 하드웨어/소프트웨어 인터럽트 인 경우, (그 위에 예를 로컬 스택 변수의) 것을 의미하는 것으로이 걸릴

상기 인터럽트 된 프로세스는 일관성없는 상태로 유지되며 진행중인 부동 소수점 계산을 다시 시작해야합니다. 그것과 그 의미는 무엇입니까? 어떻게 "문맥을 복원"합니까?

+0

u는 더 자세히 질문 할 것입니다! – akp

답변

1

부동 소수점 환경은 fesetround()과 같은 함수에 의해 수정 된 부동 소수점 예외 및 반올림 모드의 설정을 나타냅니다.

fegetenv()으로 현재 부동 소수점 환경을 저장하고 fesetenv()으로 복원 할 수 있습니다. 부동 소수점 연산을 수행하는 신호 처리기를 설치하면이를 수행해야합니다 (예 : 중단 된 코드에 대해 현재 발생 된 부동 소수점 예외 집합을 변경하지 않음).

0

사이드 커널에서 부동 소수점 연산을 수행 할 수 있다고 생각합니다. 그러나 커널은이 코드 (코드)가 kernel_fpu_begin()/kernel_fpu_end()으로 둘러싸여 있으면이를 지원합니다. 이 함수는 fpu 컨텍스트를 저장하고 복원합니다. 또한, 그들은 등 더 수면을 의미() preempt_enable preempt_disable() /, 페이지 오류

어떤 인터럽트가 다음 현재 실행중인 프로세스의 제어 레지스터를 발생 적

이 & 다른 정보가 저장를 호출합니다. & 커널 인터럽트가 작동하는 경우 현재 명령 사이클을 완료 한 후에 만 ​​프로세스가 인터럽트되기 때문에 현재 실행중인 프로세스가 어떤 상태인지는 중요하지 않습니다. 모든 정보를 저장 & 컨텍스트 전환이 발생 발생합니다.

복원하는 동안 인터럽트 된 프로세스의 저장된 제어 정보가 스택에 복원 됨 & 다음 명령어가 실행 됨 !!!

관련 문제