오늘 스터디 중에 헤멧던 p 362 9.1.4 링크 레지스터 오프셋에서 lr 값에 대해서 잘 나와있습니다.
Pipe line과 Exception 관계 그리고 ^접미사
http://recipes.egloos.com/5034407
덤으로 ^에 대해서도 나와있습니다. 일석이조 링크네요 ^^;
댓글 6
-
홍문화
2011.06.15 10:32
-
홍문화
2011.06.16 10:52
뭔가좀 이상하네요.
말씀에 따르면 Exception 인식은 Fetch단계에서 하지만 Handling은 Exception을 발생시킨 명령어가
Excute 단계에 들어갈때 하게 된다는건데 Exception 인식 시점과 처리 시점이 분리 되면 안될거 같습니다.
"ARM으로 배우는 임베디드 시스템 - 안효복" 책의 175쪽을 보면 Prefetch Abort 발생 시 LR에 저장 되는
위치는 PC-4라고 나와 있습니다. 복귀 주소는 LR-4이므로 PC-8(예외처리 발생 당시 Excute 단계에 있던
명령어의 주소)이 됩니다. "Prefetch Abort 예외처리가 발생할 당시의 실행된 명령의 위치로 되돌아가서
명령을 다시 실행한다." 이러한 메커니즘으로 동작을 한다면 Exception 인식 시점에서 바로 Handling을 하고
Exception 발생 시점의 Excute 단계에 있던 명령어로 돌아가게 될것입니다. 즉, 앞선 두개의 명령어도 처리를
하고 Exception 인식 시점과 처리 시점도 일치하게 될것입니다.
"enters the Prefetch Abort exception when the instruction reaches the Execute stage of the pipeline"
이 문장에서 the instruction이 exception을 발생시킨 명령어를 의미 하는지 exception 발생 당시 excute단계에
있던 명령어를 의미 하는지 정확한 확인이 필요할거 같습니다.
-
정현철
2011.06.15 23:48
Prefetch Abort
When the memory system signals a Prefetch Abort, the ARM968E-S processor:
-
marks the fetched instruction as invalid
-
enters the Prefetch Abort exception when the instruction reaches the Execute stage of the pipeline
-
writes the address of the aborted instruction into r14_abt
-
copies the contents of the CPSR into the SPSR_abt
-
forces the CPSR M[4:0] field to b10111 to enter Abort mode
-
clears the CPSR T bit to enter ARM state
-
sets the CPSR I bit to disable IRQ interrupts
-
forces the PC to the Data Abort vector address.
arm 문서에 따르면 "
enters the Prefetch Abort exception when the instruction reaches the Execute stage of the pipeline" 라고 되어 있네요. 실행단계까지 가서 Exception 처리하는 거 같습니다. 그러니 앞단계의 명령어들은 처리가 끝나지 않았을까요?
-
-
홍문화
2011.06.16 16:42
현재까지 공부한 결과 블로그의 내용에 문제가 있는것으로 판단 됩니다.
Prefetch Abort는 Fetch 단계가 아닌 Excute 단계에서 발생합니다.
Data Abort는 Excute 단계가 아닌 Memory 단계에서 발생합니다.
흠... 교재 362쪽을 보니 SWI와 Undefined Instruction exception은 decode 단계가 아닌 excute 단계에서
발생 한다고 나와 있네요. 머리가 점점 복잡해지는군요.
-
홍문화
2011.06.16 22:50
네~ 감사합니다.
찾아보겠습니다. ^^;
-
myskan
2011.06.16 22:41
잘못 생각하고 계십니다. exception 발생 시점과 프로세서에서 exception 처리 시점에 대한 이해가 부족하신듯 싶습니다. precise exception과 imprecise exception 에대하여 찾아보시길 권합니다.
.
일이 바쁠때는 블로그 한페이지 보기도 힘드네요.
책보다 이해하기 쉽게 설명이 되어있는거 같습니다.
자~ 질문 들어갑니다. ㅋ
Prefetch Abort Exception을 예로 들겠습니다.
Fetch 단계에서 Exception이 발생하고 LR에는 PC+4의 주소가 저장이 됩니다.
Exception 처리 여부에 따라 복귀 주소는 LR 또는 LR-4가 됩니다.
Exception이 발생한 시점에서 PC-4(Decode 단계에 있는 명령어), PC-8(Excute 단계에 있는 명령어)의
명령어들이 어떻게 처리가 되는지 나와 있지가 않네요.
Prefetch Abort Exception handler로 뛰기 전에 이 두녀석들의 실행을 완료하고 뛰어야 될거 같은데
어떻게 처리가 되는지 궁금합니다. ㅋ