시스템 버스, I/O 및 인터럽트

1. 시스템 버스

1-1. 시스템 버스의 조직

  • 시스템 버스에 접속되는 모든 요소들은 버스를 통하여 상호간에 정보를 교환하고, 동작 시간을 조정하기 위한 클록 신호 전송
  • 시스템 버스를 구성하는 선들의 수는 한 번에 전송하는 데이터 비트들의 수가 기억장치 비트들의 수 및 제어 신호들의 수에 따라 결정
  • 데이터 버스: 시스템 요소들 사이에 데이터를 전송하는 데 사용되는 선들의 집합
    • CPU가 8비트씩 읽어오면 8개의 선, 32비트씩 읽어오면 32개의 선이 필요
    • 데이터는 CPU-기억장치, CPU-I/O장치 및 기억장치-I/O 장치 사이에 양방향으로 전송되기 때문에, 데이터 버스는 양방향 전송을 지원해야 함
  • 주소 버스: CPU가 기억장치나 I/O 장치에 액세스할 때 주소 비트들을 전송하는 데 사용되는 선들의 집합
    • 주소는 CPU에 의해서만 발생되기 때문에 단방향 전송 기능만 있으면 됨
    • 주소 버스의 폭은 CPU가 주소 지정할 수 있는 전체 기억장치 용량을 결정
  • 제어 버스: 제어 신호들을 전송하기 위한 선들의 집합
    • ex) 기억장치 쓰기/읽기 신호, I/O 쓰기/읽기 신호
  • 버스 마스터: 시스템 버스 사용의 주체가 되는 요소
    • 일반적인 컴퓨터 시스템에서는 CPU와 I/O 제어기 등이 버스 마스터
    • 동기식 버스 시스템에서는 기억장치 모듈도 버스 마스터가 될 수 있음
  • 두개 이상의 마스터들이 동시에 버스를 사용하고자 할 때는 순서대로 사용하도록 버스 중재를 해주어야 함
  • 중재 버스의 종류
    • 버스 요구 신호: 버스 마스터가 버스 사용을 원하고 있음
    • 버스 승인 신호: 버스 사용을 요구한 마스터에게 사용을 허가
    • 버스 사용 중 신호: 현재 어떤 마스터가 버스를 사용하고 있는 중
  • CPU와 I/O 장치 간의 비동기적 동작을 지원하는 인터럽트 메커니즘을 위한 제어 신호
    • 인터럽트 요구 신호
    • 인터럽트 확인 신호
  • 버스 대역폭: 버스를 통하여 단위시간 당 전송할 수 있는 데이터량으로서, 단위는 초당 바이트 수로 나타냄

1-2. 시스템 버스의 기본 동작

  • 버스 상의 모든 동작들은 쓰기 동작과 읽기 동작으로 구분
  • 동기식 버스: 모든 버스 동작들이 발생하는 시간이 공통의 버스 클록을 기준으로 결정되는 버스
    • 인터페이스 회로가 간단하는 장점
    • 버스 클록의 주기가 가장 오래 걸리는 버스 동작의 소요 시간을 기준으로 정해져야 하기 때문에, 클록 주기보다 짧은 시간이 걸리는 버스 동작의 경우 동작이 완료된 후에도 기다려야 한다는 단점
  • 비동기식 버스: 버스 동작들의 발생 시간이 다른 버스 동작의 발생 여부에 따라 결정되는 버스
    • 동기식 버스에서와 같이 낭비되는 시간이 없다는 장점
    • 연속적 동작들을 처리하기 위한 인터페이스 회로가 복잡해지는 단점

2. 버스 중재

  • 버스 경합이 발생한 경우 버스 마스터들 중에서 한 개씩 선택하여 순서대로 버스를 사용할 수 있게 해주는 행위
  • 버스는 Fair하게 배분되어야 하며, 배분으로 인한 Starvation 현상이 없어야 함

2-1. 병렬 중재 방식

각 버스 마스터가 독립적인 버스요구 신호를 버스 중재기로 보내며, 별도의 버스 승인 신호를 받는 방식

