시스템 버스 : 컴퓨터 시스템의 구성 요소들을 상호 연결해주는 중심 통로
버스 : 구성 요소들간에 교환할 각종 정보들을 전송하는 선들로 구성
시스템 버스를 구성하는 선들의 수
• 한 번에 전송하는 데이터 비트들의 수, 기억장치 주소 비트들의 수 및 제어 신호들의 수에 따라 결정됨
• 소형 컴퓨터 : 50 ∼ 100 개의 신호선들 사용
• 중대형급 시스템 : 100 개 이상의 신호선들 사용
기능에 따른 버스의 종류
• 데이터 버스
• 주소 버스
• 제어 버스
데이터 버스
• 시스템 요소들 사이에 데이터를 전송하는 데 사용되는 선들의 집합
• 양방향 전송
• 버스 폭 = CPU와 기억장치 사이에 한 번에 전송되는 비트 수
주소 버스
• CPU가 기억장치로 데이터 쓰기 동작을 할 때, 해당 기억장소를 지정하는 주소를 전송하기 위한 선들의 집합
• 단방향 전송: CPU -> 기억장치 및 I/O 제어기
• 주소 버스의 비트 수에 의해 시스템에 접속될 수 있는 전체 기억장치 용량이 결정됨
• 직접 주소지정 할 수 있는 기억장소의 단위 : 바이트 혹은 단어
제어 버스
• CPU와 기억장치 및 I/O 장치 사이에 제어 신호들을 전송하는 선들의 집합
CPU가 기억장치 및 I/O 장치와 데이터를 교환하는 데 필요한 제어 신호
• 기억장치 쓰기 신호 : 지정된 기억 장소에 데이터가 쓰여지게 함
• 기억장치 읽기 신호 : 지정된 기억 장소의 데이터를 읽어서 버스에 실리게 함
• I/O 쓰기 신호 : 지정된 I/O 장치로 데이터가 출력되게 함
• I/O 읽기 신호 : 지정된 I/O 장치로부터 데이터를 읽어서 데이터 버스에 실리게 함
버스 마스터 : 시스템 버스 사용의 주체가 되는 요소
버스 중재 : 두 개 이상의 버스 마스터들이 동시에 버스 사용을 요청할 경우에 순서를 결정해주는 시스템 동작
• 버스 요구 신호 : 버스 마스터가 버스 사용을 원하고 있다는 것을 나타냄
• 버스 승인 신호 : 버스 사용을 요구한 마스터에게 사용을 허가한다는 것을 나타냄
• 버스 사용중 신호 : 현재 어떤 마스터가 버스를 사용하고 있는 중이라는 것을 나타냄
중재 버스 : 버스 중재 동작에 필요한 신호 선들의 집합
CPU와 I/O 장치 간의 비동기적 동작을 지원하는 인터럽트 메커니즘을 위한 제어 신호
• 인터럽트 요구 신호 : 어떤 I/O 장치가 인터럽트를 요구하고 있다는 것을 나타냄
• 인터럽트 확인 신호 : CPU가 인터럽트 요구를 인식했다는 것을 나타냄
인터럽트 버스 : 인터럽트 메커니즘을 지원하는 신호 선들의 집합
• 버스 클록 : 동기식 버스에서 버스 동작들의 시작 시간을 일치시키기 위하여 제공되는 공통 클록 신호
• 리셋 : 모든 시스템 요소들의 동작을 초기화시키는 신호
버스 대역폭 : 버스를 통하여 단위시간당 전송할 수 있는 데이터량으로서, 단위는 초당 바이트 수를 나타냄
쓰기 동작 순서
① 버스 마스터가 버스 사용권을 획득
② 버스를 통하여 주소와 데이터 및 쓰기 신호를 보냄
읽기 동작 순서
① 버스 마스터가 버스 사용권을 획득
② 주소와 읽기 신호를 보내고, 데이터가 전송되어 올 때까지 기다림
동기식 버스 : 공통의 버스 클록을 기준으로 버스 동작들이 발생되는 버스
버스 클록의 첫 번째 주기 동안에 CPU가 주소와 읽기 제어 신호를 기억장치로 보냄. 이때 버스 동작의 시작을 알리는 신호가 함께 보내지기도 함. 두 번째 주기 동안에 기억장치에서 데이터 인출 동작이 일어나며, 세 번째 주기에서 기억장치가 인출된 데이터를 버스를 통하여 CPU로 전송함. 이와 함께 기억장치는 전송 확인 신호를 보내며, 이 신호를 받은 CPU는 자신이 요청한 데이터가 버스에 실려있다는 것을 알고 받아들이게 됨. 여기서는 기억장치에서 데이터가 인출되는 데 걸리는 시간이 버스 클록의 주기와 같은 것으로 가정함. 만약 기억장치 액세스 시간이 클록의 한 주기보다 더 길 경우에는 그만큼 더 많은 주기가 경과한 후에 기억장치가 데이터와 확인 신호를 보내게 되며, CPU는 그 동안 기다려야 함.
장점 : 인터페이스 회로가 간단함
단점 : 버스 클록의 주기가 가장 오래 걸리는 버스 동작의 소요시간을 기준으로 정해져야 하기 때문에, 클록 주기보다 더 짧은 시간이 걸리는 버스 동작의 경우에는 동작이 완료된 후에도 다음 주기가 시작될 때까지 기다려야 함
비동기식 버스 : 버스 클록을 사용하지 않으며, 버스 동작들의 발생 시간이 다른 관련 동작의 발생에 따라 결정되는 버스
CPU는 버스 상에 주소와 읽기 신호를 싣고, 신호가 안정될 때까지 잠시 기다린 후에, 주소와 제어 신호가 보내졌음을 알리기 위하여 마스터 동기 신호를 보냄. 그러면 기억장치는 주소를 받아서 데이터를 인출한 다음에, 데이터를 버스에 싣고 슬레이브 동기 신호를 보냄으로써 응답하게 됨. CPU는 SSYN 신호를 받은 즉시 데이터를 버스로부터 받아들이고, 주소와 읽기 신호 및 MSYN 신호를 제거함. MSYN 신호가 제거되는 것은 CPU가 데이터를 받아들였다는 것을 나타내므로, 기억장치도 SSYN 신호를 제거함으로써 읽기 동작이 완료됨.
장점 : 각 버스 동작이 완료되는 즉시, 연관된 다음 동작이 발생되므로 동기식 버스에서와 같이 낭비되는 시간이 없음
단점 : 이러한 연속적 동작들을 처리하기 위한 인터페이스 회로가 복잡해짐
일반적으로 소규모 컴퓨터시스템에서 사용, 중형급 이상의 시스템에서는 하드웨어가 더 간단한 동기식 버스를 사용
버스 경합 : 두 개 이상의 버스 마스터들이 동시에 버스 사용을 위해 경쟁하는 상황
버스 중재 : 버스 경합이 발생한 경우에 버스 마스터들 중에서 한 개씩 선택하여 순서대로 버스를 사용할 수 있게 해주는 동작
버스 중재기 : 버스 중재 기능을 수행하는 하드웨어 모듈
버스 중재 방식 종류
• 병렬 중재 방식 : 각 버스 마스터가 독립적인 버스요구 신호를 버스 중재기로 보내며, 별도의 버스 승인 신호를 받는 방식
• 직렬 중재 방식 : 버스요구 신호와 버스승인 신호가 하나씩 있으며, 각 신호 선이 모든 버스 마스터들 간에 직렬로 접속되는 방식
버스 중재기의 위치에 따른 분류
• 중앙집중식 중재 방식 : 한 개의 버스 중재기가 모든 버스 중재 기능을 수행하는 방식
• 분산식 중재 방식 : 버스 중재 동작이 각 버스 마스터가 별도로 가지고 있는 버스 중재기들에 의해 이루어지는 방식
1) 중앙집중식 고정-우선순위 방식
고정-우선순위 방식 : 각 버스 마스터에 지정된 우선순위가 고정되어 있는 방식
가변-우선순위 방식 : 우선순위를 변경할 수 있는 방식
그림은 버스 마스터가 네 개인 경우에 중앙집중식 고정-우선순위 중재 방식의 회로 구성도를 보여주고 있음. 이 구성에서 중재기에 가까이 위치한 순서대로 우선순위가 정해졌다고 가정한다면, 버스 마스터 1이 가장 높은 우선순위를 가지며, 버스 마스터4가 가장 낮은 우선순위를 가지게 됨.
이 방식에서는 각 버스 마스터가 자신의 버스 요구(BREQ) 선을 가지고 있으며, 이들은 모두 하나의 버스 중재기로 접속됨. 버스 중재기는 한 개 또는 그 이상의 버스 요구 신호를 받아서, 그 중에서 우선순위가 가장 높은 마스터의 버스 승인(BGNT) 신호만 세트함. BBUSY 신호는 어떤 버스 마스터가 버스를 사용하고 있는 중이라는 것을 가리킴. 따라서 버스 승인을 받은 마스터는 그 신호가 세트되어 있는 동안에는 기다렸다가, 해제되는 순간부터 버스 사용을 시작하게 됨. 또한, 그 마스터는 버스 사용을 시작하는 순간에 BBUSY 신호를 세트함으로써, 다른 마스터가 버스를 사용하지 못하도록 막아야 함.
버스 요구 신호 : 버스 마스터가 버스 사용을 요청하는 신호
버스 승인 신호 : 버스 마스터에게 버스 사용을 허가하는 신호
그림의 시간 흐름도는 버스가 사용되고 있는 중의 어느 한 순간에 대한 제어 신호들의 관계를 보여주고 있음. 예를 들어, 버스 마스터1이 현재 버스를 사용하고 있는 중일 때 버스 마스터 3이 버스 사용을 요구한 경우의 중재 과정을 보면 다음과 같음.
① 마스터 3이 BREQ3 신호를 세트
② 버스 중재기가 ‘마스터 3’에게 BGNT3 신호를 세트 함으로써 버스 사용을 허가
③ ‘마스터 1’이 버스 사용을 끝내고 BBUSY 신호를 해제
④ ‘마스터 3’이 BBUSY 신호를 다시 세트하고, 버스 사용을 시작 (이때 BREQ3와 BGNT3는 제거)
이 예에서 만약 버스 마스터 3이 버스 요구를 보내기 전에 우선순위가 더 낮은 버스 마스터 4가 버스를 사용하고 있었더라도, 마스터 4에 의한 버스의 사용은 도중에 중단되지 않고 계속됨. 또한 이 예에서 버스 마스터 2와 3이 동시에 버스 요구를 보냈다면, 우선순위가 더 높은 버스 마스터 2가 선택되어 BGNT2가 세트됨. 그림에서 ①과 ② 사이의 시간 간격은 버스 중재기의 내부 회로에서의 지연 시간을 나타냄
각 마스터에 대한 BGNT 신호는 더 높은 우선순위를 가진 마스터가 버스 요구를 발생하지 않은 상태에서 BREQ를 1로 세트했을 때만 활성화될 수 있음.
2) 분산식 고정-우선순위 방식
모든 버스 마스터들이 중재기를 한 개씩 가지고 있음. 각 버스의 마스터의 중재기는 자신보다 더 높은 우선순위를 가진 버스 마스터들의 버스 요구 신호들을 입력으로 받아서 검사하고, 그들 중의 어느 것도 버스 사용 요구를 하지 않은 경우에만 자신의 버스 승인 신호를 세트함.
그림은 네 개의 버스 마스터들이 있는 시스템에서 이 방식을 위한 구성도와 버스 중재기들의 내부 회로를 보여주고 있음.
이 구성에서는 버스 마스터 1이 가장 높은 우선순위를 가지며, 마스터 4가 가장 낮은 우선순위를 가짐. 그림의 중재기 내부 회로에서 보는 바와 같이, 각 마스터의 버스 요구 신호는 그보다 우선순위가 더 낮은 다른 마스터들의 중재기로만 입력됨. 따라서 더 높은 우선순위를 가진 마스터가 버스 요구를 한 경우에는 하위 마스터들은 버스 사용 승인을 받을 수가 없게 됨. 예를 들어, 마스터 1의 중재기는 자신의 버스 요구 신호만 입력으로 받기 때문에 자신이 원할 때는 언제나 버스 사용 승인을 받을 수 있음. 그런 마스터 4의 중재기는 다른 모든 버스 요구 신호들을 입력으로 받기 때문에, 다른 마스터들이 버스 요구를 발생하지 않은 경우에만 버스 사용 승인을 받을 수 있음. 승인을 받은 버스 마스터는 BBUSY 신호를 검사하여서, 비활성화 상태이면 즉시 버스 사용을 시작함.
장점 : 중앙집중식에 비하여 중재 회로가 간단하므로 동작 속도가 빨라짐
단점 : 고장을 일으킨 중재기를 찾아내는 방법이 복잡하고, 한 중재기 의 고장이 전체 시스템의 동작에 영향을 미칠 수가 있음
3) 가변 우선순위 방식
버스 사용 우선순위를 계속 변경시키는 중재 방식으로서, 버스 사용 기회의 불균등이나 기근 현상을 방지해주지만 회로 구현이 더 어려움
• 회전 우선순위
• 임의 우선순위
• 동등 우선순위
• 최소-최근 사용
회전 우선순위 방식
■ 중재 동작이 끝날 때마다 모든 마스터들의 우선순위가 한 단계씩 낮아지고, 가장 우선순위가 낮았던 마스터가 최상위 우선순위를 가지도록 하는 방법
■ 일단 버스 사용 승인을 받은 마스터는 최하위 우선순위를 가지며, 바로 다음에 위치한 마스터가 최상위 우선순위를 가지도록 하는 방법
-> Acceptance-dependent식 회전 우선순위 방식
Acceptance-dependent식 회전 우선순위 방식의 예
그림은 이 방식을 실제 구현한 사례를 보여주고 있음. 여기서는 어떤 마스터가 버스 중재기에 의하여 버스 승인을 받게 되면, 포인터는 그 마스터의 번호를 가리키게 되며, 그 다음 번호를 가진 마스터에게 다음 중재 사이클에서 최상위 우선순위가 주어짐. 예를 들어, 그림 (a)에서 마스터 3이 버스 승인을 받은 후에는 마스터 4의 우선순위가 가장 높아지고, 마스터 5가 그 다음이 되며, ..., 마스터 3은 최하위 우선순위를 가지게 된다는 것을 보여주고 있음. 그림 (b)에서는 마스터 6이 버스 승인을 받은 후에 우선순위가 같은 방법으로 바뀐 모습을 보여주고 있음.
동등 우선순위 방식 : 모든 마스터들이 동등한 우선순위를 가지며, FIFO(First-In First-Out) 알고리즘 사용
임의 우선순위 방식 : 각 중재 동작이 끝날 때마다 우선순 위를 임의로 결정
최소-최근 사용(Least-Recently Used: LRU) 방식 : 최근 가장 오랫동안 버스를 사용하지 않은 버스 마스터에게 최 상위 우선순위 할당
1) 중앙집중식 직렬 중재 방식
직렬 중재 방식의 주요 특징은 그림에서 보는 바와 같이 하나의 중재 신호선에 의해 모든 버스 마스터들이 직렬로 연결되어 데이지 체인 형태를 이룬다는 것임. 그리고 마스터들의 우선순위는 버스 중재기를 시작점으로 하여 승인 신호 선이 연결된 순서대로 정해짐. 결과적으로, 버스 중재기에 가장 가까이 위치한 마스터가 가장 높은 우선순위를 가지며, 멀어질수록 우선 순위는 더 낮아짐.
버스 마스터들로부터 발생되는 모든 버스 요구들은 그림과 같이 하나의 공통 신호 선을 통하여 버스 중재기로 들어옴. 또한 하나의 공통 신호 선을 사용하여 구현되는 BBUSY 신호는 어떤 마스터가 버스를 사용하고 있을 때는 세트되고, 그렇지 않은 경우에는 리셋 됨. 이 방식도 한 개의 버스 중재기가 모든 중재 기능을 통제하므로 중앙집중식으로 분류됨.
버스 중재기의 내부 회로는 여러 가지 기능들이 추가된 중재 회로로 구성되지만, 여기서는 그림에서와 같이 BREQ 신호 선을 직접 BGNT 신호 선으로 연결한 간단한 구조를 살펴보면, 한 개 또는 그 이상의 버스 마스터가 버스 사용을 요구하면, 버스 중재기는 데이지 체인의 첫 번째에 접속된 마스터로 승인 신호를 보냄. 버스 중재기에 가장 가까이 위치한 첫 번째 마스터는 가장 먼저 버스 승인 신호를 받기 때문에, 버스 사용에 있어서 최상위 우선순위를 가지게 됨. 만약 그 마스터가 버스 요구를 발생하지 않은 상태에서 승인 신호를 받았다면, 승인 신호를 그 다음에 연결된 마스터로 넘겨줌. 이와 같이 승인 신호는 버스를 요구한 마스터에게 도달할 때까지 계속 통과하게 되며, 버스 요구를 보낸 마스터들 중에서 중재기에 가장 가까이 위치한 마스터에게 승인 신호가 전달되면, 그 마스터가 버스 사용권을 가지게 됨.
이 방식에도 이미 버스를 사용하고 있는 마스터가 버스 사용을 끝낼 때까지는 새로이 버스 승인 신호를 받은 마스터가 버스 사용을 시작하지 않도록 해야함. 이를 보장하기 위해서는 어떤 마스터도 버스를 사용하지 않을 때만 버스 중재기가 승인 신호를 발생하도록 설계되어야 함. 만약 버스 중재기에 그러한 기능이 없다면, 각 마스터의 버스 인터페이스 회로가 다음과 같은 두 가지 중의 어느 한 기능을 가져야 함.
■ BBUSY 신호가 해제될 때까지는 버스 마스터들이 요구 신호를 보내지 않도록 함
■ 버스 요구 신호는 항상 발생시킬 수 있지만, 승인 신호를 받은 후에도 BBUSY 신호가 해제될 때까지는 버스를 사용할 수 없도록 함
위의 첫 번째 경우에는 버스 마스터가 승인 신호를 받는 즉시 버스 사용을 시작할 수 있음. 그러나 두 번째 경우에는 승인 신호를 받은 후에도 먼저 버스를 사용하고 있던 다른 마스터가 사용을 완료할 때까지는 기다려야 함.
2) 분산식 직렬 중재 방식
각 버스 마스터가 자신의 중재기를 가진 분산식 직렬 중재 방식은 그림과 같이 데이지-체인 버스 승인 신호 선이 버스 중재기들을 순환형으로 접속한 형태로 구성됨. 이 방식에서는 버스 사용권을 부여받은 마스터가 버스 사용을 시작하는 순간에 DBGNT 신호를 세트하여 자신의 바로 우측에 연결된 마스터의 중재기로 보내줌. 만약 그 신호를 받은 중재기의 마스터가 버스 사용을 신청하고 기다리던 중이었다면, 그 중재기는 즉시 자신의 BGNT 신호를 발생시켜 마스터로 보냄. 그러나 만약 DBGNT 신호를 받은 중재기의 마스터가 버스 요구를 하지 않은 상태라면, 그 신호를 우측에 접속된 다음 중재기로 넘겨주는데, 그러한 과정은 버스를 요구한 마스터에 도달할 때까지 계속됨.
이 방식의 특징은 각 마스터의 우선순위가 계속 변한다는 것임. 즉, 어떤 마스터가 버스 사용 승인을 받으면 그 마스터는 다음 중재 동작에서는 최하위 우선 순위를 가지게 되고, 그 마스터의 바로 우측에 위치한 마스터가 최상위 우선순위를 가지게 됨. 그 다음부터는 순환형 구조에서 DBGNT 신호가 연결된 순서대로 우선순위가 하나씩 낮아짐. 따라서 여러 개의 마스터들이 동시에 버스 사용을 신청한 경우에는 현재 버스를 사용하고 있는 마스터로부터 우측으로 가장 가까이 위치한 마스터가 버스 승인 신호를 받게 되고, 다른 마스터들은 기다려야 함.
여기서 유의할 사항은 버스 승인 신호를 받은 마스터는 먼저 버스를 사용하고 있던 마스터가 버스 사용을 끝내고 BBUSY 신호를 리셋 시킬 때까지 기다렸다가 버스를 사용해야 한다는 것임. 이 방식은 분산식이지만, 어느 한 지점에만 결함이 발생해도 전체 시스템이 영향을 받음. 그 이유는 어떤 중재기에 결함이 발생하면 DBGNT 신호가 통과하지 못하여 전체 동작이 중단되기 때문임.
폴링 방식에서는 버스 중재기가 각 마스터들이 버스 사용을 원하는 마스터가 있는지를 주기적으로 검사하여 사용 승인 여부를 결정
1) 하드웨어 폴링 방식
버스 중재기와 각 버스 마스터 간에 별도의 폴링 선이 존재
2진 코드화된 폴링 주소를 이용 하면, 폴링 선의 수가 log2N 개로 감소
공통의 BREQ 선과 BBUSY 선이 각각 한 개씩 존재
① 중재기는 폴링 주소를 발생하여 검사할 마스터를 지정한 다음에, 그 마스터가 버스 사용을 원하는지 물음
② 지정된 마스터가 버스 사용을 원하면 BREQ 신호를 세트
③ BREQ 신호가 세트되면, 중재기는 현재 검사 중인 마스터에게 버스 사용을 허가하고, 그렇지 않으면(지정된 마스터가 버스 사용을 원하지 않으면) 다음 마스터들에 대한 검사를 순서대로 진행
이 방식에서 각 마스터들의 우선순위는 중재기가 마스터를 검사하는 순서에 의하여 결정됨. 즉, 중재기가 가장 먼저 검사하는 마스터가 최상위 우선순위를 가지며, 그 다음부터 순서대로 더 낮은 우선순위를 가지게 됨. 이 순서는 마스터의 번호에 따라 정해질 수도 있고, 가변 우선순위 알고리즘이 적용될 수도 있음. 검사할 마스터의 번호를 지정하는 메커니즘은 2진 카운터를 이용하여 쉽게 구현할 수 있음. 즉, 2진 카운터의 출력을 폴링 주소로 사용하여 차례대로 마스터를 지정하면서 검사하는 것임.
일단 어떤 마스터가 버스 사용을 시작하면 BBUSY 신호가 세트되고, 그에 따라 2진 카운터의 동작도 중단됨. 일정 시간 후에 그 마스터가 버스 사용을 완료하고 BBUSY 신호를 해제하면, 중재기는 다시 중재 동작을 시작함. 이때 2진 카운터가 지난 번 중단된 순간의 다음 값부터 출력하도록 구현하면 회전 우선순위 방식이 되며, 첫 번째 마스터의 번호부터 다시 시작하도록 구현하면 고정 우선순위 방식이 됨.
2) 소프트웨어 폴링 방식
중재기 내의 프로세서가 중재 프로그램을 수행하면서 다양한 중재 기능을 수행하는 방식
장점 : 우선순위의 변경이 용이
단점 : 프로그램을 실행해야 하므로 하드웨어 방식에 비하여 속도가 더 느림
I/O 장치가 시스템 버스에 직접 접속되지 못하는 이유
■ I/O 장치들은 종류에 따라 제어 방법이 서로 다르며, 그러한 제어 회로들을 CPU 내부에 모두 포함시키는 것이 불가능하기 때문에 CPU가 그들을 직접 제어할 수가 없음
■ I/O 장치들의 데이터 전송 속도가 CPU의 데이터 처리 속도에 비하여 훨씬 더 느리고 속도가 서로 다르기 때문에, 고속의 시스템 버스와 I/O 장치들 사이에 직접 데이터를 교환하는 것은 불가능
■ I/O 장치들과 CPU가 사용하는 데이터 형식의 길이가 서로 다른 경우가 많음
-> 인터페이스 장치인 I/O 제어기 사용
I/O 제어기 : CPU와 I/O 장치(들) 간의 인터페이스 역할을 수행해주는 하드웨어 모듈
I/O 제어기의 주요 기능
■ I/O 장치의 제어와 타이밍 조정
■ CPU와의 통신 담당
■ I/O 장치와의 통신 담당
■ 데이터 버퍼링(data buffering) 기능 수행
■ 오류 검출
CPU가 프린터로 데이터를 출력하는 동작 순서
① CPU가 프린터 제어기에게 프린터의 상태를 검사하도록 요청
② 제어기는 프린터의 상태를 검사하여 준비되었는지를 가리키는 비트를 세트
③ CPU는 RDY 비트를 검사하고, 프린터가 다음 프린트를 시작할 준비가 된 상태라면 제어기로 출력 명령과 데이터를 전송
④ 제어기는 프린트 동작을 제어하기 위한 신호들과 데이터를 프린터로 전송
이러한 동작을 수행하기 위한 제어기의 내부 구조를 간략히 살펴보면 그림과 같음. 상태/제어 레지스터는 내부적으로 두 개의 레지스터들로 구성되지만 주소는 하나만 지정됨. 상태 레지스터는 프린터의 상태와 오류 검사 결과 등을 나타내는 비트들로 구성되어 있어서, CPU가 프린터의 상태를 검사할 때는 그 주소를 이용하여 상태 레지스터의 내용을 읽게 됨. CPU가 제어기에게 출력 명령을 보낼 때는 제어 레지스터에 해당 명령 단어를 쓰면 됨.
프린터의 상태는 그림의 프린터 제어 회로를 통하여 프린터로부터 들어오는 상태 신호에 따라 상태 레지스터의 특정 비트 값으로 표시됨. 예를 들어, 만약 프린터가 다음 데이터를 받아서 출력할 준비가 된 상태라면 RDY 비트가 '1'로 세트되고, 아직 이전에 받은 데이터를 프린트하는 중이라면 그 비트가 '0'으로 세트됨. 따라서 위의 순서에서 ①번과 ②번은 CPU가 상태 레지스터의 내용을 읽어서 RDY 비트의 값을 검사함으로써 동시에 수행될 수 있음.
앞의 순서에서 ③번 동작은 프린터가 준비된 상태인 경우에 CPU가 프린트할 데이터를 데이터 레지스터에 쓰고, 프린트 동작을 지시하는 비트를 '1'로 세트한 명령 단어를 제어 레지스터에 쓰는 것으로서 수행됨. CPU가 상태 레지스터로부터는 읽기만 하고, 제어 레지스터로는
쓰기만 하기 때문에, 두 레지스터들에게 주소를 한 개만 지정해도 되는 것임. 그러나 데이터 레지스터에는 별도의 주소가 지정되어야 함. 최근에는 프린터될 데이터가 블록 단위로 프린터 제어기로 이동되는데, 이 경우에는 레지스터 대신에 데이터 버퍼 기능을 수행하는 RAM이 설치되며, 그 용량만틈의 주소 영역이 할당되어야 함. 프린트 동작의 마지막 단계로서, 프린터 제어기가 데이터를 프린터로 보내고 동시에 제어 신호도 발생함으로써 프린터 명령의 수행을 완료함.
데이터 버퍼 : I/O 장치로 보내질 데이터를 일시적으로 저장해두는 반도체 기억장치
그런데 프린터는 CPU에 비하여 속도가 매우 느린 장치이기 때문에, 위의 순서에서 CPU가 프린터의 상태를 검사하는 ①번과 ②번 과정은 여러 번 반복되어야 할 것임. 따라서 위의 순서는 아래의 그림과 같은 흐름도로 표현할 수 있음.
이와 같이 CPU가 반복적으로 I/O 장치의 상태를 검사하면서 I/O 동작을 처리하는 방식을 '프로그램을 이용한 I/O'혹은 '프로그램된 I/O'라고 부름. 이 방식은 간단하며 별도의 하드웨어가 필요하지 않은 장점이 있지만, CPU가 I/O 동작에 전적으로 개입해야 하기 때문에 그 동안에 다른 일을 하지 못한다는 단점을 가지고 있음.
1) 기억장치-사상 I/O
기억장치-사상 I/O 방식에서는 I/O 제어기 내의 레지스터들을 기억장치 내의 기억 장소들과 동일하게 취급하고, 레지스터들의 주소도 기억장치 주소 영역의 일부분을 할당함. 따라서 기억장치와 I/O 레지스터들을 액세스할 때 동일한 기계 명령어들을 사용할 수 있음. 또한 CPU로부터 발생되는 기억장치 읽기 신호와 쓰기 신호를 이용하여 I/O 장치에 대한 읽기와 쓰기도 수행할 수 있음.
그런데 이 방식에서는 I/O 레지스터들에 대한 주소로서 기억장치 주소 공간의 일부를 할당하기 때문에 기억장치를 위한 주소 공간이 그만큼 감소하게 됨. 예를 들어, 주소 비트들이 10비트인 시스템에서 주소지정이 가능한 전체 기억 장소들의 수는 1024개임. 그러나 기억장치-사상 I/O 방식이 사용되면 그 수가 절반으로 줄어듬.
즉, 그림에서 보는 바와 같이, 0번지부터 511번지까지의 상위 512개 주소들은 기억장치에 할당되고, 512번지부터 1023번지까지의 하위 512개의 주소들은 I/O 장치들에 할당됨. 이와 같이 기억장치 주소 공간이 절반으로 줄어드는 것이 기억장치-사상 I/O 방식의 주요 단점임.
2) 분리형 I/O
분리형 I/O 방식에서는 I/O 장치들의 주소 공간이 기억장치 주소 공간과는 별도로 할당된다는 점이 기억장치-사상 I/O와의 차이점임. 이 방식을 사용하는 시스템에서는 I/O 레지스터들을 액세스할 때는 반드시 별도의 명령어들, 즉 I/O 전용 명령어들을 사용해야 함. 그리고 이러한 I/O 명령어들이 수행될 때는 액세스 동작이 기억장치에 대한 것인지 I/O 장치에 대한 것인지를 구분할 수 있도록 I/O 읽기와 I/O 쓰기 신호가 CPU로부터 발생되어야 함. I/O 제어를 위해 I/O 명령어들만 이용할 수 있으므로, 프로그래밍이 불편함.
그러나 이 방식을 사용하는 경우에는 I/O 주소 공간이 기억장치 주소 공간과는 별도로 지정될 수 있는 장점이 있음. 예를 들어 주소 비트의 수가 10개라면, 아래의 그림과 같이 기억장치 주소와 I/O 주소가 각각 1024개씩 할당될 수 있음.
인터럽트-구동 I/O : 인터럽트 메커니즘을 이용하여 CPU와 I/O 장치간의 상호작용이 처리되는 방식
동작 순서
① CPU가 I/O 제어기에게 명령을 전송하고, CPU는 다른 작업 수행
② 제어기는 I/O 장치를 제어하여 I/O 명령을 수행
③ I/O 명령 수행이 완료되면, 제어기는 CPU로 인터럽트 신호를 전송
④ CPU는 인터럽트 신호를 받는 즉시 원래의 프로그램으로 돌아와서 다음 작업을 계속
CPU가 프린터로 데이터를 출력하는 과정
① CPU는 데이터와 프린트 명 령을 프린터 제어기로 전송 하고, 다른 작업을 수행
② 그 데이터의 프린트가 종료 되면, 제어기가 CPU로 인 터럽트 요구 신호를 전송
③ 프린트할 내용이 남아 있다 면, CPU는 다음에 프린트 할 데이터를 준비하여 위의 과정을 반복
이 순서의 흐름도는 그림과 같음
인터럽트를 발생할 수 있는 I/O 장치들이 여러 개가 존재하는 시스템에서 그러한 문제들을 해결하는 방법
• 다중 인터럽트 방식
• 데이지-체인 방식
• 소프트웨어 폴링 방식
이 방식에서는 각 I/O 제어기와 CPU 사이에 별도의 인터럽트 요구 신호 선과 인터럽트 확인 신호 선이 존재함.
인터럽트 확인 신호 : CPU가 I/O 장치로부터의 인터럽트 요구를 인식했다는 것을 알려주는 신호
그림과 같이 네 개의 I/O 장치들이 제어기를 통하여 CPU와 접속되는 시스템에서는 네 개의 INTR 선과 네 개의 INTA 선이 필요함. CPU가 각 I/O 제어기로부터 인터럽트 요구를 받았을 때, 만약 즉시 응답할 수 있는 상태라면 해당 인터럽트 확인 신호를 보내줌. 예를 들어, 그림에서 I/O 제어기2가 인터럽트를 요구하는 경우에는 다음과 같은 동작으리 순서대로 수행됨.
① I/O 제어기#2가 INTR2 신호를 세트
② CPU는 INTA2 신호를 세트 함으로써 그 제어기에게 인터럽트 요구를 인식하였음을 알리고, 인터럽트를 위한 서비스를 시작
③ I/O 제어기2는 INTR2 신호를 해제(0으로 리셋)
④ CPU도 INTA2 신호를 해제
장점 : CPU가 인터럽트를 요구한 장치를 쉽게 찾아낼 수 있음
단점 : 하드웨어가 복잡하고, 접속 가능한 I/O 장치들의 수가 CPU의 인터럽트 요구 입력 핀의 수에 의해 제한됨
인터럽트 플래그 : CPU가 인터럽트를 처리할 수 있는 상태인지 혹은 아닌지를 알려주는 상태 비트
이 방식은 그림에서 보는 바와 같이 모든 I/O 제어기들은 한 개의 INTR 선을 공유함. 그리고 CPU로부터 발생되는 INTA 출력 선은 가장 가까이 위치한 I/O 제어기1의 인터럽트 확인 입력 선으로 연결됨. 그리고 제어기1의 인터럽트 확인 출력 선은 다음에 위치한 I/O 제어기의 AI2로 연결되고, AO2는 AI3로, AO3는 AI4로 직렬 연결되는데, 그 형태가 마치 데이지 꽃들을 연속적으로 연결한 모습과 같다고 하여 데이지-체인 방식이라고 부름. 만약 다섯 번째 I/O 장치가 있다면, AO4는 그 제어기의 AI 입력으로 연결될 것임.
이 구성에서는 어떤 순간에 하나 혹은 그 이상의 I/O 제어기가 인터럽트 요구를 보낸다면, INTR 선이 세트됨. 그러면 CPU는 즉시 INTA 신호를 세트하는데, 그 신호는 첫 번째 I/O 제어기로 보내짐. 만약 그 제어기가 인터럽트를 요구한 상태라면, 즉시 데이터 버스를 통하여 자신의 식별 번호를 CPU로 보냄. 이 번호는 인터럽트 벡터라고 불리는데, CPU가 해당 I/O 장치를 위한 인터럽트 서비스 루틴의 시작 주소를 찾는데 사용됨.
그러나 만약 첫 번째 I/O 제어기가 인터럽트를 요구한 상태가 아니라면, 그 제어기는 확인 신호를 AO1를 통하여 두 번째 제어기로 통과시킴. 이러한 확인 신호의 전달 과정은 실제 인터럽트를 요구한 제어기에 도달할 때까지 계속됨. 결과적으로 이 방식에서는 INTA 신호가 연결된 순서가 우선순위를 나타냄. 결과적으로, 그림에서는 CPU와 가까이 위치한 I/O 제어기1의 우선순위가 가장 높고, I/O 제어기4가 가장 낮음
장점 : 하드웨어가 간단
단점 : 우선순위가 낮은 장치들이 서비스를 받지 못하고 매우 오랫동안 기다려야 하는 경우가 발생
이 방식에서는 그림에서 보는 바와 같이 한 개의 TEST I/O 선이 CPU와 모든 제어기들 사이에 연결됨. 각 제어기 내에는 해당 I/O 장치의 인터럽트 요구 상태를 가리키는 인터럽트 플래그가 있는데, TEST I/O 신호는 그 플래그의 상태를 검사하는 데 사용됨.
이 방식에서도 인터럽트 요구 선은 모든 I/O 제어기들에 의해 공통으로 사용됨. 어떤 I/O 장치가 인터럽트 요구를 발생하면, 해당 제어기 내에 있는 인터럽트 플래그가 세트됨가 동시에 공통 INTR 신호가 세트됨. 그려면 CPU는 즉시 다음과 같은 검사 과정을 수행함.
먼저 TEST I/O 선을 이용하여 첫 번째 I/O 제어기의 인터럽트 플래그가 세트되어 있는 지 검사함. 만약 세트되어 있다면, 검사 과정은 완료되는 것임. 그러나 만약 그 플래그가 세트되어 있지 않다면, CPU는 인터럽트를 요구한 장치를 찾을 때까지 검사 과정을 모든 제어기들에 대하여 차례대로 수행함. 이 과정에서 검사하는 순서가 I/O 장치들의 우선 순위를 나타냄.
장점 : 우선순위의 변경이 용이
단점 : 처리 시간이 오래 걸림
직접기억장치액세스(DMA) : CPU의 개입 없이 I/O 장치와 기억장치 사이에 데이터 전송을 수행하는 메커니즘
DMA 제어기 : CPU 개입 없이 I/O 장치와 기억장치 간의 데이터 전송을 수행하는 DMA 동작을 지원하는 하드웨어 모듈
DMA방식을 사용하기 위해서는 그림과 같이 시스템 버스에 DMA 제어기가 추가되어야 함. 주기억장치의 데이터를 I/O 장치로 내보내거나, I/O 장치로부터 데이터를 주기억장치로 읽어들일 때, CPU는 DMA 제어기로 다음과 같은 정보들이 포함된 명령을 보냄.
• I/O 장치의 주소
• 연산 지정자
• 데이터가 읽혀지거나 쓰여질 주기억장치 영역의 시작 주소
• 전송될 데이터 단어들의 개수
여기서 I/O 장치가 디스크인 경우에는 주소가 디스크 드라이브 번호, 트랙 번호 및 섹터 번호를 모두 포함해야 함. CPU는 이러한 정보들이 포함된 명령을 DMA 제어기로 보낸 다음에는 다른 일을 계속함. 즉, CPU는 I/O 동작을 DMA 제어기에 맡기고, 모든 데이터 전송 동작이 완료될 때까지 전혀 개입하지 않음.
그림과 같은 시스템 구성에서 DMA 제어기가 DMA 동작을 수행하기 위해서는 시스템 버스를 통하여 주기억장치를 액세스하게 됨. 즉, CPU와 DMA 제어기가 시스템 버스를 공유하는 것임. 그런데 DMA 제어기는 가능한 한 CPU의 정상적인 동작을 방해하지 않으면서 시스템 버스를 사용함. 즉, CPU가 시스템 버스를 사용하지 않는 시간 동안에 시스템 버스를 사용함. 그 이유 때문에 DMA를 사이클 스틸링이라고 부름.
사이클 스틸링 : CPU가 시스템 버스를 사용하지 않는 동안에 DMA 제어기가 버스를 사용한다는 것을 의미하는 용어
그런데 큰 데이터 블록을 전송하는 경우에 그러한 사이클만 이용하게 되면 I/O 처리 시간이 너무 길어지게 됨. 따라서 일반적으로는 DMA 제어기가 시스템 버스 사용을 요구하면, CPU는 현재 사이클이 끝나는 즉시 사용 허가를 해주어서 DMA 동작이 신속하게 일어날 수 있도록 해주며, 그 동안에 CPU는 기다림. DMA 제어기는 데이터를 한 번에 한 개씩 이동시킨 다음에 시스템 버스를 CPU에게 되돌려줌. 그리고 그러한 동작을 모든 데이터 블록을 전송할 때까지 반복함.
DMA 제어기가 CPU에게 버스 사용을 요구하는 신호를 버스 요구 신호라고 하며, CPU가 DMA 제어기에게 버스 사용을 허가하는 신호를 버스 승인 신호라고 함. 그리고 DMA 동작이 완료되면 DMA 제어기는 CPU로 인터럽트 요구 신호를 보내어 그 사실을 알리며, CPU는 그에 따른 다음 절차를 진행하게 됨. 한 예로서, 주기억장치 내의 어떤 데이터 블록을 디스크에 저장하기 위한 DMA 동작의 처리 순서는 다음과 같음.
① CPU가 DMA 제어기에게 명령을 보냄
② DMA 제어기는 CPU로 BUS REQ 신호를 보냄
③ CPU가 DMA 제어기로 BUS GRANT 신호를 보냄
④ DMA 제어기가 버스를 사용하여 주기억장치로부터 데이터를 읽어서 디스크 제어기로 보냄
⑤ 저장할 데이터가 남아 있다면, ②번부터 ④번까지를 다시 반복함
⑥ 모든 데이터들의 저장이 완료되면, CPU로 INTR 신호를 보냄
이러한 기능들을 수행하기 위한 DMA 제어기의 내부 구조는 그림과 같음. 먼저 DMA 명령에 포함되는 내용들을 저장하는 레지스터들이 있음. 즉, I/O 장치의 주소를 저장하는 주소 레지스터와 데이터 버퍼 역할을 하는 데이터 레지스터, 그리고 전송될 데이터 수를 저장하는 카운터 레지스터 등이 있음. 이들은 앞에서 설명하였던 I/O 제어기와 마찬가지로 각각 별도의 주소를 할당받으며, CPU는 그 주소를 이용하여 레지스터들을 액세스함. 그리고 위에서 설명한 각종 제어 신호들을 발생하거나 받아들이기 위한 제어 회로들이 있음.
DMA 동작은 주기억장치와 I/O 제어기 사이에 데이터를 한 번에 한 개씩 전송시키는데, 그림과 같은 시스템 구성에서는 그 때마다 시스템 버스를 두 번씩 사용함. 예를 들어, 디스크 쓰기 동작을 위하여 주기억장치의 데이터를 디스크 제어기로 전송하는 경우를 고려해보면, 먼저 데이터를 주기억장치로부터 DMA 제어기로 이동시키기 위하여 시스템 버스를 한 번 사용하며, DMA 제어기로부터 데이터를 디스크 제어기로 이동시키기 위하여 다시 시스템 버스를 사용함. 따라서 1024바이트 크기의 데이터 블록을 저장한다면, 시스템 버스를 모두 2048번 사용하게 됨. 결과적으로, 그림과 같은 구조에서는 DMA 동작을 위하여 시스템 버스가 너무 많이 사용되어 전체 시스템 성능이 저하됨.
그러한 문제를 해결하기 위한 방법으로서 그림과 같은 구조를 고려할 수 있음. 즉, I/O 제어기를 시스템 버스에 직접 접속하지 않고 DMA 제어기에 접속하는 것임. 이 경우에는 DMA 제어기가 데이터를 I/O 제어기로 이동시킬 때는 시스템 버스를 사용할 필요가 없음. 따라서 1024바이트 블록을 DMA로 전송하는 데 시스템 버스를 1024번만 사용하면 됨.
그런데 그림과 같은 시스템 구조에서는 각 DMA 제어기에 직접 접속할 수 있는 I/O 제어기의 수가 제한됨. 따라서 다양한 종류의 많은 I/O 장치들을 포함하고 있는 시스템에서는 여러 개의 DMA 제어기들을 시스템 버스에 접속해야 함. 이러한 문제를 개선한 것이 아래의 그림임.
이 구성에서는 DMA 제어기가 시스템 버스와 I/O 버스 사이에 위치함. 그리고 I/O 버스에는 각종 I/O 장치들이 제어기들을 통하여 접속됨. 즉, 하나의 DMA 제어기가 I/O 버스를 통하여 여러 I/O 장치들을 위한 DMA 동작들을 지원하는 것임. 이 경우에는 DMA 제어기 내부에 I/O 버스 인터페이스 회로가 추가되어야 함.
그러나 DMA 제어기를 이용한 I/O 데이터 전송은 다음과 같은 문제점들을 가지고 있음.
■ I/O 장치들은 종류와 속도가 다양하고 제어 방법도 복잡하기 때문에, 간단한 구조를 가진 DMA 제어기로 지원하는 데는 한계가 있음
■ 디스크 쓰기 혹은 읽기 동작의 경우에는 데이터 블록의 크기가 512 바이트 이상이기 때문에 그 데이터들을 버퍼링(임시 저장)하기 위한 내 부 기억장치가 필요
이러한 문제점 들을 해결하기 위하여 최근의 고성능 컴퓨터시스템들에서는 DMA 제어기를 확장시킨 I/O 프로세서를 사용. IOP는 I/O 채널이라고도 부르는데, 다음과 같은 하드웨어들을 가지고 있음.
• I/O 제어 프로그램을 수행할 수 있는 프로세서
• 데이터 블록을 임시 저장 할 수 있는 용량의 지역 기억장치
• 시스템 버스 인터페이스 및 버스 마스터 회로
• I/O 버스 중재 회로
I/O 프로세서가 사용된 시스템의 구성도
시스템 구성을 그림과 같이 변경하면 성능이 크게 향상될 수 있음.