Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

학부생 CS/컴퓨터 시스템 설계

Computer System Design - 9 : IO Interrupt

sm_amoled 2019. 5. 21. 17:10

 

가장 단순한 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를 첨부할 계획입니다.

320x100