[컴개실] Ch.1 - Welcome Aboard
1학년 필수교양인 컴퓨터의 개념 및 실습 강의에서 배운 것들을 이 게시판에 요약 정리해 보려고 한다.
강의 교재인 Introduction to Computing Systems: from Bits & Gates to C/C++ and Beyond로 공부하고 있으며, 교재의 내용에서 주요하게 배운 점을 위주로 정리할 것이다.
1장에서는 뒷장에서 다룰 내용들과 더불어, 컴퓨터의 대략적인 개념이 소개되어 있다.
컴퓨터의 본질은?
인류 최초의 컴퓨터 ENIAC (사진: 위키백과)
인류 역사에서 수많은 종류의 계산기가 발명되고 사용되어 왔다. 이들과 컴퓨터가 다른 점은 무엇일까? 그것은 컴퓨터가 범용 계산 장치(universal computiational devices)라는 점이다. 기계적인 방식이든 디지털 방식이든, 이전에 개발된 계산기들은 주어진 구조에 따라 정해진 목적만을 수행할 수 있다. 예를 들어 두 숫자를 더하는 기계는 두 숫자를 곱하도록 목적을 바꾸기 어렵다. 이와 다르게, 현대적인 컴퓨터는 새로운 지시 사항을 프로그램으로 담아 주면 얼마든지 다른 계산을 수행할 수 있다. 사실, 계산할 수 있는 것은 모두 컴퓨터로 계산할 수 있다. 따라서 컴퓨터에 관해 공부하는 것은 계산 가능한 것이 무엇인지를 공부하는 것이기도 하다.
이러한 범용 계산 장치의 개념을 처음 제안한 사람은 앨런 튜링이었다. 그는 계산에 관한 철학적 문제를 탐구하는 과정에서 '튜링 머신'의 개념을 도입했는데, 이건 일렬로 이어진 테이프에 담긴 기호들을 읽어들여 작업을 수행하는 가상의 기계이다. 튜링 머신이 작업을 수행하는 방식은 유한한 규칙의 집합에 의해 결정되는데, 임의의 규칙을 가진 튜링 머신을 모사하도록 할 수 있는, 즉 프로그래밍할 수 있는 '범용 튜링 머신'이 바로 범용 계산 장치에 해당한다.
전자들을 움직여서 문제를 해결하기까지
현대적인 컴퓨터로 문제를 해결할 때, 문제를 정의하는 것부터 실제로 컴퓨터를 이루는 트랜지스터 사이로 전자들이 움직이기까지 어떤 중간 과정이 있을까? 대략적으로 알아보자.
자연어로 정의된 문제 -> 알고리즘
먼저 한국어, 영어 등 자연어로 설명할 수 있는 문제를 컴퓨터가 이해할 수 있도록 알고리즘으로 바꾸어야 한다. 알고리즘이란 문제 해결까지 이르기 위한 단계적 절차로써, 명확하게 기술되어야 하고, 컴퓨터로 수행 가능한 것이어야 한다.
알고리즘 -> 프로그래밍 언어
알고리즘이 만들어졌다면 그것을 프로그래밍 언어를 이용해 컴퓨터가 이해할 수 있는 프로그램으로 만들어야 한다. 프로그래밍 언어란 순차적인 명령을 컴퓨터에게 전달하기 위해 고안된 언어 체계로, C/C++, Python, Java 등이 여기에 해당된다. 이런 고수준(high-level) 언어들로 작성된 프로그램을 프로세서에서 실행하려면 프로세서마다 고유하게 정해진 저수준(low-level) 언어, 즉 어셈블리어로 바뀌어야 한다. 이걸 수행하는 것이 컴파일러(Compiler)이다.
프로그래밍 언어 -> ISA
프로세서가 직접 이해하여 실행할 수 있는 기계어 명령어를 ISA(Instruction Set Architecture)라고 하며, 대표적으로 x86 등이 여기에 해당한다. 프로세서가 프로그램을 실행하기 위해서는 어셈플리어 프로그램을 ISA로 변환해야 하는데, 이 작업을 수행하는 것이 어셈블러(Assembler)이다.
ISA -> 마이크로아키텍쳐
ISA가 물리적으로 구현되는 방식을 마이크로아키텍쳐(Microarchitecture)라고 한다. 구현(Implementation)이라고도 한다. 프로세서를 설계할 때에는 다양한 trade-off가 존재하기 때문에, 같은 ISA이더라도 칩 제조사에 따라 중요시하는 요인이 달라 마이크로아키텍쳐의 설계도 다를 수 있다.
마이크로아키텍쳐 -> 논리 회로, 소자
마이크로아키텍쳐는 각자가 주어진 역할을 수행하는 논리 회로(Logic Circuit)들로 이루어져 있다. 또한 이 논리 회로들은 CMOS 등의 소자(Device)들로 이루어져 있으며, 최종적으로 소자에서 명령어에 따라 계산이 물리적으로 수행되게 된다.
이러한 추상화된 단계들을 거쳐 우리는 컴퓨터를 통해 문제를 해결하게 된다. 앞으로 각 과정을 이루는 개념들을 자세히 공부해 보자.
References
- Yale N. Patt, Sanjay J. Patel. 『Introduction to Computing Systems: From Bits&Gates to C/C++ and Beyond』. 3rd ed. McGraw Hill(2019). p1-19