Computer Language와 TOEIC Speaking과의 상관관계
조물주가 만든 피조물이 인간이라면 인간은 필히 신을 닮을 수밖에 없으며, 인간이 만든 게 컴퓨터라면 컴퓨터 구조 및 동작도 인간의 사고 과정과 닮을 수밖에 없다. 토익 스피킹 파트 2의 사진 묘사 문제는 아래와 같은 사진 한 장을 보여주며 최대한 원어민과 같이 표현해보라고 한다.
나라면 아래와 같이 구성하여 말하기를 시작한다.
This photo was taken indoor at a basketball stadium. The thing that catches my eye is a basketball sitting on a court. The ball has stopped in the middle of the court. On the far left side, there is a basketball backboard hanging over the court. It seems like the stadium's lamp is just lighting on the square court. I can't see any people in the stadium because now is not on a match. In the background, there are many spectator's seats lined up surrounding the stadium. Overall, it seems to be a break period to clean up the court or organize the stadium during offseason.
이전 섹션이 오래전에 참조했었던 컴퓨터 아키텍처와 관련된 서적의 그림을 인용하는 바람에 뭔 소리인지도 모를 고문처럼 느껴졌을지도 모르겠으나, 본격적인 고문은 지금부터 시작이다. 개발자라면 프로그램 실행 간에 CPU에서 명령어를 어떻게 처리하고 메인 메모리와 레지스터를 최대한 효율적으로 사용해야 하는 언어(unmanaged language)에서의 생산성 높은 알고리즘에 대해 고민할 수준까지는 되어야 하지 않겠나? 한국의 IT 업계가 아직도 4D 업종이라며 볼멘소리를 하는 개발자들 중에 정말 자신이 코더(구글링 해서 관련 소스를 복사 및 붙여놓기 하는 수준)도 아닌데, 한국은 왜 미국과 달리 프로그래머 대우 수준이 너무 열악하다고 말할 수 있는가?(참고로 이 말을 피력하는 필자는 개발자도 아니다!)
앞선 내용을 정리하면, CPU가 할 수 있는 처리는 크게 아래의 그림(향후 자작 그림 게재 예정)에서와 같이 다음 3가지로 나눌 수 있다
1) 메모리의 특정 번지의 값을 특정 레지스터에서 기억하게 한다.
2) 특정 레지스터의 값을 메모리의 특정 번지에서 기억하게 한다.
3) 특정 레지스터와 특정 레지스터 간의 연산을 한 후 그 결과를 특정 레지스터에서 기억하게 한다.
모든 명령은 프로그램 제어 장치(Program Control Unit)에서 이루어진다. 그리고 1번째와 2번째 처리는 메모리와 레지스터 사이에 이루어지며, 3번째 처리는 레지스터와 연산 장치 사이에서 이루어진다.
컴퓨터라는 것은 기본적으로 이 세 가지 처리밖에 할 수 없다. 단순한 처리밖에 할 수 없지만 이러한 처리를 조합해서 커다란 프로젝트를 만들면 복잡한 처리도 얼마든지 할 수 있다(무라야마 유키오, 2015).
그럼 왜, 뚱딴지 같이 토익 스피킹 파트 2 문제 풀이의 예시를 들면서 컴퓨터 프로그램의 동작과 영어를 내뱉은 나의 사고 과정을 비교하려고 했을까? 내가 이 말을 뱉을 때, 볼드체의 밑줄 처리한 부분이 사진을 묘사한 내용의 신호어(Signal words)인데 이것이 프로그램 동작 시 스택 포인터가 가리켜야 하는 주소 레지스터(Memory Address Register, MAR)에 해당한다. ETS에서 주관하는 토익스피킹을 대비하기 위하여 내가 해당 신호어에 따른 전체 내용의 구조를 구성할 수 있는 까닭은 메모리에서 주소를 기억하는 PC(program counter, 제어 장치에서 어디로 가라고 지시한 메모리의 주소를 저장하는 레지스터)에 해당하는 기억 장소처럼 어디로 가야 하는지(버벅 거리기 전에)를 ‘반드시’ 기억(Register, 기록)하고 있다. 그리고 사진 보고 해당 사물이나 배경에 관해 입에 닳고 닳도록 영어로 체화시킨 표현 구문(스택을 통해 가져오는 Data 또는 CPU의 Word 단위)으로 묘사할 뿐이다. 컴퓨터도 메인 메모리의 번지 격인 주소를 반드시 기억하기 위해서 임시 기억 장소인 레지스터를 가리키는 스택 포인터를 사용하고(사진 묘사할 일이 있을 때만 단기 기억으로부터 해당 신호어를 로딩하고), 제어장치가 지시한 명령어나 데이터를 해당 레지스터에 임시로 저장(Fetch)했다가 반출(Latch)하는 사이클(cycle)에 의해 처리가 이루어진다.
요약하면 CPU가 프로그램을 실행할 때 기본적으로 다음 5개의 사이클에 의해 처리가 이루어진다(무라야마 유키오, 2015).
1) 패치(명령 가져오기)
2) 디코드(해석)
3) 오퍼랜드 패치(연산자 가져오기)
4) 실행(Execution)
5) 결과 저장(Write Back)
다음 섹션부터 '나프잘'의 시리즈의 저자 김석현의 ‘C언어를 잘하려면 함수를 잘 만들어야 한다’라는 책을 시작하여 사이드 프로젝트의 일환으로 Unmanaged Language의 토대를 실습해보려 한다.
참조
- 무라야마 유키오. 이해란 역. (2015). C를 배우기 전에 반드시 알아야 할 것들, 서울: 루비 페이퍼