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이 필요하고 그래픽을 고속으로 표시하기 위해 전용 프로세서가 필요하기 때문이다.