1) 중앙집중식 고정-우선순위 방식
  • 각 버스 마스터에 지정된 우선순위가 변하지 않는 고정-우선순위 방식과 우선순위가 계속 변하는 가변-우선순위 방식이 존재
  • 각 버스 마스터는 자신의 버스 요구(BREQ)선을 가지며, 이들은 모두 하나의 버스 중재기로 접속
  • 버스 중재기는 한 개 이상의 버스 요구 신호를 받아서, 그 중 우선순위가 가장 높은 마스터의 버스 승인(BGNT) 신호
  • BBUSY 신호는 어떤 버스 마스터가 버슬르 사용하고 있는 중이라는 것을 의미
  • 각 마스터에 대한 BGNT 신호는 더 높은 우선순위를 가진 마스터가 버스 요구를 발생하지 않은 상태에서 BREQ를 1로 세트했을 때만 활성화 가능

2) 분산식 고정-우선순위 방식
  • 모든 버스 마스터들이 중재기를 한 개씩 가지고 있음
  • 자신보다 더 높은 우선순위를 가진 버스 마스터들의 버스 요구 신호들을 입력으로 받아 검사하고, 그들 중 어느 것도 버스 사용 요구를 하지 않은 경우에만 자신의 버스 승인 신호를 셋
  • 분산식 중재 방식은 중앙집중식에 비하여 중재 회로가 간단하기 때문에 동작 속도가 더 빠르다는 장점
  • 그러나, 고장을 일으킨 중재기를 찾아내기가 힘들며, 한 중재기의 고장이 전체 시스템에 동작에 영향을 줄 수도 있다는 단점 존재

3) 가변 우선순위 방식
  • 버스 중재기가 시스템의 상태 또는 조건에 따라 각 버스 마스터들의 우선순위를 계속 바꾸어 줌
  • 중재 회로는 더 복잡해지지만, 버스 마스터들이 버스를 균등하게 사용할 수 있게 됨
  • 최상위 우선순위를 가진 마스터가 버스를 독점하거나, 최하위 우선순위를 가진 마스터가 오랫동안 버스를 사용하지 못하는 기근 현상의 방지를 위한 방식
  • 가변 우선순위 알고리즘
    • 회전 우선순위
        1. 중재 동작이 끝날 때마다 모든 마스터들의 우선순위가 낮아지고, 가장 우선순위가 낮았던 마스터가 최상위 우선순위를 가지는 방법
        1. 버스 사용 승인을 받은 마스터는 최하위 우선순위를 가지며, 바로 다음에 위치한 마스터가 최상위 우선순위를 가지도록 하는 방법
    • 임의 우선순위: 각 중재 동작이 끝날 때마다 마스터들의 우선순위가 난수 발생기에 의해 임의로 정해지는 방식
    • 동등 우선순위: 모든 마스터들이 동등한 우선순위를 가지는 방식
    • 최소-최근 사용: 최근 가장 오랫동안 버스를 사용하지 않은 버스 마스터에게 최상위 우선순위를 할당하는 방식

2-2. 직렬 중재 방식

버스요구 신호와 버스승인 신호가 하나씩 있으며, 각 신호 선이 모든 버스 마스터들 간에 직렬로 접속되는 방식

1) 중앙집중식 직렬 중재 방식

  • 하나의 중재 신호선에 의해 모든 버스 마스터들이 직렬로 연결되어 데이지 체인형태를 이룸
  • 마스터들의 우선순위는 버스 중재기를 시작점으로 하여 승인 신호 선이 연결된 순서대로 정해짐(중재기에 가까운 것이 높은 우선순위)
  • 어떤 마스터도 버스를 사용하지 않을 때만 버스 중재기가 승인 신호를 발생하도록 설계해야 함
    1. BBUSY 신호가 해제될 때 까지는 버스 마스터들이 요구 신호를 보낼 수 없거나,
    2. 버스 요구 신호는 항상 발생시킬 수 있지만, 승인 신호를 받은 후에도 BBUSY 신호가 해제될 때까지는 버스를 사용할 수 없도록 함

