leehyeon-dv 님의 블로그

4.9 Exceptions 본문

컴퓨터구조 및 설계/4장. The Processor

4.9 Exceptions

leehyeon-dv 2024. 12. 11. 20:03

🔑Table of Contents

  1. Exceptions and interrunpts ( 예외와 인터럽트)
  2. Handing Exception (MIPS에서의 예외처리)
  3. Exceptions in a Pipeline (파이프라인에서 예외처리)
  4. Pipeline with Exceptions
  5. Exception Properties(예외의 특성)
  6. Exception 예제
  7. Exception Example
  8. Multiple Exceptions
  9. Imprecise Exceptions (부정확한 예외처리)

📌 Exceptions and interrunpts ( 예외와 인터럽트)

  • 제어의 흐름 중에 예상치 못한 상황 발생했을때 이를 처리하기 위한 메커니즘, ISA에 따라 처리 방식다름
  • Exception(예외 ) = CPU내부에서 발생하는 비정상적인 상황
    • 0으로 나누기, 메모리 접근오류, 부적절한 명령어 실행
  • interrupt(중단) = 외부 I/O로부터 발생하는 이벤트
    • 키보드입력, 마우스클릭, 네트워크 데이터 수신
  • Trap = 명령어실행 중 특정 조건에의해 발생하는 소프트웨어적인 인터럽트 
  • 입출제어기 없이 이 문제를 다루는 것은 어렵다 

📌 Handing Exception (MIPS에서의 예외처리)

  • MIPS에서 예외가 발생하면  CP0에 의해 예외처리가 수행됨
  • 문제가 생긴 명령어 주소저장
    • 예외 발생 명령어의 주소(PC)가 EPC에 저장됨
  • 문제의 종류를 저장 
    • 예외의 원인은 Cause Register에 저장
    • 1비트로 가정한다면 (undefined opcode : 0, overflow : 1)
  • 예외 처리기로 이동
    • 예외가 발생하면 8000 0180에 위치한 예외처리기로 점프한다
    • handler는 EPC와 Cause Register를 이용해 예외를 분석하고 적절히 처리한다

 

📌An Alternate Mechanism

다른 발전된 방식

  • 벡터 인터럽트(특정 핸들러 주소로 직접 점프하는 메커니즘)
    • 원인에 따른 handler 주소가 다르게 정해져있음 
  • 예 : 
    • underfined opcode : C000 0000
    • overflow                  : C000 0020
  • ✨문제가 발생한 명령어는 다음 중 하나로 진행
    • 해당 handler에서 처리
    • real handler(문제를 처리할 수 있는)로 jump

 

📌 Handler Actions (예외 핸들러 동작)

 

  • 원인을 읽고, 관련된 handler로 넘겨준다(handler로 jump).
  • 필요한 동작을 결정 (복구 가능/불가능)
  • 복구 가능하다면 ,
    • 적절한 동작으로 시정하여 동작시킨다.
    • 수정작업 수행 EPC를 사용해 프로그램 복기
  • 그렇지 않다면
    • 프로그램을 중단한다(terminate).
    • EPC, cause Register, ... 등을 이용하여 error를 보고(Report error).

 

📌 Exceptions in a Pipeline (파이프라인에서 예외처리)

 

  • control hazard의 또 다른 형태로 볼 수 있다
    • control hazard = 프로그램 흐름이 바뀔 가능성 때문에, 직후 명령어를 바로 실행할 수 없는 상태
    • exception도 발생하면, 다음의 명령어들이 실행되지 못하고 exception을 처리해야 함.

  • 예 ) add명령어의 EX 단계에서 overflow가 발생
  • add $1, $2, $1
    • EX단계에서 오버플로우 발생
    • $1에 잘못된 값이 쓰여지는 것 방지 (MEM,WB로 진행하는 것 막기)
    • 이전 명령들 정상적으로 완료되도록 보장
    • add 명령어와 이후 명령어들을 비운다(flush).
    • EPC와 Cause Register의 값을 세팅한다. (주소저장, 예외원인 : 오버플로우 저장)
    • handler로 제어권을 넘긴다(handler가 처리할 수 있도록 jump)
  • 예측실패한 branch와 유사하다.
    • 동일한 하드웨어 자원을 많은 부분 함께 사용한다.

 

📌 Pipeline with Exceptions

추가된 부분 외에도 기존 장치를 많은 부분 함께 활용해 exception을 처리한다

 

