View
가장 단순한 IO Interrupt 형태 : 모든 IO Device들이 OR gate로 묶여있다.
IO Interrupt가 발생했다는 신호가 CPU에 들어오면, CPU는 누가 이 신호를 보냈는지 IO Device를 추적한다.
이를 통해 해당 Interrupt를 실행한다. Priority는 Status Register를 먼저 읽어 Check 한다.
- 누가 보냈는지, Priority는 어떤지를 알기 위해서는 모든 IO에 접근 ... 응답시간이 길고 효율이 낮다.
더 나은 Interrupt 처리가 필요하다.
INTC ( Interrupt Controller ) / PIC ( Programmable Interrupt Controller ) / APIC ( Advanced PIC ) / GIC ( Generic IC )
조금씩 다르지만 모두 같은 성질을 가지고 있다.
- Priority Check, Masking Interrupt, Interrupt Distribute, 기타 작업을 수행한다.
IO Device들과 CPU 중간에서 Interrupt를 Control 하는 역할을 수행.
GIC는 Distributer, CPU Interface 등으로 구성되어있다.
Distributer 는 1020 Byte ( 1kb )
- SGI ( Software Generated Interrupt )
[ #0 ~ #15 ] 16개의 ID를 가지고 있다. ( Interrupt의 ID는 미리 배정되어있음 ( 수정 불가 ) )
- PPI ( Private Peripheral Interrupt )
[ #16 ~ #31 ] 16개의 ID를 가지고 있다.
- SPI ( Shared Peripheral Interrupt )
[ #32 ~ #1019 ] 이지만, 모든 ID를 다 사용하지는 않는다.
GICD_Enable, Disable Bit : IO Device 하나당 1bit의 공간을 필요로 한다.
-> Register 한 개당 32Bit ... 32개의 Register가 있으면 모든 Device에 할당가능.
GICD_Priority Bit : IO Device 하나당 8bit의 공간을 필요로 한다.
-> Register 한 개당 32Bit ... 255개의 Register가 있으면 모든 Device에 할당가능.
But, Priority Level을 위해 모든 Bit을 사용하지는 않는다. ( 5 Bit을 사용함 )
GICD_Target Register : CPU하나당 8Bit을 이용해 지정한다.
-> 8개의 CPU를 처리할 수 있도록 디자인 되어있음.
CPU Interface
- PMR : Priority Mask Register
Mask Value보다 Priority가 낮으면 수행하지 않음. ( 수행중인 것보다 우선순위가 높은지 검사 )
- IAC : Interrupt Acknowledge Register
Interrupt Code로 Branch할 때 어디로 가야할 지 값을 저장 ( Interrupt ID Value에 해당 )
Read Only ( HW가 알아서 Set 해준다 )
- EOIR : End Of Interrupt Register
Interrupt의 처리종료를 HW에 알려서 다음 Interrupt 또는 작업을 수행하도록 명령한다.
Write Only ( Read는 HW가 한다 )
- RPR : Running Priority Register
현재 실행중인 코드의 Priority 값을 저장 -> PMR과 비교
- HPPIR : Highest Priority Pending Interrupt Register
다음 수행할 Interrupt를 저장
- BPR : Binary Point Register
Priority를 둘로 나눈다. ( Group Priority + Subpriority )
Priority를 따질 때는 이 중 Group만 따진다.
Preemption : Interrupt를 수행하는 동안 먼저 하는 작업을 대기시킴
[ Priority가 PMR보다 높다 + Group Priority가 수행중인 Priority보다 높다 ] 두 조건 모두 만족
-> preempt 후 Interrupt를 수행한다.
----------
SGI ( Software Generated Interrupt ) 와 SVC ( SuperVisor Call ) 는 엄연히 다르다!!
SGI : CPU가 발생시킴 -> 외부로 전달하여 IO Interrupt로 받아온다.
SVC : CPU가 발생시킴 -> 내부에서 Interrupt로 전달한다.
SGIR : Software Generated Interrupt Register
Target List : 수신자가 나, 남, 모두를 설정하는 Bit
CPU Target : 몇 번 CPU에게 전달할 지 결정하는 Bit
SGI ID : 어떤 Interrupt 인지 Interrupt ID를 전달하는 Bit
----------
Inter Processor Interrupt - IPI ( = 내부 프로세서인 CPU 끼리의 소통에 해당한다 )
SIPI ( = Start IPI )
Booting 되는 시점에서 하나의 CPU가 다른 CPU에 Interrupt를 보내 Setup을 하도록 명령을 보냄
Task Dispatch
Processor에게 OS가 작업을 할당 -> 하나의 CPU가 다른 CPU에게 Interrup를 보냄
TLB ShootDown ( Translation Lookaside Buffer )
Virtual Memory ( CPU의 Virtual address -> TLB -> Physical memory address )
CPU끼리의 TLB Update에 대한 신호를 Interrupt로 전달
System Shutdown
CPU 하나가 다른 CPU에 Interrupt를 통해 Shutdown을 전달
// 이 시리즈의 글들은 고려대학교의 Computer System Design 과목 ( COSE321 ) 을 수강하며 제가 공부한 내용입니다.
// 노트필기를 바탕으로 정리하여 올리고 있으므로, 부정확한 정보가 있을 수도 있습니다.
// 추후에 종강을 하면 워터마크를 삽입한 최종노트 PDF를 첨부할 계획입니다.
'학부생 CS > 컴퓨터 시스템 설계' 카테고리의 다른 글
Computer System Design - 11 : Cache Memory 2 (0) | 2019.06.10 |
---|---|
Computer System Deisgn - 10 : Cache Memory (0) | 2019.05.28 |
Computer System Design - 8 : Interrupt Input (0) | 2019.05.20 |
Computer System Design - 7 : Thumb, Thumb2 (3) | 2019.05.20 |
Computer System Design - 6 : Timer (0) | 2019.05.20 |