컴퓨터시스템
컴퓨터의 기본 구조
컴퓨터는 프로그램 코드들을 정해진 순서대로 실행하고, 그 과정에서 필요한 정보를 읽고 처리하고 결과를 저장하는 역할을 합니다. 이러한 기능을 수행하는 하드웨어는 기본적으로 CPU, Memory(RAM, HDD, SSD .. etc), I/O Devices 와 이 요소들을 상호 연결하는 시스템 버스로 이루어져 있습니다.
시스템 버스는 CPU를 중심으로 다른 곳으로 정보가 이동하는 고속의 버스로 이해하면 됩니다.
먼저 중앙처리장치 (CPU)는 프로그램의 실행과, 데이터 처리라는 중추적인 기능의 수행을 담당합니다. 컴퓨터의 특성과 성능에 가장 큰 영향을 끼칩니다.
CPU가 처리할 프로그램 코드와 데이터는 기억장치에 저장됩니다. 기억장치 중 주기억 장치(RAM)는 Main board 상에서 CPU와 가까이에 위치하고, 반도체 기억장치 칩으로 이루어져 고속의 R/W가 가능하지만, 가격이 높고 면적을 많이 차지하여 저장 용량에 한계가 있습니다. 또한, 휘발성의 특성을 가지고 있어 영구 저장이 불가능합니다.
기억장치 중 보조기억장치는 HDD, SSD로 영구 저장 능력을 가진 저장장치를 의미합니다. 저장 밀도가 높고, 비트당 가격이 저렴하지만 물리적인 장치가 포함되고 R/W가 복잡한 반도체 칩을 이용하기 때문에 RAM에 비해 속도가 느립니다. 따라서 CPU가 직접 액세스하기보다 별도의 제어기로 접근합니다.
I/O Devices는 키보드, 모니터, 마우스 등 컴퓨터와 사용자 간의 상호작용을 위한 장치로, CPU와 직접 데이터를 교환하지 못하고 각 장치의 제어기가 CPU로 부터 명령을 받아서 장치의 동작을 제어 및 데이터 이동을 수행합니다.
정보의 표현과 저장
컴퓨터가 받아들이고 처리하는 정보는 프로그램 코드와 데이터가 있는데 이 정보들은 모두 2진수 (Binary Number)의 bit 조합으로 이루어져있습니다.
프로그램 코드는 사용자에 의해 C, C++과 같은 고급언어로 작성되어 있어 컴퓨터 H/W는 이해하지 못합니다. 따라서, 컴파일러에 의해 고급언어는 어셈블리어로 번역되고, 해당 언어를 기계어로 변환하여 H/W에서 작업을 수행합니다.
고급언어는 어느 컴퓨터에서 사용하든 거의 동일하지만, 기계어는 CPU마다 다르기 때문에, 언어상의 차이를 해결하기위해 어셈블리 언어를 사용합니다.
어셈블리에서 사용하는 명령어 기호는 MNEMONICS(니모닉스) 라고 부릅니다. ex) ADD X, Y , LOAD X, Y ... etc
어셈블리 언어로 작성된 프로그램은 어셈블러에 의해 기계어로 번역됩니다.
기계어로 번역되면 Binary Number의 연속으로 이루어지는데, 기계어는 크게 연산코드(Operation Code)와 오퍼랜드(Operand)로 나뉩니다.
연산코드는 ADD, LOAD와 같은 니모닉스들을 보고 연산을 지정하는 코드이고, 오퍼랜드는 사용할 데이터가 적재되어있는 기억장치 주소를 가집니다.
이때, 연산 코드가 3bit라면, 해당 기계어는 2^3가지 연산이 가능합니다.
오퍼랜드가 3bit라면, 2^3개의 기억장소를 저장할 수 있습니다.
CPU에 의해 한번에 처리될 수 있는 비트들의 그룹을 단어(word)라고 표현합니다. 단어의 비트 수는 CPU H/W 구조에 따라 다르게 나타날 수 있습니다. ex) 8bit, 16bit, 32bit ..etc