컴퓨터의 각 부품들, CPU와 메모리

노현아·2024년 3월 26일

추상화란?

컴퓨터는 0과 1로만 연산을 수행한다. 0과 1로 이루어진 디지털 신호를 사용하는 회로를 논리 회로라고 하는데, 이 논리 회로는 아주 많은 일을 할 수 있다.

하지만 복잡한 논리 회로를 한 번에 설계하는 것은 매우 어렵고, 복잡한 회로를 만들기 위해서는 먼저 간단한 일을 수행할 부품을 만들고 조합해서 복잡한 회로로 키워나가야 한다. 복잡한 회로가 해야 할 작업을 잘 분석하고, 작업을 여러 단계로 쪼개고 분류해 각 부품이 어떤 역할을 할지 정하는 것이 추상화이다.

추상화는 복잡한 과정으로부터 단순한 특징을 추출해내는 과정이므로, 추상화가 잘 되었다면 각각의 부품은 아주 단순한 일만 수행해도 된다. 추상화는 복잡한 장치를 설계하기 위해 꼭 필요한 도구로, 컴퓨터 과학에서 특히 중요한 개념이며, 컴퓨터 구조, 또는 컴퓨터 아키텍처란 컴퓨터가 어떻게 구성되어 있는지, 구성 요소들이 어떻게 상호작용하는지늘 나타내는 일종의 설계도이다.

폰 노이만 구조

컴퓨터를 구성하는 기본적인 부품들을 폰 노이만 구조에 따라 추상화하면 다음과 같다:
CPU, Memory, Input/Output Device

위는 폰 노이만 구조를 간단히 나타낸 그림이다. CPU는 명령은 처리하는 장치이고, 직접적인 계산은 여기에서 이루어진다. 메모리는 CPU가 처리할 데이터를 저장하는 장치이며, CPU가 처리할 데이터 뿐 아니라 CPU가 처리해야 할 명령도 저장된다. (명령도 데이터이기 때문)

컴퓨터의 동작 과정을 간단히 살펴보면, 컴퓨터는 입출력장치로부터 처리할 명령과 데이터를 메모리로 불러오고, CPU는 메모리에서 명령을 순서대로 읽어온다. 명령들은 메모리의 어떤 값을 불러올지, 값을 어떻게 계산할지, 어떤 값을 메모리에 다시 저장해야 하는지 등 CPU가 처리할 모든 일들을 명시한다. 계산이 끝난 후에 메모리에 저장된 값은 다시 입출력 장치를 통해 출력된다.

CPU

CPU를 중앙처리장치라고도 부른다. CPU도 레지스터라고 불리는 몇 개의 작은 저장 장치를 가지고 있다. 레지스터는 CPU가 연산을 수행하기 위해 사용하는 임시 저장 장치로, 메모리의 특정 위치에 저장된 명령을 순서대로 불러와 처리하되 아래 예시와 같은 과정을 거친다.

  • 두 레지스터에 저장된 값을 더해 다른 레지스터에 저장한다.
  • 한 레지스터가 메모리 상의 주소를 가리키고 있을 떄, 이 주소에 저장된 값을 다른 레지스터로 불러온다.
  • 한 레지스터가 메모리 상의 주소를 가리키고 있을 때, 다른 레지스터에 저장된 값을 이 주소에 저장한다.
  • 한 레지스터에 적힌 값이 1이라면 다음 차례에 다음 명령을 실행하지 말고, 명시된 다른 명령을 실행한다.

CPU가 직접 처리하는 명령은 위와 같이 단순한 형태이고, 이러한 명령들은 0과 1로 이루어진 신호로 인식된다. 이런 명령들의 모임을 ISA(Instruction Set Architecture)라고 한다. 0과 1로 이루어진 기계어로 된 명령이기 때문에, 이를 사람이 쉽게 읽을 수 있도록 일대일 대응시킨 프로그래밍 언어를 어셈블리(Assembly)라고 부른다.

CPU의 효율성을 높이는 방법에는 파이프라이닝(Pipelining)이라는 것이 있다. 하나의 작업을 여러 단계로 분리한 뒤, 동시에 처리할 수 있는 일은 동시에 처리하는 것을 말한다. 예를 들어, 빨래를 세탁기/건조기/옷장을 거치는 일련의 과정이라고 볼 때, 여러 번의 빨래를 효율적으로 수행하기 위해 먼저 세탁이 끝난 빨래가 모든 과정을 끝까지 수행할 때까지 기다리지 않고, 건조기 단계에 들어가면 다음 빨래를 세탁기에 넣고 돌리는 것과 같다.