2) 분산식 직렬 중재 방식

  • 데이지-체인 버스 승인 신호(DBGNT) 선이 버스 중재기들을 순환형으로 접속한 형태로 구성
  • 버스 사용권을 부여받은 마스터가 버스 사용을 시작하는 순간에 DBGNT 신호를 세트하여 자신의 바로 우측 마스터의 중재기로 보내줌
  • 신호를 받은 중재기의 마스터가 버스 사용을 신청한 상태였으면 BGNT 신호를 발생시켜 마스터에게 보내며, 버스 요구를 하지 않은 상태라면 다음 중재기로 넘겨줌
  • 각 마스터의 우선순위가 계속 변한다는 특징
    • 즉, 어떤 마스터가 버스 사용 승인을 받으면 그 마스터는 다음 중재 동작에서는 최하위 우선순위를 가지게 되고, 그 마스터의 바로 우측에 위치한 마스터가 최상위 우선순위를 가지게 됨
  • 이 방식은 분산식이지만, 어떤 한 중재기에 결함이 발생하면 DBGNT 신호를 통과시킬 수 없기에 전체 동작이 중단될 수 있음

2-3. 폴링 방식

버스 중재기가 각 마스터들이 버스 사용을 원하는지를 주기적으로 검사하여 버스 승인 여부를 결정

1) 하드웨어 폴링 방식
  • 중재기 내의 고정된 하드웨어를 이용한 주기적 검사를 통해 중재 기능을 수행하는 방식
  • N개의 마스터를 가진 시스템에는 N개의 폴링 선 혹은 2진 코드화된 폴링 주소를 사용할 시 logN개의 폴링 선 필요
  • 각 마스터들의 우선순위는 중재기가 마스터를 검사하는 순서에 의해 결정됨

2) 소프트웨어 폴링 방식
  • 하드웨어 폴링 방식과 동일하게 구성
  • 그러나 중재 동작이 고정된 하드웨어에 의해 이루어지는 것이 아니라 프로세서의 의해 조정되는 방식
    • 하드웨어 방식에 비하여 속도가 더 느리지만, 융통성이 높다는 장점
  • 중재 프로세서는 다음에 폴링할 마스터의 주소를 기억할 수 있고, 필요에 따라 폴링 순서를 변경할 수도 있음
  • 만약 어떤 버스 마스터에 결함이 발생한다면, 그 마스터를 폴링 순서에서 제외하여 시스템 결함 허용도를 높일 수 있음

3. 인터럽트를 이용한 I/O

프로그램을 이용한 I/O 방식은 CPU가 I/O 동작에 계속 관여해야 하기 때문에 CPU 시간의 낭비를 초래

  • 인터럽트 메커니즘을 이용하여 CPU와 I/O 장치간 상호작용을 처리하는 인터럽트-구동 I/O 방식을 통해 해결 가능
    1. CPU가 I/O 제어기에 명령을 보냄. 그 후, CPU는 다른 작업 수행
    2. 제어기는 I/O 명령을 이용하여 I/O 장치를 제어
    3. I/O 장치가 명령 수행을 완료하면, 제어기는 CPU로 인터럽트 신호를 보냄
    4. CPU는 인터럽트 신호를 받는 즉시 원래의 프로그램으로 돌아와서 다음 작업을 계속함

3-1. 다중 인터럽트 방식

  • 각 I/O 제어기와 CPU 상에 별도의 인터럽트 요구 신호선과 인터럽트 확인 신호선이 한 개씩 존재
  • 두 개 이상의 I/O 장치들이 동시에 인터럽트 요구 신호를 보내는 경우, 각 I/O 장치에 대하여 우선순위를 정하고, 더 높은 우선순위를 가진 장치의 인터럽트 요구부터 확인 신호를 보내고 서비스
  • 각 I/O 장치가 별도의 인터럽트 선을 가지고 있기 때문에 CPU가 인터럽트를 요구한 장치를 쉽게 찾아낼 수 있다는 장점

3-2. 데이지-체인 방식

  • 모든 I/O 제어기들은 한 개의 인터럽트 요구 신호 선을 공유
  • 인터럽트 확인 신호는 첫 번째 I/O 제어기로 보내짐
    • 만약 그 제어기가 인터럽트를 요구한 상태라면, 즉시 데이터 버스를 통해 자신의 ID(인터럽트 벡터)를 CPU에 보냄
    • 인터럽트를 요구한 상태가 아니라면, 그 제어기는 확인 신호를 다음 제어기로 통과시킴
  • 간단한 하드웨어 구성이지만, 많은 수의 I/O 장치들이 접속된 시스템에서는 기근 현상 초래할 가능성 있음

