떠오르는 생각을 정리하는 공간
[002] 폴링, 인터럽트, DMA 본문
컴퓨터에서 두뇌 역할인 CPU는 수많은 입.출력 장치와 연결되어 정보를 주고 받습니다. 컴퓨터에서 입출력 장치 간 통신에서 많이 언급되는 용어인 폴링, 인터럽트, DMA (Direct Memory Access)에 대해서 각각 정리했습니다.
[그림1]은 설명의 편의를 위해 CPU가 입력장치인 키보드와 마우스, 출력장치인 모니터와 프린터에 연결 되어 있는 것을 도식화 한 것입니다. 그림에서는 간단하지만 실제 컴퓨터에는 수많은 입출력 장치가 연결되어 있으며, 이로 인해 우리가 간편하게 컴퓨터를 사용할 수 있는 것입니다.
폴링 (polling)
Polling, or polled operation, in computer science, refers to actively sampling the status of an external device by a client program as a synchronous activity. Polling is most often used in terms of input/output (I/O), and is also referred to as polled I/O or software-driven I/O. [Wikipedia]
폴링은 CPU가 자신과 연결 된 입출력 장치에서 무슨 일이 있는지를 주기적으로 확인하는 방식입니다. 우선 알아야 할 것은 사용자가 아무리 빠르게 키보드와 마우스를 클릭해도 1초에 몇 번 누르지 못합니다. 하지만 CPU의 경우 1초에 수 많은 연산을 처리할 수 있는 성능을 가지고 있습니다. 그렇기 때문에 주기적으로 마우스의 상태를 확인하면 CPU의 성능을 100% 활용하지 못하는 문제가 발생합니다. 예를 들어 교수님(CPU)이 학생들(입출력장치)에게 10분 간격으로 "공부는 했는지", "질문은 있는지" 등을 확인하는 것이다. 교수님은 고차원적인 일을 할 수 있는 능력이 있지만 10분 마다 학생과 의사소통하면서 교수님의 능력을 다른 곳에서 활용하지 못하는 상황과 유사하다고 생각해도 좋을 것 같습니다.
위와 같이 폴링은 연결되어 있는 입출력 장치의 개수가 증가하면 할수록 CPU를 점유하는 시간이 증가하여 성능이 하락하는 큰 문제점이 있습니다. 하지만 실제 코드로 구현하는 과정은 간단하기 때문에 하드웨어를 간단하게 구현해보는 과제 등에서 활용할 수 있습니다.
인터럽트 (interrupt)
Hardware interrupts are used by devices to communicate that they require attention from the operating system. Internally, hardware interrupts are implemented using electronic alerting signals that are sent to the processor from an external device, which is either a part of the computer itself, such as a disk controller, or an external peripheral. [Wikipedia]
입출력 장치에서 자신들이 필요할 때마다 CPU에게 인터럽트 신호를 전송해서 순간 순간 사용하는 방식으로 폴링과 대비되는 용어 입니다. CPU 입장에서는 필요할 때만 입출력 장치와 통신하고 남는 시간동안 다른 일을 할 수 있으므로 폴링 방식에 비해 성능이 증가했습니다. [그림2]는 인터럽트가 발생했을 때, CPU가 어떻게 처리를 하는지 간략하게 보여주고 있습니다.
일반적으로 컴퓨터는 코드를 순차적으로 처리합니다. [그림2]를 보면 위에서부터 아래 방향으로 순차적으로 프로그램을 처리하고 있습니다. 중간에 입출력 장치가 CPU를 사용해야 할 때, interrupt signal을 전송하게 됩니다. CPU는 해당 신호를 받으면 다음과 같은 단계로 동작하게 됩니다.
① 현재 CPU의 각종 레지스터와 상태를 저장
② 인터럽트 핸들링을 위해 ISR (Interrupt Service Routine)을 수행
인터럽트 종류에 따라 CPU에서는 처리하는 방식을 미리 정의한 프로그램이 존재함.
③ 다시 원래 수행하던 프로그램으로 돌아가 정상적으로 동작
①단계에서 저장한 CPU의 여러 정보를 다시 불러들인 후, 원래 수행하던 프로그램으로 동작함.
CPU 입장에서는 자신이 인터럽트를 처리했는지를 의식하지 못하게 됨.
위에 상황은 인터럽트 핸들링의 전 과정을 축소한 것이며, 실제로는 더 복잡한 과정으로 동작합니다. 인터럽트의 경우 컴퓨터 분야를 전공하는 학생 입장에서는 반드시 알아야 할 개념이라고 생각되며, 저도 추후에 인터럽트에 대해서 자세히 풀어서 정리를 할 것입니다. 하여튼 위와 같은 과정으로 CPU의 idle time을 획기적으로 줄일 수 있지만 구현하는 과정에서 신경써야할 부분이 증가하는 문제점도 있습니다.
DMA (Direct Memory Access)
Direct memory access (DMA) is a feature of computer systems that allows certain hardware subsystems to access main system memory (RAM) independently of the central processing unit (CPU). [Wikipedia]
위에서 인터럽트를 적용해 폴링의 단점인 CPU 가용 시간을 증가할 수 있는 장점이 있다고 했습니다. 하지만 인터럽트 방식은 1 word를 처리할 때마다 CPU에 인터럽트 신호를 전송하는 방식이므로 여전히 CPU의 가용 시간을 잡아먹고 있습니다. 그래서 최근에는 이러한 문제를 해결하기 위해 CPU가 하는 일을 DMA controller가 대신하고 있습니다. DMA를 이용하면 입출력 장치간 데이터를 주고 받는 과정이 끝났을 때에만 인터럽트가 발생하므로 CPU의 역할을 현저히 줄일 수 있습니다. 기존에는 CPU에 여러 입출력 장치가 연결 되어 있었습니다. 하지만 이제는 하나의 DMA에 여러 개의 입출력 장치가 연결되게 됩니다.
동작 과정을 보면 CPU는 전송할 자료와 장소에 대한 위치를 나타내는 포인터와 전송 될 바이트 크기를 DMA에 전송합니다. 그러면 DMA는 해당 정보를 바탕으로 자신과 연결되어 있는 입출력 장치의 요구사항을 처리할 수 있어, CPU의 가용시간이 증가하는 장점이 있습니다. 즉, 교수님이 조교에게 학생들이 공부는 잘하고 있는지 숙제는 냈는지 등을 검사하게 시키고, 조교가 평가한 데이터를 교수님이 최종적으로 확인하게 되는 것으로 볼 수 있습니다. 이러한 DMA는 최근 많은 장치에서 활용하고 있는 보편적인 기술이 되었습니다.
다른 블로그를 볼 때에는 참 쉽다고 생각했는데, 막상 아는 정보를 글로 풀어서 쓰고 그림도 그려보는 과정이 쉽지 않은 것 같습니다. 그래도 틈틈히 자료도 업로드 하고, 추가할 부분이 있으면 기존 글도 수정하면서 블로그를 운영하는 학생이 되도록 하겠습니다.
- LIFO (Last In First Out)으로 동작하는 메모리 구조이고, 스택에 대한 개념도 다음에 정리할 계획입니다. [본문으로]
'개인 공부 > 정리' 카테고리의 다른 글
[003] clock skew (0) | 2016.08.16 |
---|---|
[001] GPU에 대한 간략한 설명 (0) | 2016.05.23 |
[000] 전공 공부 정리를 위한 게시판 (0) | 2016.05.23 |