머신러닝 엔지니어 뿐만 아니라 모든 개발자 분들은 코드의 성능과 비용을 고려하며 업무를 수행해야 합니다.
또한 업무 중 일어나는 이슈 사항에도 빠르게 문제점을 파악하려면 무엇보다 컴퓨터가 어떻게 생겼는지 알아야 극복해나갈 힘이 될 수 있습니다.
이 정리는 컴퓨터의 구조를 이해하고 생각의 폭을 넓히기 위해 정리하는 포스트입니다.
포스트 내용의 출처는 혼자서 공부하는 컴퓨터 구조+운영체제에 두고 있습니다.
컴퓨터의 구조를 알아보기 전, 컴퓨터가 이해하는 정보는 크게 2가지로 볼 수 있습니다.
첫 번째는 데이터 입니다. 데이터는 숫자, 이미지, 동영상과 같은 정적인 정보를 의미하고 컴퓨터와 주고받거나 내부에 저장된 정보들을 의미합니다. 두 번째로 명령어 입니다. 컴퓨터는 결국 명령어를 처리하는 기계로, 명령어는 컴퓨터가 실질적으로 동작할 수 있는 정보라고 할 수 있습니다. 데이터는 명령어를 처리하기 위한 일종의 재료가 됩니다.
컴퓨터의 핵심 부품으로 크게 CPU, Memory, 보조기억장치, 입출력장치로 나눌 수 있습니다.
CPU는 메모리에 저장된 명령어를 읽고, 해석하여 실행하는 역할을 합니다. CPU의 큰 구조는 ALU, 제어장치, 많은 레지스터들로 구성되어 있습니다.
위의 그림을 전부 이해할 필요 없으며 CPU에 관해 다시 한번 정리할 때 자세히 설명하겠습니다.
지금은 크게 아래 3가지만 기억하시면 됩니다.
정리하자면 CPU는 메모리에 저장된 값을 읽고, 해석하여 실행하는 역할을 담당합니다.
32bit vs 64bit?
컴퓨터를 32bit, 64bit로 나누는 기준은 CPU내부의 레지스터의 저장 크기에 따라 32bit를 저장할 수 있는지, 64bit를 저장할 수 있는지로 나뉜다.
Memory는 프로그램이 실행될때 필요한 데이터와 명령어를 저장하는 장치입니다. 즉 프로그램이 실행되려면 먼저 메모리에 저장이 되어야 실행될 수 있습니다. 이렇게 저장된 데이터와 명령어들은 메모리 주소 체계에 따라 저장되고 이 주소를 통해 값에 접근할 수 있습니다. 자세한 내용은 Memory에 대해 설명할때 배우도록 하고 지금은 아래의 내용만 기억하면 됩니다.
메모리는 RAM(Random Access Memory)/ROM(Read Only Memory)으로 나누어지며 보통 RAM을 지칭합니다. ROM은 컴퓨터의 출하시 필수적인 펌웨어들이 저장되는 장소로 RAM과 다르게 휘발성이 없습니다.
휘발성 장치 : 컴퓨터가 꺼졌을 때 데이터가 저장되지 않는 장치
메모리의 한칸은 1byte크기를 갖으며 메모리 한칸을 표현하기 위한 주소값을 32bit로 표현하는지 64bit로 표현하는지에 따라 차이가 있다. 32bit는 개의 주소를 표현할 수 있으며 1byte 메모리 개를 표현할 수 있다는 의미이며 이 값은 약 4GB이다. 따라서 메모리를 4GB까지 연결할 수 있는 것이며 1byte 메모리 개는 약 16EB(엑사바이트)이며 이론상 16EB 메모리까지 설치할 수 있지만 아직 지원 가능한 운영체제가 없다.
메모리는 현재 실행되는 프로그램에 대한 정보를 기억하는 장치라고 설명했습니다. 그렇다면 실행되지 않는 프로그램은 어떻게 저장될까요? 그 역할은 담당하는게 보조기억장치입니다.
메모리에 저장된 정보는 컴퓨터가 꺼졌을 때 저장된 데이터가 삭제되는 특징이 있습니다. 따라서 힘들게 설치한 프로그램이 삭제되지 않기 위해 보조기억장치에 저장하고, 실행이 필요하다면 메모리로 데이터와 명령어를 저장하여 CPU를 통해 실행되는 구조입니다. 또한 보조기억장치는 Memory에 비해 가격이 싸다는 장점이 있습니다.
입출력장치는 말 그대로 키보드 마우스 모니터와 같이 컴퓨터에 입력을 하거나, 정보를 출력하는 장치들을 의미합니다.
추가적으로 위에서 설명한 컴퓨터의 핵심 부품들을 연결하여 사용할 수 있는 기판인 메인보드(마더보드)가 있습니다. 메인보드의 정보를 주고 받을 수 있는 통로를 버스(BUS)라고 표현하고 대표적인 버스는 제어신호의 통로인 제어버스, 데이터 및 명령의 통로인 데이터버스, 주소 정보가 이동하는 통로인 주소버스가 있습니다.
이해를 돕기 위해 한 가지 예를 들고 글을 마치도록 하겠습니다.
메모리의 1번 주소에 "2번 주소와 3번주소를 더하고 저장해라"는 명령이 저장되어 있다고 생각해 보겠습니다.
CPU의 제어장치와 주소관련 레지스터(차후 학습예정)는 메모리 읽기 신호와 읽을 메모리 주소 정보를 각각 제어버스, 주소버스를 통해 메모리에 전달하게 됩니다. 이 정보에 따라 1번 주소의 메모리에 접근할 수 있고 저장된 데이터는 데이터버스를 통해 CPU의 레지스터에 저장하게 됩니다.
위와 같은 방식으로 2번 주소의 값과 3번 주소의 값을 읽고 CPU의 ALU는 이 값을 더하여 CPU내부 레지스터에 저장하게 됩니다.
마지막으로 저장된 값을 메모리에 쓰기 위해 데이터버스를 통해 결과값, 제어장치는 메모리 쓰기 신호, 주소관련 레지스터는 저장할 주소 정보를 메모리에 전달하여 값을 저장하게 됩니다.