램은 메인보드에 램 슬롯이란 곳에 끼워서 사용하며 cpu와는 버스라는 시스템을 이용해서 통신하게 됩니다.

이 버스는 일반적으로 주소 버스, 제어 버스, 데이터 버스의 세 부분으로 구성되게 됩니다.

 

메모리에서 데이터를 읽어 들일 때 CPU는 주소 버스를 통해 메모리 위치를 지정하고, 주소 디코더에 의해 해당 메모리는 데이터 버스에 데이터를 보냅니다. 그리고 CPU는 데이터 버스의 데이터를 읽게 됩니다. 메모리에 데이터를 쓸 때에 CPU는 메모리의 위치를 주소 버스로 지정하고, 데이터 버스에 데이터를 보냅니다. 메모리는 데이터 버스의 데이터를 받아 저장하게 됩니다.

 

하지만 CPU와 메모리, IO장치는 데이터 버스를 통해 데이터를 통신하기 때문에, 장치가 여러 개 있으면 데이터 버스도 여러 개 필요하기 때문에 메모리와 IO장치는 버스를 공유하게 되고, 이 때문에 cpu는 동시에 한 개의 장치하고만 통신할 수 있습니다. 그래서 한 개의 데이터 버스로 여러 장치를 이용할 수 있게 원하는 장치랑 통신할 수 있도록 회로를 구성해 주는데 이것을 주소 디코딩이라 하며, 이 일을 수행하는 장치를 주소 디코더라 부릅니다.

 

캐시

CPU 칩 안이나 그 근처에 두는 SRAM으로 이루어진 매우 빠른 메모리입니다.

DRAM도 CPU의 동작속도에 비하면 느리기 때문에 병목현상을 또 줄이고자 만들어진 작은 메모리입니다.

프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템(MMU)이 내부적으로 제어하게 됩니다.

보통 L1, L2, L3의 캐시가 있으며 L3로 갈수록 크기가 커지며 L1으로 갈수록 크기가 작아집니다.

캐시의 용량이 크면 클수록 더 많은 데이터를 캐시에 캐싱해둘 수 있기 때문에 램에서 불러오는 횟수도 줄어들고 cpu의 처리 속도도 빨라져서 좋지만 비싸기 때문에 적당히 달게 됩니다.

그리고 데이터를 처음 접근할 때마다 불러오면 속도가 느려지게 되기 때문에, 시간적 지역성, 공간적 지역성을 이용하여 데이터를 미리 캐싱해두게 됩니다.

시간적 지역성

예전에 한번 접근했던 데이터는 나중에 다시 접근할 가능성이 높다.

공간적 지역성

가까운 주소에 연속적으로 접근된 데이터가 있으면 현재 데이터도 접근할 가능성이 높다.

한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다.

 

레지스터

레지스터는 기본적으로 캐시와 같은 구조의 플립플롭 회로를 이용하여 저장하지만, CPU 바로 옆에 붙어있기 때문에 응답속도가 캐시에 비해서 빠릅니다.

32/64 비트 시스템이라 부르는 것이 하나의 레지스터에 저장할 수 있는 용량이 얼마인지 나타내는 것입니다.

32비트의 경우 한 번에 표현할 수 있는 메모리의 주소가 4GB 이기 때문에 인식할 수 있는 메모리의 크기도 4GB입니다.

64비트 레지스터
32비트 레지스터

앞에 붙어있는 E와 R은 E는 32비트, R은 64비트를 나타냅니다.

그리고 EAX, AX, AH, AL 모두 다른 레지스터가 아니라

32비트 레지스터 EAX 중 16비트가 AX, AX의 상위 8비트가 AH, 하위 8비트가 AL입니다.

즉 EAX레지스터가 AX를 포함하고, 이 AX가 AL, AH를 포함하고 있는 형태입니다.

 

레지스터의 종류는 여러 가지가 있습니다.

  • 데이터 레지스터 : 정수 값을 저장할 수 있는 레지스터.
  • 주소 레지스터 : 메모리 주소를 저장하여 메모리 접근에 사용되는 레지스터. 어떤 프로세서에서는, 주소를 저장하는 것이 아니라 조작하기 위한 목적으로 색인 레지스터를 사용하기도 한다.
  • 범용 레지스터 : 데이터와 주소를 모두 저장할 수 있는 레지스터.
  • 부동소수점 레지스터 : 많은 시스템에서 부동소수점 값을 저장하기 위해 사용된다.
  • 상수 레지스터 : 0이나 1 등 고정된 값을 저장하고 있는 레지스터.
  • 특수 레지스터 : 프로그램의 상태를 저장한다. PC, SP, SR 등이 있다.
    • 명령 레지스터 : 현재 실행 중인 명령어를 저장한다.
    • 색인 레지스터 : 실행 중에 피연산자의 주소를 계산하는 데 사용된다.

 

CPU에는 여러 가지 종류의 레지스터가 들어있습니다.

 

범용 레지스터

AC (Accumulator) : 연산 결과 데이터를 일시적으로 저장하는 레지스터

 

명령 레지스터

PC (Program Counter) : 다음 인출(Fetch) 될 명령어의 주소를 가지고 있는 레지스터

IR (Instruction Register) : 가장 최근에 인출된 명령어(현재 실행 중인 명령어)가 저장되어 있는 레지스터

 

데이터 레지스터(데이터 버스에 데이터를 읽고 쓰기 위해 잠시 저장해두는 버퍼 레지스터)

MBR (Memory Buffer Register) : 기억장치에 저장될 데이터 혹은 읽힌 데이터가 일시적으로 저장되는 버퍼 레지스터

 

주소 레지스터(주소 버스에 주소를 출력하기 전에 임시 저장하는 레지스터)

MAR (Memory Address Register) : PC에 저장된 명령어 주소가 사용되기 전에 일시적으로 저장되는 주소 레지스터

SP (Stack Pointer) : 스택의 데이터가 채워진 마지막 위치를 가리킵니다.

BP (Base Pointer) : 스택의 한 기준점을 가리킵니다.

IX (Index Pointer) : 배열을 순차적으로 액세스 하기 위한 레지스터입니다.

 

특수 레지스터

SR (Status Register) : 현재 CPU의 상태를 가지고 있는 레지스터

 

 

 

클럭

연산장치 또는 외부에 클럭 제네레이터가 클럭 펄스라는 것을 만들어 내부장치를 동기화시키는 데 사용합니다.

클럭에 따라서 명령어가 실행됩니다.

728x90

'해킹 > 과제' 카테고리의 다른 글

2. 명령어 구조, CPU 구성요소  (0) 2021.04.16
1. CPU 명령어 집합 구조  (0) 2021.04.16
2. 메모리들의 작동 방식 - RAM  (0) 2021.04.09
1. 메모리들의 작동 방식 - ROM  (0) 2021.04.06
2-1. 컴퓨터 부팅 과정 - UEFI  (0) 2021.04.06

+ Recent posts