공부 Note/컴퓨터 구조

Chapter 06 입출력 구조 (3)

AmyG 2022. 2. 24. 10:52
반응형

입출력 수행과 인터럽트

   * 인터럽트에 의한 I/O

   * 우선순위 인터럽트

 

인터럽트에 의한 I/O

   * 입출력 장치와 CPU간 전송 모드 측면

      - 입출력 전송(I/O transfer)구조 상 CPU의 interrupt 활용 모드

   * 입출력 장치와 CPU간 전송에 대한 소프트웨어적 고찰

      - 컴퓨터는 주변 장치와의 인터페이스를 위한 H/W 못지않게 S/W루틴을 가져야 한다

         > 주변 장치 제어

         > 프로세서와 주변 장치 사이에 데이터 전송

      - I/O routine은 주변장치의 활성화를 위한 제어 커맨드의 발송 및 데이터 전송을 위한 준비 상태(device status)체크 로직을 보유해야 한다

      - 입출력 소프트웨어는 시스템에 인터럽트제어를 발할 수 있어야 하며, 이를 실행 할 주변 장치에 커맨드를 발하여야 한다

      - DMA(Direct Memory Access)전송 시 I/O 소프트웨어는 DMA채널을 개시 시킬 수 있어야 한다

 

우선 순위 인터럽트

   * 입출력 장치와 CPU간 interrupt 논리

      - CPU와 I/O 장치 사이의 데이터 전송은 CPU에 의해 시작된다.

         > 각 장치는 통신 준비 여부(제어라인의 상태 or 플랙(flag)에 의해서만 확인 가능하다)에 따라 CPU와 통신이 가능하다

         > 시스템 전체의 퍼포먼스를 위해 각 디바이스 인터페이스는 플래그가 인 에이블(enable)되었을 때 비로소 CPU에 인터럽트를 요천한다

      - 프로세서가 서비스 루틴으로 분기 주소를 선택하는 방법

         > vectored interrupt : 인터럽트를 내는 소스가 프로세서에서 분기에 대한 정보를 제공(인터럽트 벡터, interrupt vector)한다

         > Non-vectored interrupt : 분기 주소는 메모리의 고정 위치에 저장 되어 있다

      - 수 많은 장치 중 인터럽트를 발생한 장치의 선별, 또한 동시에 발생한 다수개의 인터럽트의 경우 서비스의 우선 순위를 결정해야 하는 문제 발생

      - 우선 순위 인터럽트는 동시 다발적으로 발생한 인터럽트에 대한 서비스 순서를 결정하기 위해 각 소스에 우선 순위를 부여한 인터럽트 시스템을 이르는 용어이다

         > 우선 순위 결정은 소프트웨어/하드웨어적으로 처리한다

         > 소프트웨어 적으로 인터럽트 우선 순위를 결정하는 방법 -> 폴링(polling)

         > 모든 인터럽트를 위한 공통의 서비스 프로그램 -> 소요시간이 매우 길 수 있다 -> H/W적으로 해결

  

   * 데이터 체인 우선순위 인터럽트 

      - 인터럽트를 발생하는 모든 장치를 직렬로 연결 함으로써 이루어진다

   * 병렬 우선 순위 인터럽트

      - 각 장치의 인터럽트 요청에 따라 각 비트가 개별적으로 세트 될 수 있는 레지스터를 사용한다

      - 우선순위 : 자기디스크, 라인 프린터, 카드 리더, 키보드 순(위치 순)

      - 마스크 레지스터 - 인터럽트 요청 상태를 조정 할 수 있는 장치

 

   * 우선순위 인코더 & 인터럽트 사이클

      - 병렬 우선 순위 인터럽트의 논리 흐름

         ① 우선 순위 인코더는 벡터 주소(VAD)의 두 비트(x, y) -> CPU

         ② 마스크 되지 않은 인터럽트 발생 시 (IST)를 세트 시킨다

         ③ 인터럽트 제어 프로그램에 의해 Value (IEN) 결정

         ④ IST and IEN -> interrupt to CPU

         ⑤ INTACK from CPU and IST -> Enable (bus buffer)

      - 인터럽트 사이클 (IEN 상태 값)

         > IEN <- 0 : 인터럽트 기능 사용 중지 (프로세서가 인터럽트 인지)

         > 각 수행 사이클이 종료된 뒤

            if CPU <- IEN('1') & IST('1'),

            then do interrupt,

            else fo fetch

 

출처 : 제로베이스

반응형