📌 Exception Properties(예외의 특성)

 

  • 예외 발생시 명령어 처리
    • 해당명령어와 그 이후 명령어가 파이프라인에서 제거
    • handler에서 예외 처리 후 , 원래의 instruction로 복귀해 실행 재개.
      • 이번엔 시정된 instruction을 실행한다.

 

  • EPC 레지스터에 PC가 저장됨
    • 문제가 발생한 instruction을 식별가능.
    • 예외 발생 명령어의 주소 PC+4가 저장됨
      • 따라서 원래 명령어로 복귀하려면 PC = EPC -4 

 

📌 Exception 예제

 

*add 명령어에서 exception 발생

 40  sub $11, $2, $4

 44  and $12, $2, $5

 48  or   $13, $2, $6

 4C  add $1,  $2, $1

 50  slt   $15, $6, $7

 54  lw   $16, 50($7)

 ...

 

*Handler

 8000 0180  sw $25, 1000($0)

 8000 0184  sw $26, 1004($0)

    ...

  • add이후의 명령어(50,54)를 파이프라인에서 제거
  • EPC= 4C +4 = 50저장
  • Cause Register = 오버플로우 저장
  • 8000 0810에 위치한 예외처리기로 점

📌 Exception Example

EX에서 exception발생

핸재 명령어와 이후 명령어 모두 flush

 

 

📌 Multiple Exceptions

다중(동시) 예외

 

  • 파이프라인의 병렬실행으로 여러 명령어가 동시 실행중일때 여러 예외가 발생할 수 있음
  • 간단한 접근법 (precise exceptions)
    • 파이프라인 가장 후반의 명령어 부터 예외를 처리한다
    • 이후 모든 명령어를 Flush해 제거
  • 복잡한 파이프라인의 특징
    • 비순차 진행 ( 명령어의 실행 순서가 프로그래밍 순서와 다르게 실행될 수 있음)
    • 다중 예외 발생 ( 여러 명령어에서 동시에 예외가 발생하면 명령어 순서를 고려하지 않을 경우 비정확한 예외처리가 발생할 수 있다)
  • Precise Exceptions의 중요성
    • 프로그램 상태 정확히 복구가능
    • 예외처리 이후에도 명령어 순서를 유지해 안정적인 실행보장
    • 그러나, 복잡한 파이프라인으로 순서대로 처리되지 않을 수 있음

 

📌 Imprecise Exceptions (부정확한 예외처리)

 

  • 예외발생시 정확한 명령어 순서를 유지하지 않고 파이프라인 상태와 예외 정보를 저장해 핸들러가 분석 후 처리
  • 예외 발생시 파이프라인 동작을 멈추고, 현 상태를 저장한다.
  • 예외의 원인(하나 혹은 여럿)도 함께 저장한다.
  • 핸들러로 제어이동
    • 어떤 명령어(혹은 여러 명령어)가 예외를 발생시켰는지 파악.
    • 처리해야 할 명령어와 Flush해야 할 명령어를 결정.
    • 필요한 경우, 예외가 발생한 명령어를 수동으로 완료(manual completion)하거나 복구.
  • 하드웨어 간소화 , 소프트웨어 복잡성 증가

   비순차 파이프라인에서의 한계

  • 최신 CPU의 비순차 파이프라인에서는 Imprecise Exceptions 방식을 사용할 수 없습니다.
    • 이유: 비순차 실행은 명령어 순서가 복잡하게 얽혀 있어 명령어 순서를 정확히 복구하는 것이 매우 어렵기 때문입니다.
    • Precise Exceptions 방식이 필요.

 

 


복습

데이터 위험

-전방전달(계산결과를 다음명령어에 전달해  데이터 해자드 해결)

-load use 데이터 해자드(stall하나를 더 만들어서 해결)

-code scheduling (코드의 위치를 바꿔서 해결)

 

제어 위험

- 분기명령어 실행중인데 결과가 확정안남

stall on branch로 해결 (분기 결과 나올때 까지 stall

분기 예측 (미리 예측)

정적 분기예측 - beq가 아니라면을 가정해 연속된 명령어 가져옴

동적 분기 예측 - 실제로 사용하는 것에 더 가까운 방식

'컴퓨터구조 및 설계 > 4장. The Processor' 카테고리의 다른 글

4.8 Control Hazards  (0) 2024.12.11
4.6 Pipelined Datapath and Control  (0) 2024.12.11
4.5 An Overview of Pipelining  (0) 2024.12.11
4.4 A Simple Implementation Scheme  (0) 2024.12.10
4.3 Building a Datapath  (0) 2024.11.21