메모리

메모리에는 주소가 있고, 주소마다 값을 저장한다. 메모리는 CPU가 요청한 주소에 적힌 값을 CPU에게 알려주거나, CPU가 알려준 주소에 새로운 값을 저장하는 역할을 한다. 이때, 컴퓨터에서 실행하는 프로그램이 복잡해지거나 많아지면 문제가 발생한다.

여러 개의 프로그램이 동시에 실행되려면 각각의 프로그램의 명령과 데이터가 모두 메모리의 각각 다른 위치에 저장되어 있어야 하는데 프로그램이 다른 프로그램이 사용하는 데이터를 읽거나 덮어씌워버리는 경우가 생길 수 있다. 이 때문에 가상 메모리(Virtual Memory)가 도입됐다.

가상 메모리는 OS의 가장 중요한 기능 중 하나다.

OS는 각 프로그램에게 가상 주소 공간이라는 추상화된 공간을 제공한다 :

  • 프로그램은 가상 주소 공간에 값을 읽고 쓴다.
  • 운영체제는 가상 주소를 실제 메모리의 주소인 물리적 주소로 변환한다. 이때 서로 다른 프로그램에는 서로 다른 가상 주소 공간이 배정된다.
  • 서로 다른 가상 주소 공간의 가상 주소들은 서로 다른 물리적 주소에 대응된다.

결과적으로, 프로그램이 자신의 가상 주소 공간을 자유롭게 사용하더라도 다른 프로그램에 영향을 주지 않는다. (실제로는 메모리 위에서 여러 프로그램이 동시에 실행되더라도, 각 프로그램은 혼자서 메모리를 사용하는 것처럼 보인다.)

메모리의 효율성에 대해

속도가 빠른 저장장치일수록 비싸고 크기가 크고 에너지를 많이 소모한다. 모든 저장 장치의 성능이 동시에 최대가 되도록 만들 수는 없으므로, 컴퓨터에는 성능이 높은 것부터 낮은 것까지 다양한 종류의 저장 장치를 사용한다.

성능이 낮을 수록 더 큰 용량을 가지게 되는 것을 메모리 계층 구조라고 한다.

모든 정보는 CPU에서 처리되므로, CPU와 가까울수록 저장 장치의 성능이 좋아지도록 설계한다. 보통 가장 작고 빠른 저장 장치는 CPU의 레지스터이며, 메모리는 이보다 더 크고 느리다. 하드 디스크 등 기타 저장 장치는 더욱더 용량이 크고 성능이 낮다.

메모리 계층 구조에서 오는 성능의 한계를 일부 극복하기 위한 방법이 있다. CPU가 메모리에 저장된 데이터를 읽어올 때는 처음 보는 데이터보다는 이전에 읽어온 데이터를 다시 읽어올 가능성이 높고, 또 이미 읽어온 데이터 근처에 있는 데이터를 읽어올 가능성이 높다. 이러한 특징을 지역성이라고 한다. 지역성을 활용하면 CPU가 다음으로 읽어올 데이터를 미리 예측하고 빠른 속도로 불러올 수 있다.

컴퓨터에는 캐시 메모리라고 불리는 특수 메모리가 있는데, 메모리 계층 구조로 보면 캐시 메모리는 메인 메모리보다 크기가 작지만 성능이 더 좋은 메모리다. CPU가 메인 메모리에서 데이터를 읽어 오면, 그 주변에 있는 데이터가 캐시 메모리에 임시로 저장된다. CPU가 다음 번 데이터를 읽어 올 때, 만약 그 데이터가 캐시 메모리에 존재한다면 메인 메모리까지 가지 않고 캐시 메모리에서 더 빠른 속도로 데이터를 불러올 수 있으므로 어마어마한 성능 향상을 가져온다.

출처 : https://stementor.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%B5%ED%95%99%EB%B6%80-%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0

profile
성실함과 끊임없는 학습을 통해 성장하는 개발자 지망생입니다. 새로운 도전과 배움을 즐기며 더 나은 코드를 꿈꿉니다.

0개의 댓글