여러분은 컴퓨터가
키보드와 모니터뿐이 아니라는 것을
처음 깨달았을 때를 기억하십니까?
마우스 클릭과 비디오 실행 사이에
무언가가 여러분의 의도를 잡아내어
이해하고
실행합니다.
그 무언가가 무엇일까요?
그렘린이 한 짓 일까요?
우리가 전자만큼 작아져서
마우스를 클릭하는 순간으로
들어간다고 상상해 봅시다.
마우스를 분해해 보면
마우스는 아주 간단한 기계입니다.
몇 개의 버튼과
움직임과 거리를 감지하는 시스템을 가지고 있죠.
여러분은 빛과 센서로 감지하는
광 마우스를 갖고 있는지도 모르겠군요.
그러나 옛날 마우스는 단단한 고무공과
플라스틱 바퀴로 감지했습니다.
똑같은 개념입니다.
마우스의 버튼을 누르면
마우스의 위치 정보를
컴퓨터로 보냅니다.
마우스를 눌렀다는 정보를 받으면
그걸 기초적인 입출력 하위 시스템이 처리합니다.
이 하위 시스템은 컴퓨터의 눈, 귀,
입, 손처럼 행동합니다.
무엇보다도 하위 시스템은 컴퓨터가
주변 환경과 교류하는 방법을 제공합니다.
하위시스템은 또 중앙 처리 장치가 방해 요소에
압도당하지 않도록 완충제 역할을 합니다.
이 경우에는 입출력 하위시스템이
마우스 클릭이 매우 중요하다고 결정해서
중앙 처리 장치에 끼어듭니다.
"어이, 중앙 처리 장치! 여기 클릭했어."
CPU, 중앙 처리 장치는
전체 컴퓨터의 뇌 역할을 합니다.
뇌가 여러분 몸을 다 차지하지 않듯이
CPU도 컴퓨터 전체를 차지하지 않지만
CPU가 모든 것을 운영하죠.
그리고 CPU가 하는 일은
메모리에서 지시를 받아
실행하는 것입니다.
그래서 여러분이 글자를 치고, 치고, 치고
정말 빨리 쳐서
1분에 낱말 60개를 치면
CPU는 1초에 수십억개의 지시 사항을
불러오고 실행합니다.
네, 1초당 수십억입니다.
마우스를 스크린 위에서 움직이고
데스크톱에 있는 시계를 작동시키고
인터넷 라디오를 켜고
여러분이 하드 드라이브에서 편집하는 파일들을 관리하는 지시 따위,
그 밖에도 훨씬 많습니다.
컴퓨터 CPU는 엄청나게 많은 일들을 동시에 해냅니다.
"그런데 어머나
지금 매우 중요한 마우스 클릭 정보가
들어오고 있어!
모든 걸 멈추고 클릭을 처리하자!"
CPU가 하는 일마다
프로그램이 있습니다.
마우스,
시계,
인터넷 라디오,
그리고 키보드가 보내는 글자를 처리하는 프로그램이 있습니다.
각 프로그램은 처음에는 사람이 읽을 수 있는
프로그램 언어로 만들어졌습니다.
자바(Java) 나
C++,
파이톤(Python) 같이 말이죠.
그러나 사람이 읽을 수 있는 프로그램은 너무 많은 공간을 차지하고
컴퓨터에게 필요없는 정보가 많아서
이걸 컴파일해서 작게 만들고
메모리 안에 1과 0의 정보로 저장합니다.
CPU는 마우스 클릭을 처리하는 법에 대한
지침이 필요한 것을 깨닫습니다.
그래서 마우스 프로그램 주소를 찾아서
메모리에 저장된 지침을
달라고 메모리 하위시스템에게 요청합니다.
마우스 장치 드라이버의 지침을 각각
때맞게 가져와서 실행합니다.
이야기는 여기서 끝이 아닙니다!
모니터 화면의 버튼 그림 위로
커서가 움직이면
CPU는 마우스가 클릭된 것을 감지하고
그 버튼이 무엇인지 알기 위해
CPU는 메모리에게 모니터 프로그램을 요청합니다.
그리고 나서 CPU는 메모리에게
버튼 프로그램을 요청해야 하는데
이 말은 CPU가 버튼과 연결되어있는
비디오를 보여주기 위해 모니터 프로그램을
다시 필요로 한다는 뜻입니다.
그렇게 비디오가 실행됩니다.
클릭하면 스크린에 있는 버튼에 빛이 들어오는 것을
여러분이 보기도 전에
아주 많은 프로그램이 관여한다고 생각하면 됩니다.
그래서 마우스를 클릭하는 단순한 일은
컴퓨터 구조에서 중요한 부분을
다 사용한다는 뜻입니다.
주변 장치들,
기본적인 입출력 시스템,
중앙 처리 장치,
프로그램들,
그리고 메모리가 이런 일을 하고 있습니다.
그렘린이 아니고요.