////
Search
Duplicate
🛟

Chapter 11. 프로그램으로 하드웨어를 제어해 보자!

01. 어플리케이션은 하드웨어와 무관하다?

C언어 등의 고급 언어를 사용해서 어플리케이션을 작성하는 경우, 하드웨어를 직접 제어하는 명령어를 사용할 필요는 거의 없는데, 운영체제가 하드웨어의 제어를 책임지기 때문이다.
그러나 어플리케이션을 이용해서 하드웨어를 간접적으로 제어할 수 있게 해주는 방법도 제공한다. 바로 운영체제가 제공하는 시스템 콜을 사용하는 것이다.
윈도우의 경우 시스템 콜을 API라고 한다. 각각의 API는 어플리케이션 안 에서 호출 가능한 함수 형태로 되어 있는데, 함수들의 실제 내용은 DLL에 수록되어 있다.

02. IN, OUT 명령어로 하드웨어 제어하기

윈도우가 하드웨어를 제어하기 위해 이용하는 것은 입, 출력 명령어로 대표적인 명령어로는 In, Out 두 개가 있다. 이들은 어셈블리어의 니모닉이다.
x86 계열 CPU의 IN, OUT 명령어의 형식은 각각 IN 레지스터 이름, 포트 번호, OUT 포트 번호, 레지스터 이름과 같다.
컴퓨터의 본체에는 하드웨어를 연결하기 위한 커넥터가 준비되어 있고, 각 커넥터에는 본체와의 전기적 신호를 서로 교환해주는 IC가 연결되어 있는데, 이들을 입출력 컨트롤러라고 부른다.
이 입출력 컨트롤러에는 입출력되는 데이터를 일시적으로 저장하기 위한 일종의 메모리가 들어 있는데, 이 메모리가 바로 포트다.
입출력 컨트롤러 내부의 메모리를 레지스터라고도 하는데, 이 레지스터는 CPU 내부의 레지스터와는 달리 데이터를 일시적으로 저장하는 기능만 한다.
컴퓨터에는 각종 주변 기기들이 연결되어 있으며 이들을 포트 번호를 이용해 구별한다.

03. PC 스피커를 제어하는 프로그램을 만들어 보자!

실습 챕터로 생략하였습니다.

04. 도표로 알아보는 인터럽트 처리 과정

IRQ란 Interrupt Request 즉, 인터럽트 요청을 의미하는데, 이는 현재 실행되고 있는 프로그램을 일단 정지시키고, 다른 프로그램을 실행하기 위해 필요한 것으로 인터럽트 처리라고 부른다.
인터럽트 처리가 이뤄지면 인터럽트 처리를 요구한 프로그램이 종료되기 까지 이전에 실행되던 프로그램의 처리가 중단된다.
인터럽트 처리를 요청하는 것은 주변 기기에 연결된 입출력 컨트롤러이고 인터럽트 처리 프로그램 실행은 CPU가 담당하게 된다.
인터럽트를 요청하는 주변 기기를 지정하려면 입출력 기기의 포트 번호와는 다른 번호를 사용해야 하는데, 이를 인터럽트 번호라고 부른다.
인터럽트 번호에 대응하는 인터럽트 처리 프로그램은 OS 또는 BIOS가 제공한다.
만약 둘 이상의 주변 기기들이 동시에 인터럽트를 요구하는 경우, 경합이 발생하는데, 이를 방지하기 위해 입출력 컨트롤러와 CPU 사이의 인터럽트 컨트롤러라는 IC를 사용한다.
이는 복수의 주변 기기로부터 인터럽트 요청을 받아 CPU에 전달하는 역할을 한다.
인터럽트 컨트롤러로부터 인터럽트 요청을 받아들인 CPU는 현재 실행 중인 메인 프로그램에서 인터럽트 처리 프로그램으로 실행을 전환하게 된다.
인터럽트 요청이 받아들여진 프로그램이 최초로 하는 일은 CPU가 갖고 있는 모든 레지스터의 값을 메모리의 스택에 보관해 두는 것이다.
그런 다음, 인터럽트 처리 프로그램이 주변 기기와의 입, 출력을 끝냈다면 스택에 임시로 보관해 둔 값을 다시 레지스터로 되돌려서 메인 프로그램이 계속 처리하게 한다.

05. 실시간 데이터 처리를 가능하게 하는 인터럽트

인터럽트 처리는 자주 발생하는데, 주변 기기에서 입력된 데이터를 실시간으로 처리하려 하기 때문이다.
인터럽트 처리를 사용하지 않는 경우, 데이터를 입력하려면 주변 기기들을 차례대로 검사해 입력값이 있는지 확인해야 하는데, 해당 기법을 폴링이라고 한다.
폴링은 인터럽트가 많이 발생하지 않는 시스템엔 적합하지만 PC에는 부적합하다.

06. 대량의 데이터를 단시간에 전송할 수 있는 DMA

DMA란 Direct Memory Access의 약자로 직접 메모리 접근을 의미하는데, 하드웨어가 CPU를 거치지 않고 직접 컴퓨터의 메인 메모리를 읽고 쓰는 기능을 말한다.
CPU를 경유하지 않기 때문에 대량의 데이터를 단시간에 메인 메모리에 전송할 수 있다.

07. 문자나 그래픽이 어떻게 모니터에 표시될까?

모니터에 표시되는 정보를 항상 기록하고 있는 메모리가 존재하기 때문으로 이 메모리를 VRAM(Video RAM)이라고 한다.
프로그램으로 VRAM에 데이터를 입력하면 그 내용이 바로 모니터에 표시된다. 이와 같은 기능을 위한 프로그램은 운영체제나 BIOS에 의해 제공되고 인터럽트에 의해 처리된다.
과거에는 메인 메모리의 일부가 VRAM으로써 사용되었는데 현재는 그래픽 카드라 부르는 그래픽 출력 전용 하드웨어에 메인 전용 VRAM와 GRPU가 장착된 것이 일반적이다.
이는 그래픽을 표시하기 위해 VRAM이 필요하고 그래픽을 고속으로 표시하기 위해 전용 프로세서가 필요하기 때문이다.