3-3. 소프트웨어 폴링 방식

  • 한 개의 TEST I/O 선이 CPU와 모든 제어기들 사이에 연결
  • TEST I/O 신호는 각 제어지 내 인터럽트 플래그의 상태를 확인
  • 데이지-체인 방식과 같은 방식으로 작동하지만 소프트웨어가 그 역할을 수행하는 것이 차이

4. DMA를 이용한 I/O

인터럽트-구동 I/O 방식 역시 기억장치와 I/O 장치간 데이터 이동에 CPU가 직접 개입해야 하며, 이동되는 데이터들이 반드시 CPU를 경유해야 하는 문제 존재

  • DMA(Direct Memory Access)란 CPU의 개입 없이 I/O 장치와 기억장치 사이에 데이터 전송을 수행하는 메커니즘
  • CPU는 DMA 제어기로 다음과 같은 정보들이 포함된 명령어를 보냄
    • I/O 장치의 주소
    • 연산 지정자
    • 데이터가 읽혀지거나 쓰여질 주기억장치 영역의 시작 주소
    • 전송될 데이터 단어들의 개수
  • CPU는 I/O 동작을 DMA 제어기에게 맡기고, 모든 데이터 전송 동작이 완료될 때까지 전혀 개입하지 않음
  • CPU와 DMA는 시스템 버스를 공유: DMA가 시스템 버스를 통해 주기억장치에 접근하기 때문
    • DMA 제어기는 가능한 한 CPU의 정상적 동작을 방해하지 않으며 시스템 버스를 사용
    • 이로 인해 DMA를 사이클 스틸링이라고도 부름
    • 그러나 큰 데이터 블록 전송의 경우 스틸한 사이클만 사용하기에는 턱없이 부족
      • 일반적으로 DMA 제어기가 시스템 버스 사용(BUS REQ)을 요구하면, CPU는 현재 사이클이 끝나는 즉시 사용 허가(BUS GRANT)를 해줌

  • DMA 제어기의 내부 구조
    • I/O 장치의 주소를 저장하는 '주소 레지스터'
    • 데이터 버퍼 역할을 하는 '데이터 레지스터'
    • 전솔될 데이터 수를 저장하는 '카운터 레지스터'
    • 각종 제어 신호들을 발생하거나 받아들이기 위한 '제어 회로'
  • 시스템 버스에 주기억장치, I/O 제어기가 모두 달려있는 경우, 데이터 x 2번만큼 시스템 버스를 사용 -> 비효율
  • DMA 제어기 아래에 I/O 제어기를 두자 !
    • 시스템 버스는 데이터 x 1번 만큼만 사용하면 됨
    • 그러나, 각 DMA 제어기에 직접 접속할 수 있는 I/O 제어기의 수가 제한되어 여러 DMA 제어기들을 두어야 할 수도 있음
  • DMA 제어기를 시스템 버스와 I/O 버스 사이에 위치시키고, I/O버스를 통해 I/O 장치를 제어하자!
    • I/O 장치들은 종류와 속도가 다양하고 제어 방법도 복잡하기 때문에, 간단한 구조를 가진 DMA제어기로 지원하는 데 한계 존재
    • 디스크 쓰기/읽기의 경우 데이터 블록의 크기가 512byte 이상이기 때문에 그 데이터들을 임시 저장하기 위한 내부 기억 장치 필요

  • I/O 장치들의 동작을 제어하며 DMA 동작도 제어하는 프로세서인 I/O 프로세서(IOP)의 사용

    • I/O 제어 프로그램을 수행할 수 있는 프로세서
    • 데이터 블록을 임시 저장할 수 있는 용량의 지역 기억장치
    • 시스템 버스 인터페이스 및 버스 마스터 회로
    • I/O 버스 인터페이스 및 중재 회로로 구성


'Software Convergence > Computer Architecture' 카테고리의 다른 글

폰 노이만 아키텍쳐  (0) 2018.09.09
기억장치  (0) 2018.09.08
CPU의 구조와 기능  (0) 2018.09.08

+ Recent posts