본문 바로가기

학업 정리

시스템 버스와 중재, 인터럽트, DMA

시스템 버스는 컴퓨터 시스템의 구성요소(CPU, RAM, I/O 등)를 연결하는 중심 통로이다. 버스는 각종 정보를 전송하는 선으로 구성되어 있고, 이 선의 수에 따라 한 번에 전송되는 데이터의 양이 결정된다. 일반적인 컴퓨터 시스템에서 버스는 버스 클록의 주기에 의해 속도가 결정된다. 예를 들어 버스 클록의 주기가 50ns이고 버스의 폭이 64bit(=8byte)라면, 버스 대역폭은 160MB/s가 된다. 한편, 버스 사용의 주체가 되는 요소를 버스 마스터라고 하며, 다수의 버스 마스터가 동시에 버스를 사용하고자 할 때 이 순서를 제어하는 동작을 버스 중재라고 한다.

 


 

시스템 버스의 기능에 따른 분류

시스템 버스는 기능에 따라 다음과 같이 분류된다.

  • 데이터 버스
    • 시스템 요소 간 데이터를 전송하는데 사용되는 선들의 집합이다.
  • 주소 버스
    • CPU가 기억장치에 접근할 때, 해당 주소를 전송하는데 사용되는 선들의 집합이다. 주소 버스는 CPU로부터 시작하는 단방향 전송만 가능하다. 이때 주소의 단위는 Byte 또는 Word이다.
  • 제어 버스
    • CPU와 장치 간 제어 신호를 전송하는데 사용되는 선들의 집합이다. Momory Read, Memory Write, I/O Read, I/O Write 등의 신호, 버스 중재를 위한 신호, 인터럽트를 위한 신호, 버스 클록 신호, 리셋 신호 등이 전송된다.

 


 

중재 버스

 

버스 중재를 위한 신호의 집합을 중재 버스라고 한다. 중재 버스는 다음과 같이 분류된다.

  • 버스 요구 신호
  • 버스 승인 신호
  • 버스 사용중 신호

버스 중재는 버스 중재기라는 하드웨어에 의해 실행된다. 중재 방식은 다음과 같이 두 가지 기준에 따라 분류된다.

  • 버스 마스터와 버스 중재기 간 연결 구조에 따른 분류
    • 병렬 중재 방식: 각 버스 마스터가 독립적으로 버스 요구/승인 신호를 주고 받는다. 따라서 버스 마스터의 수 만큼 버스 요구/승인 선이 필요하고 회로가 비교적 복잡하다. 각 버스 마스터의 우선순위에 따라 고정-우선순위 방식과 가변-우선순위 방식으로 구분된다.
    • 직렬 중재 방식: 하나의 버스 요구/승인 선이 존재하며 각 신호 선을 버스 마스터들 간에 직렬로 연결(데이지 체인)한다. 회로가 비교적 간단하지만, 결함에 취약하며 기아 문제가 발생할 수 있다.
  • 버스 중재기의 위치 및 개수에 따른 분류
    • 중앙집중식 중재 방식: 시스템 내에 단 하나의 버스 중재기가 존재한다. 모든 버스 신호 선은 이 중재기에 연결된다.
    • 분산식 중재 방식: 시스템 내에 여러 버스 중재기가 존재한다(일반적으로 각 버스 마스터가 버스 중재기를 가지는 구조이다.).

중앙집중식 병렬 중재 방식 (고정-우선순위)

버스 마스터가 버스 중재기와 가까울수록 높은 우선순위를 가진다.

분산식 병렬 중재 방식 (고정-우선순위)

각 버스 중재기는 자신보다 우선순위가 높은 버스 마스터들이 모두 사용 요구를 하지 않을 때 자신의 버스 마스터로 버스 승인 신호를 발생한다. 이는 중앙집중식에 비해 회로가 간단하고 동작 속도가 빠를 수 있지만, 버스 중재기에 오류가 발생하면 해당 버스 중재기를 찾아내기 힘들고, 이 오류가 시스템 전반에 영향을 줄 수 있다.

병렬 중재 방식 (가변-우선순위 방식)

모든 버스 마스터가 비교적 공정하게 버스를 사용할 수 있다. 버스 마스터의 우선순위는 다양한 방식으로 변경될 수 있는데 방식에 따라 회로가 매우 복잡해질 수도 있다.

중앙집중식 직렬 중재 방식

