관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

입출력장치 3 - 다양한 입출력 방법 2 : DMA 입출력 본문

알고리즘 및 자료 관리/컴퓨터 구조 & 운영체제

입출력장치 3 - 다양한 입출력 방법 2 : DMA 입출력

huenuri 2024. 10. 16. 16:55

이어서 입출력 방법에 대해서 학습해 본다.


 

 

 

DMA 입출력

 

 

 

 

CPU는 장치 컨트롤러에서 입출력 장치 데이터를 하나씩 읽어 레지스터에 적재하고, 적재한 데이터를 메모리에 저장한다.

 

 

 

CPU는 메모리에서 데이터를 하나씩 읽어 레지스터에 적재하고 적재한 데이터를 하나씩 입출력장치에 내보낸다.

 

 

 

 

 

 

 

DMA 입출력을 하기 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다.

 

 

DMA 입출력 과정

 

이때 DMA 컨트롤러는 필요한 경우 메모리에 직접 접근한다. 이번에는 메모리 내의 정보를 하드 디스크에 백업하는 작업이 DMA 입출력으로 어떻게 이루지는 지도 알아보자.

 

 

 

 

 

위 입출력 과정을 보면 알 수 있듯 입출력장치와 메모리 사이에 주고받을 데이터는 CPU를 거치지 않는다. CPU는 DMA 컨트롤러에게 입출력 작업 명령을 내리고, 인터럽트만 받으면 되기 때문에 작업 부담을 훨씬 줄일 수 있다. 다시 말해 CPU는 오로지 입출력의 시작과 끝만 관여하면 된다.

 

 

 

시스템 버스는 공용 자원이기 때문이다. 

 

 

 

CPU 입장에서는 마치 버스에 접근하는 주기를 도둑맞는 기분이 들 것이다. 그래서 이러한 DMA의 시스템 버스 이용을 사이클 스틸링(cycle stealing)이라고 부른다.


 

 

 

입출력 버스

DMA 컨트롤러와 장치 컨트롤러의 연결 방식과 입출력 버스에 대해 알아볼 것이다. CPU, 메모리, DMA 컨트롤러, 장치 컨트롤러 모두 같은 버스를 공유하는 구성에서는 DMA를 위해 한 번 메모리에 접근할 때마다 시스템 버스를 두 번 사용하게 되는 부작용이 있다. 앞서 예를 들었던 메모리 내 정보를 하드 디스크로 백업하는 상황을 다시 생각해 보자.

 

이 경우 ① 메모리에서 DMA 컨트롤러로 데이터를 가져오기 위해 시스템 버스를 한 번 사용하고, ② DMA 컨트롤러의 데이터를 장치 컨트롤러로 옮기기 위해 시스템 버스를 또 한 번 사용한다.

DMA를 위해 시스템 버스를 너무 자주 사용하면 그만큼 CPU가 시스템 버스를 이용하지 못한다. DMA 컨트롤러와 장치 컨트롤러들을 입출력 버스라는 별도의 버스에 연결하여 해결할 수 있다. 아래 그림과 같이 장치 컨트롤러들이 시스템 버스가 아닌 입출력 버스로 DMA 컨트롤러에 연결된다면 DMA 컨트롤러와 장치 컨트롤러가 서로 데이터를 전송할 때는 시스템 버스를 이용할 필요가 없으므로 시스템 버스의 사용 빈도를 줄일 수 있다.

 

 

현대 대부분 컴퓨터에는 입출력 버스가 있다. 다시 말해 대부분의 입출력장치(장치 컨트롤러)는 시스템 버스가 아닌 입출력 버스와 연결된다. 이런 점에서 볼 때 입출력 버스는 입출력장치를 컴퓨터 내부와 연결 짓는 통로라고 볼 수 있다.

입출력 버스에는 PCI, PCI Express(PCIe) 버스 등 여러 종류가 있다.

 

이 그림은 여러 입출력장치들을 PCIe 버스와 연결해 주는 통로인 PCIe 슬롯이다. 우리가 사용하는 거의 모든 입출력장치들은 이렇게 입출력 버스와 연결되는 통로를 통해 시스템 버스를 타고 CPU와 정보를 주고받는다.

 

 

 

 

 

DMA를 통해 입출력장치와 메모리가 CPU를 거치지 않고 직접 데이터를 주고받을 수 있게 되었지만, 여전히 입출력 명령어를 인출하고, 해석하고, 실행하는 역할은 상당 부분 CPU의 몫이었다. 그래서 최근에는 메모리에 직접 접근할 뿐만 아니라 입출력 명령어를 직접 인출하고, 해석하고, 실행까지 하는 일종의 입출력 전용 CPU가 만들어졌는데, 이를 입출력 프로세서(IOP; Input/Output Processor) 혹은 입출력 채널(Input/Output Channel)이라고 부른다. 

 

이 프린터는 입출력 채널이 있는 삼성 레이저 프린터이다.

입출력 채널이 있는 컴퓨터에서는 CPU가 입출력 명령어를 실행하지 않는다. CPU가 입출력 채널에게 메모리에 저장된 특정 입출력 명령어를 수행하라고 지시하면, 입출력 채널은 해당 입출력 명령어를 인출하고, 해석하고, 실행한 뒤, 인터럽트를 통해 결과를 CPU에게 알린다.


 

 

 

단원 마무리하기

 

 

 

 

 

 


 

 

 


 

 

 

학습을 마치고

드디어 다소 지루했던 입출력 장치를 비롯해 컴퓨터 구조에 대한 공부가 끝났다. 문제도 모두 잘 풀었고 아주 조금은 컴퓨터가 무엇인지 알게 된 시간이었다.

오늘은 정말 공부를 쉬고 싶었는데 그래도 하니까 또 하게 된다. 추가 강의가 하나 있어서 그 강의까지 들으면 저녁에는 내가 하고 싶은 것을 하면서 놀 생각이다.