입출력 제어방식
컴퓨터와 입출력장치 사이에서 데이터가 오가는 방식을 입출력 제어방식이라고 하는데, DMA와 PIO는 이 입출력 제어방식들 중 하나이며 총 네 가지 방식이 있다. 대형 컴퓨터에서 사용하는 Channel에 의한 I/O를 제외한 세 가지 방식에 대해 알아본다.
제어방식 | CPU 관여 여부 |
프로그램에 의한 I/O(PIO, Program I/O) | O |
Intrrupt에 의한 I/O | O |
DMA(Direct Memory Access)에 의한 I/O | X |
Channel에 의한 I/O | X |
Programmed I/O vs Interrupt I/O(Interrupt Initiated I/O)
이 두가지 입출력 방식은 CPU가 입출력(데이터의 이동)을 담당한다는 점에서는 같지만, 입출력이 준비되었음을 인식하는 과정에서 차이가 있다. PIO 방식에서는 입출력을 할 준비가 되었는지에 대한 상태(Flag)를 계속 확인해야하고, Interrupt I/O에서는 그게 필요없다. 이게 두 방식의 가장 큰 차이점이다.
PIO에서는 CPU가 입출력을 할 준비가 다 되었다고 알리는 신호인 플래그를 계속 확인한다. 준비가 완료되면 CPU가 입출력을 진행한다. 그러므로 CPU는 입출력에 대한 준비가 완료 될 때 까지 기다리는 시간 + 입출력을 직접 진행하는 시간 동안 다른 연산을 수행하지 못하는 비효율이 발생한다.
In the meantime CPU keeps on executing other tasks and need not check for the flag.
(https://www.geeksforgeeks.org/difference-between-programmed-and-interrupt-initiated-i-o/)
Interrupt I/O에서는 입출력에 대한 준비 완료를 기다릴 필요 없다. 준비가 완료되면 Interrupt이 발생하여 CPU에게 알려주기 때문이다. 때문에 Interrupt I/O에서는 직접 입출력을 진행하는 시간 동안만 다른 연산을 수행하지 못하며, 이 방식이 PIO보다는 덜 비효율적이다.
하지만 입출력을 CPU가 직접 수행하여 이 시간동안 다른 연산을 수행하지 못한다는 점은 여전히 비효율로 남아있다.
두 방식의 1:1 비교
Programmed I/O | Interrupted Initiated I/O |
Data transfer is initiated by the means of instructions stored in the computer program. Whenever there is a request for I/O transfer the instructions are executed from the program. | The I/O transfer is initiated by the interrupt command issued to the CPU. |
The CPU stays in the loop to know if the device is ready for transfer and has to continuously monitor the peripheral device. CPU는 장치가 데이터이동(입출력)을 준비가 되었는지 계속 확인한다. |
There is no need for the CPU to stay in the loop as the interrupt command interrupts the CPU when the device is ready for data transfer. 데이터이동(입출력) 준비가 완료되면 인터럽 신호를 주기 때문에 CPU는 직접 확인하는 루프에 들어가지 않아도 된다. |
This leads to the wastage of CPU cycles as CPU remains busy needlessly and thus the efficiency of system gets reduced. CPU가 입출력 준비 + 입출력 수행만큼 기다려야 하기 때문에 매우 비효율적이다 |
The CPU cycles are not wasted as CPU continues with other work during this time and hence this method is more efficient. CPU는 입출력 준비를 기다리는 동안 다른 처리를 수행할 수 있어 PIO만큼 비효율적이진 않다. |
CPU cannot do any work until the transfer is complete as it has to stay in the loop to continuously monitor the peripheral device. CPU는 데이터 이동이 완료될 동안 다른 일을 할 수 없다. |
CPU can do any other work until it is interrupted by the command indicating the readiness of device for data transfer 인터럽트가 발생하기 전 까지는 다른 일을 할 수 있다. |
Its module is treated as a slow module. | Its module is faster than programmed I/O module. |
It is quite easy to program and understand. | It can be tricky and complicated to understand if one uses low level language. |
The performance of the system is severely degraded. | The performance of the system is enhanced to some extent. |
두 방식의 순서비교
- Programmed I/O
- 입출력장치가 I/O 요청을 한다
- CPU가 수행하던 작업을 멈춘다
- CPU는 입출력의 준비가 될 때 까지 기다린다 (Flag를 확인한다) → 차이점
- 입출력 준비 완료를 알리면 CPU는 입출력을 진행한다
- 입출력을 완료하면 원래 하던 작업을 수행한다
- Interrupt I/O
- 입출력장치는 I/O에 대한 준비를 한다
- 준비가 완료되면 CPU에 인터럽트를 보낸다
- CPU는 원래 하던 작업을 중단한다
- 입출력을 수행한다
- 입출력을 완료하면 원래 하던 작업을 수행한다
DMA(Direct Memory Access)
DMA방식은 위의 두 방식과는 전혀 다른 방식이다. 데이터가 CPU를 거치지 않는다. 입출력장치가 직접 메모리에 접근하여 data block을 읽고 쓸 수 있다. 입출력이 필요할 때 CPU는 입출력에 필요한 정보를 DMA controller에 알려주기만 하고 이 DMA controller가 입출력을 수행하며 CPU는 자신의 업무를 수행한다. 입출력에 필요한 정보를 건네받은 DMA controller는 입출력을 수행하고 완료되면 인터럽트 신호만 발생시켜 CPU에게 입출력이 완료되었음을 알린다. 그렇기에 CPU 자원의 낭비가 최소화되며 효율적으로 작동할 수 있다.
DMA는 Cycle steal이라는 방식을 이용하여 데이터를 전송한다.(입출력을 수행한다.) DMA controller가 데이터를 전송하는 과정에서 CPU와 동시에 Memory에 접근할 때 DMA controller가 우선권을 빼앗아(Steal) 자료를 전송하는 방식이다. 일반적으로 입출력 장치가 CPU보다 적은 양의 memory cycle을 필요로 하기 때문에 DMA controller가 우선권을 가져서 입출력의 효율이 높아진다.
DMA 동작 순서
- CPU가 입출력에 대한 정보를 DMA controller에게 전달
- DMA controller는 CPU에 버스 사용을 요청(Bus* Request)
- CPU는 DMA controller에게 버스 사용을 허가(Bus Grant)
- DMA controller가 입출력 진행
- 입출력이 완료되면 DMA controller가 CPU에게 인터럽트 신호 보냄
* Bus에 대해 알아보기
Interrupt와 Cycle Steal의 차이점
Interrupt | Cycle Steal |
수행하고 있던 Program은 정지되지만, 인터럽트 처리 루틴의 명령을 실행하기 위하여 CPU는 수행 상태에 있게 된다. | CPU가 내부적으로 명령어를 해독하거나 연산을 수행하는 등 시스템 버스를 사용하지 않는 시간 동안에만 시스템 버스를 사용하기 때문에 CPU는 메모리 참조가 필요 없는 오퍼레이션을 계속 수행할 수 있지만 주기억장치에 접근할 수는 없다. |
주기억장치 사이클이 정지되지 않는다. | 주기억장치 사이클의 한 주기가 정지된다. |
CPU의 상태 보존이 필요하다. | CPU의 상태 보존이 필요 없다. |
CPU에서 DMA 제어기로 보내는 자료
- I/O 장치의 주소
- 데이터가 있는 주기억장치의 시작 주소
- DMA를 시작시키는 명령
- 입·출력 하고자 하는 자료의 양
- 입력 또는 출력을 결정하는 명령
DMA의 구성 요소
- 인터페이스 회로 : CPU와 입·출력 장치와의 통신 담당
- 주소 레지스터(Address Register) 및 주소 라인 : 기억장치의 위치 지정을 위한 번지 기억 및 전송
- 워드 카운트 레지스터(Word Count Register) : 전송되어야 할 워드의 수 기억
- 제어 레지스터(Control Register) : 전송 방식 결정
- 데이터 레지스터(Data Register) : 전송에 사용할 자료나 주소를 임시로 기억하는 버퍼 역할을 함
참고자료
https://www.geeksforgeeks.org/difference-between-programmed-and-interrupt-initiated-i-o/
https://ko.wikipedia.org/wiki/사이클_스틸링
'Computer Science > Computer Architecture' 카테고리의 다른 글
System Bus (0) | 2022.02.13 |
---|---|
컴퓨터 시스템의 기본 (0) | 2022.02.08 |
메모리계층 (0) | 2022.02.06 |
메모리관리 (0) | 2022.02.05 |