하나 이상의 버스 마스터가 공통 선에 버스 사용을 요구하면, 버스 중재기는 첫 번째로 연결된 버스 마스터로 승인 신호를 전송한다. 만약 해당 버스 마스터가 버스 사용을 요구하지 않았다면 이 신호는 다음 버스 마스터로 전달된다. 버스마스터가 직렬 연결이기 때문에 우선순위는 고정된다.

분산식 직렬 중재 방식

버스 중재기는 순환형으로 연결된다. 버스 중재기가 승인 신호를 전송하면 중앙집중식 직렬 중재 방식처럼 이 신호는 버스 사용을 요구한 버스 마스터까지 전달된다. 또한 이 순환형 연결 방식에서는 각 버스 마스터의 우선순위가 계속 변화한다. 하지만 어느 한 지점에 결함이 발생하면 시스템 전체가 동작을 멈추게 된다.

 


 

폴링(Polling)

버스 중재기는 버스 사용을 원하는 버스 마스터가 있는지 주기적으로 검사(폴링)한다. 폴링은 하드웨어 방식과 소프트웨어 방식으로 분류된다.

하드웨어 폴링

버스 중재기와 각 버스 마스터 간 별도의 폴링 선을 연결한다(이때 이진화된 폴링 주소를 사용하면 폴링 선의 수를 log개로 줄일 수 있다.). 버스 중재기는 이 폴링선을 검사하고, 검사 순서에 따라 버스 마스터의 우선순위가 결정된다.

소프트웨어 폴링

버스 중재기 내의 프로세서가 폴링의 순서와 과정을 관장한다. 하드웨어 방식에 비해 속도가 느리지만 폴링 순서(버스 마스터의 우선순위)의 변경이 쉽다.

 


 

인터럽트 버스

인터럽트를 위한 신호의 집합을 인터럽트 버스라고 한다. 인터럽트 버스는 다음과 같이 분류된다.

  • 인터럽트 요구
  • 인터럽트 확인

인터럽트 기반 I/O

I/O 동작이 진행되는 동안 CPU는 다른 작업을 처리하다가, I/O동작이 끝나면 I/O Controller가 인터럽트를 발생시키는 방식이다. 인터럽트 기반 I/O는 다음과 같은 방법으로 구현할 수 있다.

  • 다중 인터럽트 방식: 각 I/O Controller와 CPU 사이에 별도의 인터럽트 버스를 연결한다. 이 방법은 CPU가 인터럽트 발생 장치를 바로 알아낼 수 있다는 장점이 있지만, 하드웨어가 복잡해지고 I/O 장치의 수만큼 CPU의 핀이 필요하다는 큰 단점이 있다.
  • 데이지 체인 방식:  각 I/O Controller간에 인터럽트 확인 선을 직렬로 연결한다. 하드웨어가 간단해지지만 직렬 연결에 따라 I/O Controller간 우선순위가 고정되므로 기아 문제가 발생할 수 있다.
  • 소프트웨어 폴링 방식: CPU가 모든 I/O Controller와 연결된 TEST I/O 선을 이용해 인터럽트를 요구한 장치를 검사한다. 검사 순서에 따라 우선순위가 결정되므로 우선순위의 변경이 쉽지만, 처리 시간이 길어진다.

참고: I/O 장치는 각 2개씩 주소가 할당된다(데이터 레지스터, 상태/제어 레지스터). 주소의 할당에 따라 Memory-mapped I/O, Isolated I/O로 구분된다.

 


 

DMA: Direct Memory Access

 CPU의 개입 없이 I/O 장치와 기억장치 간 데이터를 전송하는 방식으로, Cycle Stealing이라고도 한다. DMA Controller는 CPU가 기억장치를 액세스하지 않는 시간에 시스템 버스를 이용하여 데이터를 전송한다. CPU는 DMA Controller에게 데이터 접근과 관련된 명령을 전송하고, DMA Controller는 CPU로부터 버스 사용을 승인받아 명령을 수행한다. 수행이 끝나면 인터럽트를 발생한다.

 데이터의 전송 구조가 Memory - Bus - DMA Controller - Bus - I/O Controller 이기 때문에, 시스템 버스를 두 번씩 사용한다는 단점이 있다. 이는 I/O Controller를 DMA Controller에 직접 접속시킴으로써 해결할 수 있다.

 I/O 장치에 따라 전송되는 데이터의 양, 제어 방법, 속도 등이 천차만별이다. 특히 디스크에 대한 쓰기/읽기 동작의 경우,데이터 블록의 크기가 크기 때문에 이를 버퍼링(Buffering)하기 위한 공간이 필요한데, 이는 IOP를 이용하여 해결한다.